fix: 混合布局唯一子菜单的目录标题不显示问题修复
This commit is contained in:
@@ -20,8 +20,8 @@
|
|||||||
"
|
"
|
||||||
@select="handleMenuSelect"
|
@select="handleMenuSelect"
|
||||||
>
|
>
|
||||||
<el-menu-item v-for="route in topMenus" :key="route.path" :index="route.path">
|
<el-menu-item v-for="menuItem in processedTopMenus" :key="menuItem.path" :index="menuItem.path">
|
||||||
<MenuItemTitle v-if="route.meta" :icon="route.meta.icon" :title="route.meta.title" />
|
<MenuItemTitle v-if="menuItem.meta" :icon="menuItem.meta.icon" :title="menuItem.meta.title" />
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</el-menu>
|
</el-menu>
|
||||||
</template>
|
</template>
|
||||||
@@ -52,6 +52,35 @@ const sidebarColorScheme = computed(() => settingsStore.sidebarColorScheme);
|
|||||||
// 顶部菜单列表
|
// 顶部菜单列表
|
||||||
const topMenus = ref<RouteRecordRaw[]>([]);
|
const topMenus = ref<RouteRecordRaw[]>([]);
|
||||||
|
|
||||||
|
// 处理后的顶部菜单列表 - 智能显示唯一子菜单的标题
|
||||||
|
const processedTopMenus = computed(() => {
|
||||||
|
return topMenus.value.map((route) => {
|
||||||
|
// 如果路由设置了 alwaysShow=true,或者没有子菜单,直接返回原路由
|
||||||
|
if (route.meta?.alwaysShow || !route.children || route.children.length === 0) {
|
||||||
|
return route;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 过滤出非隐藏的子菜单
|
||||||
|
const visibleChildren = route.children.filter((child) => !child.meta?.hidden);
|
||||||
|
|
||||||
|
// 如果只有一个非隐藏的子菜单,显示子菜单的信息
|
||||||
|
if (visibleChildren.length === 1) {
|
||||||
|
const onlyChild = visibleChildren[0];
|
||||||
|
return {
|
||||||
|
...route,
|
||||||
|
meta: {
|
||||||
|
...route.meta,
|
||||||
|
title: onlyChild.meta?.title || route.meta?.title,
|
||||||
|
icon: onlyChild.meta?.icon || route.meta?.icon,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他情况返回原路由
|
||||||
|
return route;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
// 获取当前路由路径的顶部菜单路径
|
// 获取当前路由路径的顶部菜单路径
|
||||||
const activeTopMenuPath =
|
const activeTopMenuPath =
|
||||||
useRoute().path.split("/").filter(Boolean).length > 1
|
useRoute().path.split("/").filter(Boolean).length > 1
|
||||||
|
|||||||
Reference in New Issue
Block a user