From 766369f911381dcdfb175ebb757a9d31d014addc Mon Sep 17 00:00:00 2001 From: pantao <980141374@qq.com> Date: Mon, 25 Sep 2023 17:16:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(projects):=20=E4=BF=AE=E5=A4=8D=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E5=91=BD=E5=90=8D=E4=B8=BA=E5=8C=85=E5=90=AB=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E6=97=B6=E5=AF=BC=E8=87=B4=E5=AF=BC=E8=88=AA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=87=BA=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/router/breadcrumb.ts | 11 ++++------- src/utils/router/helpers.ts | 15 +++++++++++++++ src/utils/router/menu.ts | 33 ++++++++++++++++++++++----------- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/utils/router/breadcrumb.ts b/src/utils/router/breadcrumb.ts index 19640264..82572c97 100644 --- a/src/utils/router/breadcrumb.ts +++ b/src/utils/router/breadcrumb.ts @@ -1,3 +1,4 @@ +import { getTopLevelMenu } from './helpers'; /** * 获取面包屑数据 * @param activeKey - 当前页面路由的key @@ -17,13 +18,9 @@ export function getBreadcrumbByRouteKey(activeKey: string, menus: App.GlobalMenu */ function getBreadcrumbMenu(activeKey: string, menus: App.GlobalMenuOption[]) { const breadcrumbMenu: App.GlobalMenuOption[] = []; - menus.some(menu => { - const flag = activeKey.includes(menu.routeName); - if (flag) { - breadcrumbMenu.push(...getBreadcrumbMenuItem(activeKey, menu)); - } - return flag; - }); + const topLevelMenu = getTopLevelMenu(activeKey, menus); + const options = getBreadcrumbMenuItem(activeKey, topLevelMenu as App.GlobalMenuOption); + breadcrumbMenu.push(...options); return breadcrumbMenu; } diff --git a/src/utils/router/helpers.ts b/src/utils/router/helpers.ts index 1e01598d..2dbee6e6 100644 --- a/src/utils/router/helpers.ts +++ b/src/utils/router/helpers.ts @@ -17,3 +17,18 @@ function getConstantRouteName(route: AuthRoute.Route) { } 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; + }); +} diff --git a/src/utils/router/menu.ts b/src/utils/router/menu.ts index 91048343..fe52399d 100644 --- a/src/utils/router/menu.ts +++ b/src/utils/router/menu.ts @@ -63,18 +63,29 @@ export function translateMenuLabel(menus: App.GlobalMenuOption[]): App.GlobalMen * @param menus - 菜单数据 */ 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[] = []; - 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)); + const keys = [] as any; + 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) { + 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; }