Przeglądaj źródła

feat(route): add `hidePathForChildren` in `meta`

添加`hidePathForChildren`选项用于在子菜单中隐藏本级path
无木 3 lat temu
rodzic
commit
d52b0de83e

+ 1 - 5
src/router/helper/menuHelper.ts

@@ -9,10 +9,6 @@ export function getAllParentPath<T = Recordable>(treeData: T[], path: string) {
   return (menuList || []).map((item) => item.path);
 }
 
-function isPlainPath(path: string) {
-  return path.indexOf(':') === -1;
-}
-
 function joinParentPath(menus: Menu[], parentPath = '') {
   for (let index = 0; index < menus.length; index++) {
     const menu = menus[index];
@@ -24,7 +20,7 @@ function joinParentPath(menus: Menu[], parentPath = '') {
       menu.path = `${parentPath}/${menu.path}`;
     }
     if (menu?.children?.length) {
-      joinParentPath(menu.children, isPlainPath(menu.path) ? menu.path : parentPath);
+      joinParentPath(menu.children, menu.meta?.hidePathForChildren ? parentPath : menu.path);
     }
   }
 }

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

@@ -240,6 +240,7 @@ const feat: AppRouteModule = {
       meta: {
         title: t('routes.demo.feat.tab'),
         carryParam: true,
+        hidePathForChildren: true,
       },
       children: [
         {

+ 3 - 0
types/vue-router.d.ts

@@ -33,6 +33,9 @@ declare module 'vue-router' {
     // Never show in menu
     hideMenu?: boolean;
     isLink?: boolean;
+    // only build for Menu
     ignoreRoute?: boolean;
+    // Hide path for children
+    hidePathForChildren?: boolean;
   }
 }