import router from "@/router"; import { useUserStoreHook } from "@/store/modules/user"; import { usePermissionStoreHook } from "@/store/modules/permission"; import NProgress from "nprogress"; import "nprogress/nprogress.css"; const appTokenKey = import.meta.env.VITE_APP_TOKEN_KEY NProgress.configure({ showSpinner: false }); // 进度条 const permissionStore = usePermissionStoreHook(); // 白名单路由 const whiteList = ["/login","/login/silentlogin","/aiurl"]; router.beforeEach(async (to:any, from:any, next:any) => { NProgress.start(); // console.log("白名单路由----》"); const hasToken = localStorage.getItem(appTokenKey); // console.log("白名单路由----》",hasToken,"--->",to.path); if (hasToken) { // console.log("白名单路由--22--》",hasToken,to.path); if (to.path === "/login") { // 如果已登录,跳转首页 next({ path: "/" }); NProgress.done(); }if (to.path === "/login/silentlogin") { next({ path: "/" }); NProgress.done(); } else { const userStore = useUserStoreHook(); const hasRoles = userStore.roles && userStore.roles.length > 0; // console.log("如果已登录,跳转首页",hasRoles) if (hasRoles) { // 未匹配到任何路由,跳转404 if (to.matched.length === 0) { from.name ? next({ name: from.name }) : next("/404"); } else { next(); } } else { try { // const { roles } = await userStore.getInfo(); const { perms } = await userStore.getInfo(); // console.log("路由权限---》",perms); const accessRoutes = await permissionStore.generateRoutes(perms); // console.log("路由权限--perms--》",accessRoutes); accessRoutes.forEach((route:any) => { // console.log("路由权限--addRoutecessRoutes",route); router.addRoute(route); }); next({ ...to, replace: true }); } catch (error) { // 移除 token 并跳转登录页 await userStore.resetToken(); next(`/login?redirect=${to.path}`); NProgress.done(); } } } } else { // 未登录可以访问白名单页面 if (whiteList.indexOf(to.path) !== -1) { next(); } else { next(`/login?redirect=${to.path}`); NProgress.done(); } } }); router.afterEach(() => { NProgress.done(); });