refactor: ♻️ 兼容路由数据无子级时children=[]的情况

This commit is contained in:
Ray.Hao
2025-01-04 17:07:29 +08:00
parent 4b49951f6c
commit f807408502

View File

@@ -3,12 +3,15 @@
<!--叶子节点显示叶子节点或唯一子节点且父节点未配置始终显示 --> <!--叶子节点显示叶子节点或唯一子节点且父节点未配置始终显示 -->
<template <template
v-if=" v-if="
// 判断条件:仅有一个子节点,且父节点未配置始终显示 // 未配置始终显示,使用唯一子节点替换父节点显示为叶子节点
(hasOneShowingChild(item.children, item) && (!item.meta?.alwaysShow &&
(!onlyOneChild.children || onlyOneChild.noShowingChildren) && hasOneShowingChild(item.children, item) &&
!item.meta?.alwaysShow) || (!onlyOneChild.children ||
// 父节点即使配置了始终显示,但无子节点,也显示为叶子节点 onlyOneChild.children.filter((child: any) => !child.meta?.hidden).length === 0 ||
(item.meta?.alwaysShow && !item.children) onlyOneChild.noShowingChildren)) ||
// 即使配置了始终显示,但无子节点,也显示为叶子节点
(item.meta?.alwaysShow &&
(!item.children || item.children.filter((child) => !child.meta?.hidden).length === 0))
" "
> >
<AppLink <AppLink
@@ -104,13 +107,14 @@ function hasOneShowingChild(children: RouteRecordRaw[] = [], parent: RouteRecord
return false; return false;
}); });
// 仅有一个或无子节点 // 仅有一个节点
if (showingChildren.length === 1) { if (showingChildren.length === 1) {
return true; return true;
} }
// 无子节点时,设置父节点为唯一显示节点 // 无子节点时
if (showingChildren.length === 0) { if (showingChildren.length === 0) {
// 父节点设置为唯一显示节点,并标记为无子节点
onlyOneChild.value = { ...parent, path: "", noShowingChildren: true }; onlyOneChild.value = { ...parent, path: "", noShowingChildren: true };
return true; return true;
} }