Merge pull request #280 from Particaly/main

fix(projects): 修复路由命名为包含关系时导致导航数据出错的问题
This commit is contained in:
Soybean 2023-09-27 23:08:18 +08:00 committed by GitHub
commit a195980547
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 17 deletions

View File

@ -1,3 +1,4 @@
import { getTopLevelMenu } from './helpers';
/** /**
* *
* @param activeKey - key * @param activeKey - key
@ -17,13 +18,9 @@ export function getBreadcrumbByRouteKey(activeKey: string, menus: App.GlobalMenu
*/ */
function getBreadcrumbMenu(activeKey: string, menus: App.GlobalMenuOption[]) { function getBreadcrumbMenu(activeKey: string, menus: App.GlobalMenuOption[]) {
const breadcrumbMenu: App.GlobalMenuOption[] = []; const breadcrumbMenu: App.GlobalMenuOption[] = [];
menus.some(menu => { const topLevelMenu = getTopLevelMenu(activeKey, menus);
const flag = activeKey.includes(menu.routeName); const options = topLevelMenu ? getBreadcrumbMenuItem(activeKey, topLevelMenu as App.GlobalMenuOption) : [];
if (flag) { breadcrumbMenu.push(...options);
breadcrumbMenu.push(...getBreadcrumbMenuItem(activeKey, menu));
}
return flag;
});
return breadcrumbMenu; return breadcrumbMenu;
} }

View File

@ -17,3 +17,18 @@ function getConstantRouteName(route: AuthRoute.Route) {
} }
return names; return names;
} }
/**
*
* @param routeName - key
* @param menus -
*/
export function getTopLevelMenu(routeName: string, menus: App.GlobalMenuOption[]): App.GlobalMenuOption | undefined {
return menus.find(item => {
if (item.routeName === routeName) return true;
if (Array.isArray(item.children)) {
return getTopLevelMenu(routeName, item.children);
}
return false;
});
}

View File

@ -63,18 +63,29 @@ export function translateMenuLabel(menus: App.GlobalMenuOption[]): App.GlobalMen
* @param menus - * @param menus -
*/ */
export function getActiveKeyPathsOfMenus(activeKey: string, menus: App.GlobalMenuOption[]) { export function getActiveKeyPathsOfMenus(activeKey: string, menus: App.GlobalMenuOption[]) {
const keys = menus.map(menu => getActiveKeyPathsOfMenu(activeKey, menu)).flat(1);
return keys;
}
function getActiveKeyPathsOfMenu(activeKey: string, menu: App.GlobalMenuOption) {
const keys: string[] = []; const keys: string[] = [];
if (activeKey.startsWith(menu.routeName)) { const lists: App.GlobalMenuOption[] = [];
keys.push(menu.routeName); function traverse(list: App.GlobalMenuOption[], parent: App.GlobalMenuOption | null = null) {
} list.forEach((t: App.GlobalMenuOption) => {
if (menu.children) { lists.push(t);
keys.push(...menu.children.map(item => getActiveKeyPathsOfMenu(activeKey, item as App.GlobalMenuOption)).flat(1)); if (parent) {
t.parent = parent;
}
if (t.children) {
traverse(t.children, t);
}
});
} }
traverse(JSON.parse(JSON.stringify(menus)));
lists.forEach((t: App.GlobalMenuOption) => {
if (t.routeName === activeKey) {
let temp = t;
while (temp) {
keys.push(temp.routeName);
temp = temp.parent as App.GlobalMenuOption;
}
}
});
return keys; return keys;
} }