fix(简易模式): 统一前端状态管理,修复路由守卫失效问题
**问题**: 1. login/register 未处理 run_mode,导致 authStore.runMode 不更新 2. 侧边栏使用 simpleMode.value,与路由守卫的 authStore.isSimpleMode 不一致 **修复**: 1. 在 login() 和 register() 中提取并设置 run_mode 2. 统一侧边栏使用 authStore.isSimpleMode **影响**: - 路由守卫现在可以正确工作 - 前端UI状态与后端配置保持一致 - 登录/注册后立即生效,无需刷新
This commit is contained in:
@@ -46,7 +46,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Personal Section for Admin (hidden in simple mode) -->
|
<!-- Personal Section for Admin (hidden in simple mode) -->
|
||||||
<div v-if="!simpleMode" class="sidebar-section">
|
<div v-if="!authStore.isSimpleMode" class="sidebar-section">
|
||||||
<div v-if="!sidebarCollapsed" class="sidebar-section-title">
|
<div v-if="!sidebarCollapsed" class="sidebar-section-title">
|
||||||
{{ t('nav.myAccount') }}
|
{{ t('nav.myAccount') }}
|
||||||
</div>
|
</div>
|
||||||
@@ -412,7 +412,7 @@ const userNavItems = computed(() => {
|
|||||||
{ path: '/redeem', label: t('nav.redeem'), icon: GiftIcon, hideInSimpleMode: true },
|
{ path: '/redeem', label: t('nav.redeem'), icon: GiftIcon, hideInSimpleMode: true },
|
||||||
{ path: '/profile', label: t('nav.profile'), icon: UserIcon }
|
{ path: '/profile', label: t('nav.profile'), icon: UserIcon }
|
||||||
]
|
]
|
||||||
return simpleMode.value ? items.filter(item => !item.hideInSimpleMode) : items
|
return authStore.isSimpleMode ? items.filter(item => !item.hideInSimpleMode) : items
|
||||||
})
|
})
|
||||||
|
|
||||||
// Personal navigation items (for admin's "My Account" section, without Dashboard)
|
// Personal navigation items (for admin's "My Account" section, without Dashboard)
|
||||||
@@ -424,7 +424,7 @@ const personalNavItems = computed(() => {
|
|||||||
{ path: '/redeem', label: t('nav.redeem'), icon: GiftIcon, hideInSimpleMode: true },
|
{ path: '/redeem', label: t('nav.redeem'), icon: GiftIcon, hideInSimpleMode: true },
|
||||||
{ path: '/profile', label: t('nav.profile'), icon: UserIcon }
|
{ path: '/profile', label: t('nav.profile'), icon: UserIcon }
|
||||||
]
|
]
|
||||||
return simpleMode.value ? items.filter(item => !item.hideInSimpleMode) : items
|
return authStore.isSimpleMode ? items.filter(item => !item.hideInSimpleMode) : items
|
||||||
})
|
})
|
||||||
|
|
||||||
// Admin navigation items
|
// Admin navigation items
|
||||||
@@ -441,7 +441,7 @@ const adminNavItems = computed(() => {
|
|||||||
]
|
]
|
||||||
|
|
||||||
// 简单模式下,在系统设置前插入 API密钥
|
// 简单模式下,在系统设置前插入 API密钥
|
||||||
if (simpleMode.value) {
|
if (authStore.isSimpleMode) {
|
||||||
const filtered = baseItems.filter(item => !item.hideInSimpleMode)
|
const filtered = baseItems.filter(item => !item.hideInSimpleMode)
|
||||||
filtered.push({ path: '/keys', label: t('nav.apiKeys'), icon: KeyIcon })
|
filtered.push({ path: '/keys', label: t('nav.apiKeys'), icon: KeyIcon })
|
||||||
filtered.push({ path: '/admin/settings', label: t('nav.settings'), icon: CogIcon })
|
filtered.push({ path: '/admin/settings', label: t('nav.settings'), icon: CogIcon })
|
||||||
|
|||||||
@@ -101,16 +101,22 @@ export const useAuthStore = defineStore('auth', () => {
|
|||||||
|
|
||||||
// Store token and user
|
// Store token and user
|
||||||
token.value = response.access_token
|
token.value = response.access_token
|
||||||
user.value = response.user
|
|
||||||
|
// Extract run_mode if present
|
||||||
|
if (response.user.run_mode) {
|
||||||
|
runMode.value = response.user.run_mode
|
||||||
|
}
|
||||||
|
const { run_mode, ...userData } = response.user
|
||||||
|
user.value = userData
|
||||||
|
|
||||||
// Persist to localStorage
|
// Persist to localStorage
|
||||||
localStorage.setItem(AUTH_TOKEN_KEY, response.access_token)
|
localStorage.setItem(AUTH_TOKEN_KEY, response.access_token)
|
||||||
localStorage.setItem(AUTH_USER_KEY, JSON.stringify(response.user))
|
localStorage.setItem(AUTH_USER_KEY, JSON.stringify(userData))
|
||||||
|
|
||||||
// Start auto-refresh interval
|
// Start auto-refresh interval
|
||||||
startAutoRefresh()
|
startAutoRefresh()
|
||||||
|
|
||||||
return response.user
|
return userData
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Clear any partial state on error
|
// Clear any partial state on error
|
||||||
clearAuth()
|
clearAuth()
|
||||||
@@ -130,16 +136,22 @@ export const useAuthStore = defineStore('auth', () => {
|
|||||||
|
|
||||||
// Store token and user
|
// Store token and user
|
||||||
token.value = response.access_token
|
token.value = response.access_token
|
||||||
user.value = response.user
|
|
||||||
|
// Extract run_mode if present
|
||||||
|
if (response.user.run_mode) {
|
||||||
|
runMode.value = response.user.run_mode
|
||||||
|
}
|
||||||
|
const { run_mode, ...userDataWithoutRunMode } = response.user
|
||||||
|
user.value = userDataWithoutRunMode
|
||||||
|
|
||||||
// Persist to localStorage
|
// Persist to localStorage
|
||||||
localStorage.setItem(AUTH_TOKEN_KEY, response.access_token)
|
localStorage.setItem(AUTH_TOKEN_KEY, response.access_token)
|
||||||
localStorage.setItem(AUTH_USER_KEY, JSON.stringify(response.user))
|
localStorage.setItem(AUTH_USER_KEY, JSON.stringify(userDataWithoutRunMode))
|
||||||
|
|
||||||
// Start auto-refresh interval
|
// Start auto-refresh interval
|
||||||
startAutoRefresh()
|
startAutoRefresh()
|
||||||
|
|
||||||
return response.user
|
return userDataWithoutRunMode
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Clear any partial state on error
|
// Clear any partial state on error
|
||||||
clearAuth()
|
clearAuth()
|
||||||
|
|||||||
Reference in New Issue
Block a user