fix(client): clear protected views on logout and show customer customs state

This commit is contained in:
2026-10-03 03:54:06 +08:00
parent b1f538b3ac
commit 5c53eba31b
7 changed files with 149 additions and 21 deletions
+10 -6
View File
@@ -1,7 +1,7 @@
<script setup lang="ts">
import { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessageBox } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import { Bell, LogOut, Menu, X } from '@lucide/vue'
import baiyueLogoDark from '@/assets/brand/baiyue-logo-dark.png'
import ClientSidebarMenu from '@/components/ClientSidebarMenu.vue'
@@ -108,6 +108,7 @@ watch(
watch(
() => auth.permissionCodes.join('|'),
() => {
if (!auth.isAuthenticated) return
const result = workspace.reconcile(isAllowedTab)
if (result.closedActive) void router.replace(result.fallbackPath ?? getFirstAccessiblePath(auth.permissionCodes))
},
@@ -119,6 +120,7 @@ watch(
if (authenticated) return
workspace.clear()
unsaved.clear()
void router.replace('/login')
},
)
@@ -163,6 +165,7 @@ function handleBeforeUnload(event: BeforeUnloadEvent) {
}
async function handleLogout() {
const logoutToken = auth.token
try {
await ElMessageBox.confirm(unsaved.hasDirty
? '当前还有未保存的修改,退出后这些内容将丢失。确定继续吗?'
@@ -176,15 +179,16 @@ async function handleLogout() {
throw error
}
workspace.clear()
unsaved.clear()
await auth.logout()
await router.replace('/login')
if (auth.token !== logoutToken) return
void auth.logout().catch(() => {
if (!auth.isAuthenticated) ElMessage.warning('已退出本页,服务器会话注销未完成')
})
}
</script>
<template>
<div class="client-shell" :class="{ 'mobile-menu-open': mobileMenuOpen, 'is-dashboard-route': route.path === '/' }">
<div v-if="auth.isAuthenticated" class="client-shell" :class="{ 'mobile-menu-open': mobileMenuOpen, 'is-dashboard-route': route.path === '/' }">
<header class="top-header" :inert="mobileMenuOpen" :aria-hidden="mobileMenuOpen ? 'true' : undefined">
<button
ref="menuButtonRef"