版本变更V3.29体验优化
This commit is contained in:
@ -10,28 +10,51 @@
|
|||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<script type="module" src="/src/main.ts"></script>
|
<script type="module" src="/src/main.ts"></script>
|
||||||
<script>
|
<script>
|
||||||
// 获取当前用户的登录凭证 (Token)
|
window.initDifyChatbot = function() {
|
||||||
var currentToken = localStorage.getItem('access_token') || localStorage.getItem('token') || '';
|
var currentToken = localStorage.getItem('access_token') || localStorage.getItem('token') || '';
|
||||||
var username=localStorage.getItem("username");
|
var username = localStorage.getItem("username") || '';
|
||||||
window.difyChatbotConfig = {
|
|
||||||
token: '6T0eTgukUEqzK0iW',
|
if (!currentToken) {
|
||||||
baseUrl: 'http://172.16.0.198:8080',
|
console.log('未检测到 Token,暂不加载 Dify');
|
||||||
inputs: {
|
return;
|
||||||
"user_token": currentToken
|
}
|
||||||
},
|
|
||||||
systemVariables: {
|
// 【新增 1】彻底清理浏览器内存中残留的 Dify 全局对象
|
||||||
"user_id":username
|
window.difyChatbot = undefined;
|
||||||
},
|
delete window.difyChatbot;
|
||||||
userVariables: {},
|
|
||||||
}
|
// 【新增 2】清理旧的 DOM 节点
|
||||||
// 延时1秒后动态加载 embed.min.js
|
var oldScript = document.getElementById('6T0eTgukUEqzK0iW');
|
||||||
setTimeout(function() {
|
if (oldScript) oldScript.remove();
|
||||||
|
document.querySelectorAll('[id^="dify-chatbot-"]').forEach(function(el) { el.remove(); });
|
||||||
|
|
||||||
|
// 【核心破解 3】动态化 user_id,打破 Dify 会话锁定机制
|
||||||
|
// 取 token 的最后 8 位拼在用户名后。只要 Token 变了,Dify 就会开启新会话,强制读取新 Token。
|
||||||
|
var dynamicUserId = username + '_' + currentToken.slice(-8);
|
||||||
|
|
||||||
|
window.difyChatbotConfig = {
|
||||||
|
token: '6T0eTgukUEqzK0iW',
|
||||||
|
baseUrl: 'http://172.16.0.198:8080',
|
||||||
|
inputs: {
|
||||||
|
"user_token": currentToken
|
||||||
|
},
|
||||||
|
systemVariables: {
|
||||||
|
"user_id": dynamicUserId // <- 这里使用了动态 ID
|
||||||
|
},
|
||||||
|
userVariables: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
// 【新增 4】在脚本 URL 后加上时间戳,破除浏览器强缓存
|
||||||
var script = document.createElement('script');
|
var script = document.createElement('script');
|
||||||
script.src = 'http://172.16.0.198:8080/embed.min.js';
|
script.src = 'http://172.16.0.198:8080/embed.min.js?t=' + new Date().getTime();
|
||||||
script.id = '6T0eTgukUEqzK0iW';
|
script.id = '6T0eTgukUEqzK0iW';
|
||||||
|
script.defer = true;
|
||||||
document.head.appendChild(script);
|
document.head.appendChild(script);
|
||||||
console.log('✅ Dify chatbot 已延迟1秒加载');
|
|
||||||
}, 100);
|
console.log('✅ Dify chatbot 已挂载新会话,当前绑定 ID:', dynamicUserId);
|
||||||
|
};
|
||||||
|
|
||||||
|
setTimeout(window.initDifyChatbot, 100);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!--<script-->
|
<!--<script-->
|
||||||
|
|||||||
@ -189,7 +189,8 @@ const handleLogout = () => {
|
|||||||
.then(async () => {
|
.then(async () => {
|
||||||
userStore.logout()
|
userStore.logout()
|
||||||
ElMessage({ type: 'success', message: '已安全退出' })
|
ElMessage({ type: 'success', message: '已安全退出' })
|
||||||
await router.replace('/login')
|
// 直接原生跳转,重置一切
|
||||||
|
window.location.href = '/login'
|
||||||
})
|
})
|
||||||
.catch(() => {})
|
.catch(() => {})
|
||||||
}
|
}
|
||||||
@ -234,7 +235,7 @@ const handleLogout = () => {
|
|||||||
<footer v-if="!isLoginPage" class="app-footer">
|
<footer v-if="!isLoginPage" class="app-footer">
|
||||||
<span class="version-tag">
|
<span class="version-tag">
|
||||||
<el-icon style="vertical-align: middle; margin-right: 4px"><InfoFilled /></el-icon>
|
<el-icon style="vertical-align: middle; margin-right: 4px"><InfoFilled /></el-icon>
|
||||||
当前版本:V3.26(添加AI助手版)
|
当前版本:V3.29(添加AI助手版)
|
||||||
</span>
|
</span>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
|||||||
@ -84,6 +84,11 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
localStorage.setItem('refresh_token', data.refresh_token)
|
localStorage.setItem('refresh_token', data.refresh_token)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [Dify] 登录成功,重新初始化 Dify(Token 变化时 Dify 会开辟新会话,解决会话串号问题)
|
||||||
|
if (typeof window.initDifyChatbot === 'function') {
|
||||||
|
window.initDifyChatbot()
|
||||||
|
}
|
||||||
|
|
||||||
// 登录成功后,根据角色获取权限
|
// 登录成功后,根据角色获取权限
|
||||||
if (role.value) {
|
if (role.value) {
|
||||||
try {
|
try {
|
||||||
@ -110,6 +115,11 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
const setToken = (newToken: string) => {
|
const setToken = (newToken: string) => {
|
||||||
token.value = newToken
|
token.value = newToken
|
||||||
localStorage.setItem('access_token', newToken)
|
localStorage.setItem('access_token', newToken)
|
||||||
|
|
||||||
|
// [Dify] Token 刷新后,重新初始化 Dify 以更新用户会话
|
||||||
|
if (typeof window.initDifyChatbot === 'function') {
|
||||||
|
window.initDifyChatbot()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 退出逻辑
|
// 退出逻辑
|
||||||
@ -123,6 +133,11 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
|
|
||||||
// 2. 清空 LocalStorage (硬盘)
|
// 2. 清空 LocalStorage (硬盘)
|
||||||
localStorage.removeItem('access_token')
|
localStorage.removeItem('access_token')
|
||||||
|
|
||||||
|
// [Dify] 退出登录时,彻底销毁桌面上的 Dify 聊天窗口,防止信息泄露或报错
|
||||||
|
document.querySelectorAll('[id^="dify-chatbot-"]').forEach(el => el.remove())
|
||||||
|
|
||||||
|
// 清空其他本地存储
|
||||||
localStorage.removeItem('refresh_token')
|
localStorage.removeItem('refresh_token')
|
||||||
localStorage.removeItem('token')
|
localStorage.removeItem('token')
|
||||||
localStorage.removeItem('role')
|
localStorage.removeItem('role')
|
||||||
|
|||||||
@ -80,12 +80,9 @@ const onLogin = async () => {
|
|||||||
const success = await userStore.handleLogin(loginForm)
|
const success = await userStore.handleLogin(loginForm)
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
// [新增] 2. 登录成功后,立即拉取当前用户的权限字典
|
|
||||||
// 这样进入 Dashboard 时,所有按钮/列的显示状态就已经确定了
|
|
||||||
await permissionStore.loadPermissions()
|
await permissionStore.loadPermissions()
|
||||||
|
// 直接跳转并触发完整页面重载,干净重置 Dify Embed Token
|
||||||
// 3. 跳转
|
window.location.href = '/dashboard'
|
||||||
router.push('/dashboard')
|
|
||||||
} else {
|
} else {
|
||||||
// 失败(业务逻辑拒绝):弹出模态框
|
// 失败(业务逻辑拒绝):弹出模态框
|
||||||
showLoginFailAlert('用户名或密码错误')
|
showLoginFailAlert('用户名或密码错误')
|
||||||
|
|||||||
Reference in New Issue
Block a user