From 9bcffb8b38d3c94094e0b340cb219ab72ef23d87 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 7 Jun 2026 01:30:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(router):=20=E4=BF=AE=E5=A4=8D=E7=88=B6?= =?UTF-8?q?=E5=AD=90=E5=90=8C=E5=90=8D=E8=B7=AF=E7=94=B1=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E5=AD=90=E8=8F=9C=E5=8D=95=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 收窄同名子路由折叠条件 - 仅在父级只有一个同名默认页时折叠 - 修复商城装修下装修模板菜单不显示的问题 --- src/utils/routerHelper.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/utils/routerHelper.ts b/src/utils/routerHelper.ts index 64a739a91..9a9e11872 100644 --- a/src/utils/routerHelper.ts +++ b/src/utils/routerHelper.ts @@ -149,13 +149,18 @@ export const generateRoute = (routes: AppCustomRouteRecordRaw[]): AppRouteRecord } if (route.children) { data.children = generateRoute(route.children) - // vue-router 5 要求路由 name 全局唯一;后端菜单可能生成父子同名,例如 /mall/trade/delivery/express。 - // 父路由改名后,如果同名子是叶子页面,则把页面 component 折叠到父路由,保持原 URL 可访问。 + // Vue Router 要求路由 name 全局唯一;后端菜单可能生成父子同名,例如 /mall/trade/delivery/express。 + // 父级只有一个同名默认页时才折叠;存在兄弟节点时必须保留子菜单,例如商城装修下的装修模板。 const sameNameChild = findDescendantRouteByName(data.children, data.name) if (sameNameChild) { data.name = `${data.name}Parent` - if (!sameNameChild.children?.length && sameNameChild.component) { - // 只移除被折叠的同名子,保留其它兄弟节点,避免后续菜单扩展时丢路由。 + if ( + data.children.length === 1 && + data.children[0] === sameNameChild && + !sameNameChild.children?.length && + sameNameChild.component + ) { + // 只有单一默认页才折叠到父路由,避免父子同名且不影响多子菜单展示。 const remainingChildren = removeDescendantRoute(data.children, sameNameChild) data.component = sameNameChild.component data.redirect = sameNameChild.redirect