From 621431dcb90f1e4587668d9704afe893df75e046 Mon Sep 17 00:00:00 2001 From: dxc Date: Wed, 20 May 2026 09:09:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=98=E6=9B=B4V3.29?= =?UTF-8?q?=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inventory-web/index.html | 61 +++++++++++++++++-------- inventory-web/src/App.vue | 5 +- inventory-web/src/stores/user.ts | 15 ++++++ inventory-web/src/views/login/index.vue | 7 +-- 4 files changed, 62 insertions(+), 26 deletions(-) diff --git a/inventory-web/index.html b/inventory-web/index.html index 20b81fe..455e197 100644 --- a/inventory-web/index.html +++ b/inventory-web/index.html @@ -10,28 +10,51 @@
diff --git a/inventory-web/src/App.vue b/inventory-web/src/App.vue index 4031ec8..0900935 100644 --- a/inventory-web/src/App.vue +++ b/inventory-web/src/App.vue @@ -189,7 +189,8 @@ const handleLogout = () => { .then(async () => { userStore.logout() ElMessage({ type: 'success', message: '已安全退出' }) - await router.replace('/login') + // 直接原生跳转,重置一切 + window.location.href = '/login' }) .catch(() => {}) } @@ -234,7 +235,7 @@ const handleLogout = () => { diff --git a/inventory-web/src/stores/user.ts b/inventory-web/src/stores/user.ts index 4e803a0..9e4ab22 100644 --- a/inventory-web/src/stores/user.ts +++ b/inventory-web/src/stores/user.ts @@ -84,6 +84,11 @@ export const useUserStore = defineStore('user', () => { localStorage.setItem('refresh_token', data.refresh_token) } + // [Dify] 登录成功,重新初始化 Dify(Token 变化时 Dify 会开辟新会话,解决会话串号问题) + if (typeof window.initDifyChatbot === 'function') { + window.initDifyChatbot() + } + // 登录成功后,根据角色获取权限 if (role.value) { try { @@ -110,6 +115,11 @@ export const useUserStore = defineStore('user', () => { const setToken = (newToken: string) => { token.value = 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 (硬盘) localStorage.removeItem('access_token') + + // [Dify] 退出登录时,彻底销毁桌面上的 Dify 聊天窗口,防止信息泄露或报错 + document.querySelectorAll('[id^="dify-chatbot-"]').forEach(el => el.remove()) + + // 清空其他本地存储 localStorage.removeItem('refresh_token') localStorage.removeItem('token') localStorage.removeItem('role') diff --git a/inventory-web/src/views/login/index.vue b/inventory-web/src/views/login/index.vue index dd09076..7e53774 100644 --- a/inventory-web/src/views/login/index.vue +++ b/inventory-web/src/views/login/index.vue @@ -80,12 +80,9 @@ const onLogin = async () => { const success = await userStore.handleLogin(loginForm) if (success) { - // [新增] 2. 登录成功后,立即拉取当前用户的权限字典 - // 这样进入 Dashboard 时,所有按钮/列的显示状态就已经确定了 await permissionStore.loadPermissions() - - // 3. 跳转 - router.push('/dashboard') + // 直接跳转并触发完整页面重载,干净重置 Dify Embed Token + window.location.href = '/dashboard' } else { // 失败(业务逻辑拒绝):弹出模态框 showLoginFailAlert('用户名或密码错误')