瀏覽代碼

fix: fix menu permission failure

vben 4 年之前
父節點
當前提交
b8353fe1f2
共有 3 個文件被更改,包括 13 次插入4 次删除
  1. 9 3
      src/router/menus/index.ts
  2. 1 0
      src/router/routes/modules/demo/feat.ts
  3. 3 1
      src/router/types.d.ts

+ 9 - 3
src/router/menus/index.ts

@@ -6,6 +6,7 @@ import { transformMenuModule, flatMenus, getAllParentPath } from '/@/utils/helpe
 import { filter } from '/@/utils/helper/treeHelper';
 import router from '/@/router';
 import { PermissionModeEnum } from '/@/enums/appEnum';
+import { pathToRegexp } from 'path-to-regexp';
 
 // ===========================
 // ==========module import====
@@ -106,9 +107,14 @@ export async function getFlatChildrenMenus(children: Menu[]) {
 // 通用过滤方法
 function basicFilter(routes: RouteRecordNormalized[]) {
   return (menu: Menu) => {
-    const matchRoute = routes.find((route) => route.path === menu.path);
-
-    if (!matchRoute) return true;
+    const matchRoute = routes.find((route) => {
+      if (route.meta && route.meta.carryParam) {
+        return pathToRegexp(route.path).test(menu.path);
+      }
+      return route.path === menu.path;
+    });
+
+    if (!matchRoute) return false;
     menu.icon = menu.icon || matchRoute.meta.icon;
     menu.meta = matchRoute.meta;
     return true;

+ 1 - 0
src/router/routes/modules/demo/feat.ts

@@ -102,6 +102,7 @@ export default {
       component: () => import('/@/views/demo/feat/tab-params/index.vue'),
       meta: {
         title: 'Tab带参',
+        carryParam: true,
       },
     },
   ],

+ 3 - 1
src/router/types.d.ts

@@ -29,8 +29,10 @@ export interface RouteMeta {
 
   // close loading
   afterCloseLoading?: boolean;
-
+  // Is it in the tab
   inTab?: boolean;
+  // Carrying parameters
+  carryParam?: boolean;
 }
 
 export interface AppRouteRecordRaw extends Omit<RouteRecordRaw, 'meta'> {