fix(projects): 修复路由命名为包含关系时导致导航数据出错的问题
This commit is contained in:
parent
f6c6dbd312
commit
766369f911
@ -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 = getBreadcrumbMenuItem(activeKey, topLevelMenu as App.GlobalMenuOption);
|
||||||
if (flag) {
|
breadcrumbMenu.push(...options);
|
||||||
breadcrumbMenu.push(...getBreadcrumbMenuItem(activeKey, menu));
|
|
||||||
}
|
|
||||||
return flag;
|
|
||||||
});
|
|
||||||
return breadcrumbMenu;
|
return breadcrumbMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@ -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);
|
const keys = [] as any;
|
||||||
return keys;
|
const lists = [] as any;
|
||||||
|
function traverse(list: any, parent = null) {
|
||||||
|
list.forEach((t: any) => {
|
||||||
|
lists.push(t);
|
||||||
|
if (parent) {
|
||||||
|
t.parent = parent;
|
||||||
}
|
}
|
||||||
|
if (t.children) {
|
||||||
function getActiveKeyPathsOfMenu(activeKey: string, menu: App.GlobalMenuOption) {
|
traverse(t.children, t);
|
||||||
const keys: string[] = [];
|
|
||||||
if (activeKey.startsWith(menu.routeName)) {
|
|
||||||
keys.push(menu.routeName);
|
|
||||||
}
|
}
|
||||||
if (menu.children) {
|
});
|
||||||
keys.push(...menu.children.map(item => getActiveKeyPathsOfMenu(activeKey, item as App.GlobalMenuOption)).flat(1));
|
|
||||||
}
|
}
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user