You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.2 KiB
73 lines
2.2 KiB
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();
|
|
|
|
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();
|
|
const accessRoutes = await permissionStore.generateRoutes(perms);
|
|
// console.log("路由权限--perms--》",accessRoutes);
|
|
accessRoutes.forEach((route:any) => {
|
|
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();
|
|
});
|
|
|