From d9b2f55a5eb119587fec49152011333f556313ef Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Thu, 14 Aug 2025 18:34:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20:bug:=20=E4=BF=AE=E5=A4=8D=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=92=8C=E8=B7=AF=E7=94=B1=E9=87=8D=E5=A4=8D=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/permission.ts | 13 +++++++------ src/store/modules/permission.store.ts | 2 +- src/store/modules/user.store.ts | 1 + src/utils/auth.ts | 8 -------- src/views/login/components/Login.vue | 7 +------ 5 files changed, 10 insertions(+), 21 deletions(-) diff --git a/src/plugins/permission.ts b/src/plugins/permission.ts index 0493511a..33d4d601 100644 --- a/src/plugins/permission.ts +++ b/src/plugins/permission.ts @@ -1,6 +1,5 @@ import type { RouteRecordRaw } from "vue-router"; import NProgress from "@/utils/nprogress"; -import { Auth } from "@/utils/auth"; import router from "@/router"; import { usePermissionStore, useUserStore } from "@/store"; import { ROLE_ROOT } from "@/constants"; @@ -12,7 +11,8 @@ export function setupPermission() { NProgress.start(); try { - const isLoggedIn = Auth.isLoggedIn(); + // 使用 store 暴露的登录态,便于后续扩展(如基于过期时间等) + const isLoggedIn = useUserStore().isLoggedIn(); // 未登录处理 if (!isLoggedIn) { @@ -35,16 +35,17 @@ export function setupPermission() { const permissionStore = usePermissionStore(); const userStore = useUserStore(); - // 确保动态路由已生成 + // 路由未生成则生成 if (!permissionStore.isDynamicRoutesGenerated) { - /** 先获取最新的用户信息 */ - await userStore.getUserInfo(); + if (!userStore.userInfo?.roles?.length) { + await userStore.getUserInfo(); + } const dynamicRoutes = await permissionStore.generateRoutes(); dynamicRoutes.forEach((route: RouteRecordRaw) => { router.addRoute(route); }); - // 路由刚生成,重新导航 + next({ ...to, replace: true }); return; } diff --git a/src/store/modules/permission.store.ts b/src/store/modules/permission.store.ts index f0675d23..3365ac8c 100644 --- a/src/store/modules/permission.store.ts +++ b/src/store/modules/permission.store.ts @@ -22,7 +22,7 @@ export const usePermissionStore = defineStore("permission", () => { */ async function generateRoutes(): Promise { try { - const data = await MenuAPI.getRoutes(); + const data = await MenuAPI.getRoutes(); // 获取当前登录人拥有的菜单路由 const dynamicRoutes = parseDynamicRoutes(data); routes.value = [...constantRoutes, ...dynamicRoutes]; diff --git a/src/store/modules/user.store.ts b/src/store/modules/user.store.ts index 899897f6..7d714b8d 100644 --- a/src/store/modules/user.store.ts +++ b/src/store/modules/user.store.ts @@ -137,6 +137,7 @@ export const useUserStore = defineStore("user", () => { return { userInfo, rememberMe, + isLoggedIn: () => !!Auth.getAccessToken(), getUserInfo, login, logout, diff --git a/src/utils/auth.ts b/src/utils/auth.ts index db0a7403..ff354916 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -9,14 +9,6 @@ import { AUTH_KEYS } from "@/constants"; * - 记住我功能的状态管理 */ export class Auth { - /** - * 判断用户是否已登录 - * @returns 是否已登录 - */ - static isLoggedIn(): boolean { - return !!Auth.getAccessToken(); - } - /** * 获取当前有效的访问令牌 * 会根据"记住我"状态从适当的存储位置获取 diff --git a/src/views/login/components/Login.vue b/src/views/login/components/Login.vue index d55e6291..5c1b54d4 100644 --- a/src/views/login/components/Login.vue +++ b/src/views/login/components/Login.vue @@ -197,16 +197,11 @@ async function handleLoginSubmit() { // 2. 执行登录 await userStore.login(loginFormData.value); - // 3. 获取用户信息(包含用户角色,用于路由生成) - await userStore.getUserInfo(); - - // 4. 登录成功,简单跳转,让路由守卫处理后续逻辑 const redirectPath = (route.query.redirect as string) || "/"; - // 使用push而不是replace,避免与路由守卫冲突 await router.push(decodeURIComponent(redirectPath)); } catch (error) { - // 5. 统一错误处理 + // 4. 统一错误处理 getCaptcha(); // 刷新验证码 console.error("登录失败:", error); } finally {