feat: 功能
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
import { useUserStore } from '@/stores/user'
|
||||
import { getToken } from '@gold/utils/token-manager'
|
||||
|
||||
const routes = [
|
||||
{
|
||||
@@ -48,4 +50,40 @@ const router = createRouter({
|
||||
routes,
|
||||
})
|
||||
|
||||
// 用户信息初始化标志(确保只初始化一次)
|
||||
let userInfoInitialized = false
|
||||
|
||||
/**
|
||||
* 路由导航守卫:初始化用户信息
|
||||
* 在首次路由跳转时,如果已登录(有 token),则获取用户信息
|
||||
*/
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
// 只在首次路由跳转时初始化用户信息
|
||||
if (!userInfoInitialized) {
|
||||
userInfoInitialized = true
|
||||
|
||||
const token = getToken()
|
||||
if (token) {
|
||||
try {
|
||||
const userStore = useUserStore()
|
||||
// 如果 store 中已标记为登录,则获取用户信息
|
||||
if (userStore.isLoggedIn) {
|
||||
userStore.fetchUserInfo()
|
||||
} else {
|
||||
// 如果有 token 但 store 中未标记为登录,可能是刷新页面
|
||||
// 先标记为已登录,然后获取用户信息
|
||||
userStore.isLoggedIn = true
|
||||
userStore.fetchUserInfo()
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('初始化用户信息失败:', error)
|
||||
// 不阻止路由跳转,继续执行
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 继续路由跳转
|
||||
next()
|
||||
})
|
||||
|
||||
export default router
|
||||
|
||||
Reference in New Issue
Block a user