Browse Source

token权限获取

hongxilin
no99 3 months ago
parent
commit
d9a2bd501f
  1. 43
      src/store/userPermissionCode.js
  2. 60
      src/views/chat.vue

43
src/store/userPermissionCode.js

@ -4,6 +4,16 @@ import { permissionAPI } from '../api/sword'
// 封装成一个普通的组合式函数 // 封装成一个普通的组合式函数
export const useUserInfo = () => { export const useUserInfo = () => {
// 修正所有权限变量拼写 (ss→s)
const brainPermission = ref(0) // 删除 < 和 number 之间的空格
const swordPermission = ref(0)
const pricePermission = ref(0)
const timePermission = ref(0)
const aibullPermission = ref(0)
const aiGnbullPermission = ref(0)
const airadarPermission = ref(0)
const aiGoldMarketList = ref([]) // 移除字符串数组类型
const userRole = ref('') const userRole = ref('')
const loading = ref(false) const loading = ref(false)
const isReady = ref(false) const isReady = ref(false)
@ -11,9 +21,9 @@ export const useUserInfo = () => {
const getQueryVariable = (variable) => { const getQueryVariable = (variable) => {
const query = window.location.search.substring(1) const query = window.location.search.substring(1)
console.log('query', query)
// console.log('query', query)
const vars = query.split('&') const vars = query.split('&')
console.log('vars', vars)
// console.log('vars', vars)
for (let i = 0; i < vars.length; i++) { for (let i = 0; i < vars.length; i++) {
const pair = vars[i].split('=') const pair = vars[i].split('=')
if (pair[0] === variable) { if (pair[0] === variable) {
@ -23,7 +33,7 @@ export const useUserInfo = () => {
return '' return ''
} }
const getSessionId = (sessionID,data) => {
const getSessionId = (sessionID, data) => {
const query = data const query = data
const vars = query.split(',') const vars = query.split(',')
// console.log('vars', vars) // console.log('vars', vars)
@ -48,16 +58,24 @@ export const useUserInfo = () => {
const fetchUserInfo = async () => { const fetchUserInfo = async () => {
getAppToken.value = localStorage.getItem('localToken') getAppToken.value = localStorage.getItem('localToken')
? String(localStorage.getItem('localToken'))
? String(localStorage.getItem('localToken'))
: '' : ''
loading.value = true loading.value = true
try { try {
const requestParams = { const requestParams = {
...{ token: getAppToken.value || '' } ...{ token: getAppToken.value || '' }
} }
// 修正拼写错误
const res = await permissionAPI(requestParams)
// 更新状态,移除类型断言
const res = await permissionAPI(requestParams) // 修复API名称拼写
// 修复所有权限变量的拼写错误
brainPermission.value = res.data.brainExpireStatus // 注意:原变量名存在拼写错误,建议改为 brainPermission
swordPermission.value = res.data.swordExpireStatus // 同上
pricePermission.value = res.data.stockForecastExpireStatus // 同上
timePermission.value = res.data.spaceForecastExpireStatus // 同上
aibullPermission.value = res.data.aibullExpireStatus // 同上
aiGnbullPermission.value = res.data.aigoldBullExpireStatus // 同上
airadarPermission.value = res.data.airadarExpireStatus // 同上
aiGoldMarketList.value = res.data.marketList
userRole.value = res.data.userRole userRole.value = res.data.userRole
isReady.value = true isReady.value = true
} catch (err) { } catch (err) {
@ -76,11 +94,20 @@ export const useUserInfo = () => {
onMounted(() => { onMounted(() => {
}) })
// 修复返回对象中的拼写错误 (最终残留错误)
return { return {
userRole, userRole,
loading, loading,
isReady, isReady,
// 修正返回属性名拼写
brainPermission, // 从 brainPerssion 修正
swordPermission,
pricePermission,
timePermission,
aibullPermission,
aiGnbullPermission,
airadarPermission,
aiGoldMarketList,
init, init,
fetchUserInfo, fetchUserInfo,
getQueryVariable, getQueryVariable,

60
src/views/chat.vue

@ -8,14 +8,13 @@ import { marked } from 'marked'; // 引入marked库
import katex from 'katex'; // KaTeX import katex from 'katex'; // KaTeX
import 'katex/dist/katex.min.css'; // KaTeX import 'katex/dist/katex.min.css'; // KaTeX
const { getQueryVariable } = useUserInfo()
// getSessionId
const { getSessionId } = useUserInfo()
const { getQueryVariable,getSessionId,fetchUserInfo,loading,isReady } = useUserInfo()
const errorMsg = ref('')
const isTokenValid = ref(false) const isTokenValid = ref(false)
const fnGetToken = () => { const fnGetToken = () => {
localStorage.setItem('localToken', decodeURIComponent(String(getQueryVariable('token')))) localStorage.setItem('localToken', decodeURIComponent(String(getQueryVariable('token'))))
console.log(localStorage.getItem('localToken'));
// console.log(localStorage.getItem('localToken'));
} }
setTimeout(() => { setTimeout(() => {
fnGetToken() fnGetToken()
@ -24,11 +23,20 @@ setTimeout(() => {
// token // token
const validateToken = async () => { const validateToken = async () => {
const token = localStorage.getItem('localToken') const token = localStorage.getItem('localToken')
console.log('token',token);
// console.log('token', token);
if (!token) { if (!token) {
console.error('未找到 token,请重新登录') console.error('未找到 token,请重新登录')
errorMsg.value = '用户未登录'
return false return false
} }
// token
await fetchUserInfo();
console.log('loading', loading.value);
if(!isReady.value){
errorMsg.value = 'token 验证失败'
return false
}
return true return true
} }
// //
@ -138,7 +146,7 @@ const sendMessage = async () => {
const response = await fetch("http://wnxvxx.natappfree.cc/api/v1/chats/8b37cd9cf0c811efa4210242ac120003/completions", { const response = await fetch("http://wnxvxx.natappfree.cc/api/v1/chats/8b37cd9cf0c811efa4210242ac120003/completions", {
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ragflow-hkNjEwYjcwZjBlMDExZWZiYjYzMDI0Mm' }, headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ragflow-hkNjEwYjcwZjBlMDExZWZiYjYzMDI0Mm' },
body: JSON.stringify({ question: content, stream: false, session_id: sessionId.value })
body: JSON.stringify({ question: content, stream: false, session_id: sessionId.value })
}); });
const data = await response.json(); const data = await response.json();
console.log(data, 'data211111'); console.log(data, 'data211111');
@ -246,9 +254,6 @@ onMounted(async () => {
// token // token
const isValid = await validateToken() const isValid = await validateToken()
isTokenValid.value = isValid isTokenValid.value = isValid
if (!isValid) {
console.error('Token 验证失败,请重新登录')
}
}) })
</script> </script>
<template> <template>
@ -265,7 +270,7 @@ onMounted(async () => {
</div> </div>
<div class="message-bubble"> <div class="message-bubble">
<div class="message-content" v-html="message.content"> <div class="message-content" v-html="message.content">
</div> </div>
<div class="message-time">{{ formatTime(message.timestamp) }}</div> <div class="message-time">{{ formatTime(message.timestamp) }}</div>
</div> </div>
@ -301,42 +306,54 @@ onMounted(async () => {
</div> </div>
<!-- 未登录覆盖层 --> <!-- 未登录覆盖层 -->
<div v-if="!isTokenValid" class="overlay"> <div v-if="!isTokenValid" class="overlay">
<div class="overlay-content">用户未登录</div>
<div class="overlay-content">{{errorMsg}}</div>
</div> </div>
</div> </div>
</template> </template>
<style scoped> <style scoped>
table{
table {
border-color: black border-color: black
} }
/* 使用更具体的选择器 */ /* 使用更具体的选择器 */
.message-bubble .message-content .thinking-content { .message-bubble .message-content .thinking-content {
color: #c8c4c4; color: #c8c4c4;
font-style: italic; font-style: italic;
} }
/* 新增表格样式 */ /* 新增表格样式 */
.message-bubble .message-content table { .message-bubble .message-content table {
border-collapse: collapse; /* 合并边框 */
width: 100%; /* 表格宽度为 100% */
border-collapse: collapse;
/* 合并边框 */
width: 100%;
/* 表格宽度为 100% */
} }
.message-bubble .message-content th, .message-bubble .message-content th,
.message-bubble .message-content td { .message-bubble .message-content td {
border: 1px solid #e0e0e0; /* 单元格边框 */
padding: 8px; /* 单元格内边距 */
text-align: left; /* 文本左对齐 */
border: 1px solid #e0e0e0;
/* 单元格边框 */
padding: 8px;
/* 单元格内边距 */
text-align: left;
/* 文本左对齐 */
} }
.message-bubble .message-content th { .message-bubble .message-content th {
background-color: #f1f3f5; /* 表头背景颜色 */
background-color: #f1f3f5;
/* 表头背景颜色 */
} }
/* 其他样式保持不变 */ /* 其他样式保持不变 */
.message-item.bot { .message-item.bot {
justify-content: flex-start; /* 让机器人消息靠左对齐 */
text-align: left; /* 新增:设置文本左对齐 */
justify-content: flex-start;
/* 让机器人消息靠左对齐 */
text-align: left;
/* 新增:设置文本左对齐 */
} }
.chat-container { .chat-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -547,7 +564,4 @@ table{
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
text-align: center; text-align: center;
} }
</style> </style>
Loading…
Cancel
Save