Explorar el Código

fix: infinite redirect in `BACK` mode

修复后端权限模式下的路由无限重定向的问题
无木 hace 3 años
padre
commit
4b46a84c2b
Se han modificado 2 ficheros con 56 adiciones y 15 borrados
  1. 45 9
      mock/sys/menu.ts
  2. 11 6
      src/router/guard/permissionGuard.ts

+ 45 - 9
mock/sys/menu.ts

@@ -5,13 +5,40 @@ import { createFakeUserList } from './user';
 // single
 const dashboardRoute = {
   path: '/dashboard',
-  name: 'Welcome',
-  component: '/dashboard/analysis/index',
+  name: 'Dashboard',
+  component: 'LAYOUT',
+  redirect: '/dashboard/analysis',
   meta: {
-    title: 'routes.dashboard.analysis',
-    affix: true,
+    title: 'routes.dashboard.dashboard',
+    hideChildrenInMenu: true,
     icon: 'bx:bx-home',
   },
+  children: [
+    {
+      path: 'analysis',
+      name: 'Analysis',
+      component: '/dashboard/analysis/index',
+      meta: {
+        hideMenu: true,
+        hideBreadcrumb: true,
+        title: 'routes.dashboard.analysis',
+        currentActiveMenu: '/dashboard',
+        icon: 'bx:bx-home',
+      },
+    },
+    {
+      path: 'workbench',
+      name: 'Workbench',
+      component: '/dashboard/workbench/index',
+      meta: {
+        hideMenu: true,
+        hideBreadcrumb: true,
+        title: 'routes.dashboard.workbench',
+        currentActiveMenu: '/dashboard',
+        icon: 'bx:bx-home',
+      },
+    },
+  ],
 };
 
 const backRoute = {
@@ -223,12 +250,21 @@ export default [
         return resultError('Invalid user token!');
       }
       const id = checkUser.userId;
-      if (!id || id === '1') {
-        return resultSuccess([dashboardRoute, authRoute, levelRoute, sysRoute, linkRoute]);
-      }
-      if (id === '2') {
-        return resultSuccess([dashboardRoute, authRoute, levelRoute, linkRoute]);
+      let menu: Object[];
+      switch (id) {
+        case '1':
+          dashboardRoute.redirect = dashboardRoute.path + '/' + dashboardRoute.children[0].path;
+          menu = [dashboardRoute, authRoute, levelRoute, sysRoute, linkRoute];
+          break;
+        case '2':
+          dashboardRoute.redirect = dashboardRoute.path + '/' + dashboardRoute.children[1].path;
+          menu = [dashboardRoute, authRoute, levelRoute, linkRoute];
+          break;
+        default:
+          menu = [];
       }
+
+      return resultSuccess(menu);
     },
   },
 ] as MockMethod[];

+ 11 - 6
src/router/guard/permissionGuard.ts

@@ -19,12 +19,6 @@ export function createPermissionGuard(router: Router) {
   const userStore = useUserStoreWithOut();
   const permissionStore = usePermissionStoreWithOut();
   router.beforeEach(async (to, from, next) => {
-    // Jump to the 404 page after processing the login
-    if (from.path === LOGIN_PATH && to.name === PAGE_NOT_FOUND_ROUTE.name) {
-      next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
-      return;
-    }
-
     if (
       from.path === ROOT_PATH &&
       to.path === PageEnum.BASE_HOME &&
@@ -66,6 +60,17 @@ export function createPermissionGuard(router: Router) {
       return;
     }
 
+    // Jump to the 404 page after processing the login
+    if (
+      from.path === LOGIN_PATH &&
+      to.name === PAGE_NOT_FOUND_ROUTE.name &&
+      to.fullPath !== (userStore.getUserInfo.homePath || PageEnum.BASE_HOME)
+    ) {
+      next(userStore.getUserInfo.homePath || PageEnum.BASE_HOME);
+      console.log({ from, to });
+      return;
+    }
+
     if (permissionStore.getIsDynamicAddedRoute) {
       next();
       return;