123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import router from "@/router";
- import { useUserStore } from "@/store/modules/user";
- import { usePermissionStore } from "@/store/modules/permission";
- import NProgress from "@/utils/nprogress";
- export function setupPermission() {
- // 白名单路由
- const whiteList = ["/login", "/demo/hooks"];
- router.beforeEach(async (to, from, next) => {
- NProgress.start();
- const hasToken = localStorage.getItem("token");
- if (hasToken) {
- if (to.path === "/login") {
- // 如果已登录,跳转首页
- next({ path: "/" });
- NProgress.done();
- } else {
- const userStore = useUserStore();
- // const hasRoles =
- // userStore.user.roles && userStore.user.roles.length > 0;
- if (userStore.isGetAuth) {
- // 未匹配到任何路由,跳转404
- if (to.matched.length === 0) {
- from.name ? next({ name: from.name }) : next("/404");
- } else {
- next();
- }
- } else {
- const permissionStore = usePermissionStore();
- try {
- const { menus } = await userStore.getUserInfo();
- const accessRoutes = await permissionStore.generateRoutes(menus);
- accessRoutes.forEach((route) => {
- router.addRoute(route);
- });
- next({ ...to, replace: true });
- } catch (error) {
- console.error("beforeEach error", 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();
- });
- }
|