fix: 混合布局唯一子菜单的目录标题不显示问题修复

This commit is contained in:
Ray.Hao
2025-05-25 07:44:17 +08:00
parent 02f57ff3d3
commit 01d83e21d1

View File

@@ -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