Explorar el Código

build: 登录路由配置

chaooo hace 2 años
padre
commit
74da3891ae
Se han modificado 1 ficheros con 31 adiciones y 23 borrados
  1. 31 23
      src/permission.ts

+ 31 - 23
src/permission.ts

@@ -14,38 +14,46 @@ const whiteList = ["/login"];
 router.beforeEach(async (to, from, next) => {
   NProgress.start();
   const hasToken = localStorage.getItem("accessToken");
+  // 已登录
   if (hasToken) {
+    // 已登录访问/login,跳转首页
     if (to.path === "/login") {
-      // 如果已登录,跳转首页
       next({ path: "/" });
       NProgress.done();
     } else {
       const userStore = useUserStoreHook();
-      const hasRoles = userStore.roles && userStore.roles.length > 0;
-      if (hasRoles) {
-        // 未匹配到任何路由,跳转404
-        if (to.matched.length === 0) {
-          from.name ? next({ name: from.name }) : next("/404");
-        } else {
-          next();
-        }
+      console.log("userStore.routeStatus", userStore.routeStatus);
+      // 未加载过动态路由
+      if (!userStore.routeStatus) {
+        /**
+         * userStore
+         * ...
+         * const userInfo = useStorage("userInfo", "");
+         * ...
+         * userInfo.value = JSON.stringify(data);
+         * ...
+         *   function getInfo() {
+         *     return new Promise<UserInfo>((resolve, reject) => {
+         * 			const userInfoStr = localStorage.getItem("userInfo");
+         * 			const userInfo = JSON.parse(userInfoStr);
+         * 			resolve({roles: userInfo.roles});
+         *     });
+         *   }
+         */
+        const { roles } = await userStore.getInfo();
+        const accessRoutes = await permissionStore.generateRoutes(roles);
+        accessRoutes.forEach((route) => {
+          router.addRoute(route);
+        });
+        userStore.setRouteStatus(true);
+        next({ ...to, replace: true });
       } else {
-        try {
-          const { roles } = await userStore.getInfo();
-          const accessRoutes = await permissionStore.generateRoutes(roles);
-          accessRoutes.forEach((route) => {
-            router.addRoute(route);
-          });
-          next({ ...to, replace: true });
-        } catch (error) {
-          // 移除 token 并跳转登录页
-          await userStore.resetToken();
-          next(`/login?redirect=${to.path}`);
-          NProgress.done();
-        }
+        next();
       }
     }
-  } else {
+  }
+  // 未登录
+  else {
     // 未登录可以访问白名单页面
     if (whiteList.indexOf(to.path) !== -1) {
       next();