修复token验证和左侧表单问题

This commit is contained in:
2025-08-19 17:48:53 +08:00
parent 1ceaeb9214
commit 2d44b8764d
39 changed files with 1461 additions and 554 deletions
+7 -34
View File
@@ -1,5 +1,5 @@
import { defineStore } from 'pinia'
import { getUserMenus, getMenuList, getTempUserMenus, type MenuItem } from '@/api/menu'
import { getUserMenus, type MenuItem } from '@/api/menu'
import ENV_CONFIG from '@/config/env'
interface MenuState {
@@ -8,12 +8,6 @@ interface MenuState {
error: string | null
}
interface ApiResponse<T> {
code: number
message: string
data: T
}
const useMenuStore = defineStore('menu', {
state: (): MenuState => ({
menus: [],
@@ -33,43 +27,22 @@ const useMenuStore = defineStore('menu', {
},
actions: {
// 获取用户菜单(使用临时接口)
// 获取管理员菜单
async fetchUserMenus() {
this.loading = true
this.error = null
try {
const response = await getTempUserMenus() as unknown as ApiResponse<MenuItem[]>
const response = await getUserMenus() as unknown as MenuItem[]
if (response.code === 200 && response.data) {
this.menus = response.data
if (response && Array.isArray(response)) {
this.menus = response
} else {
throw new Error(response.message || '获取菜单失败')
throw new Error('获取菜单失败')
}
} catch (error: any) {
this.error = error.message || '获取菜单失败'
console.error('获取用户菜单失败:', error)
} finally {
this.loading = false
}
},
// 获取所有菜单(管理员用)
async fetchAllMenus() {
this.loading = true
this.error = null
try {
const response = await getMenuList() as unknown as ApiResponse<MenuItem[]>
if (response.code === 200 && response.data) {
this.menus = response.data
} else {
throw new Error(response.message || '获取菜单失败')
}
} catch (error: any) {
this.error = error.message || '获取菜单失败'
console.error('获取所有菜单失败:', error)
console.error('获取管理员菜单失败:', error)
} finally {
this.loading = false
}
+13 -1
View File
@@ -103,6 +103,7 @@ const useUserStore = defineStore('user', {
try {
// 验证token是否有效
const response = await getUserInfoApi() as unknown as UserInfo
if (response && response.id) {
this.token = token
this.userInfo = response
@@ -113,10 +114,21 @@ const useUserStore = defineStore('user', {
}
} catch (error: any) {
console.error('获取用户信息失败:', error)
// 网络错误时,不清除本地状态,保持用户登录状态
// 如果有本地token和用户信息,先保持登录状态
// 只有在明确知道token无效时才清除
if (error.response?.status === 401) {
this.clearUserState()
} else {
// 网络错误或其他错误,使用本地存储的数据
try {
const userInfo = JSON.parse(userInfoStr)
this.token = token
this.userInfo = userInfo
this.isLogin = true
} catch (parseError) {
// 本地数据解析失败,清除状态
this.clearUserState()
}
}
}
}