fix: 修复混合布局模式下详情页左侧菜单消失问题

Closes #ID5HXD

Co-authored-by: kiki1373639299<zkai0106@163.com>



# message auto-generated for no-merge-commit merge:
!13 merge menu-error into dev

fix: 修复混合布局模式下详情页左侧菜单消失问题

Created-by: kiki1373639299
Commit-by: kiki1373639299
Merged-by: Charles_7c
Description: <!--
  非常感谢您的 PR!在提交之前,请务必确保您 PR 的代码经过了完整测试,并且通过了代码规范检查。
-->

<!-- 在 [] 中输入 x 来勾选) -->

## PR 类型

<!-- 您的 PR 引入了哪种类型的变更? -->
<!-- 只支持选择一种类型,如果有多种类型,可以在更新日志中增加 “类型” 列。 -->

- [ ] 新 feature
- [X] Bug 修复
- [ ] 功能增强
- [ ] 文档变更
- [ ] 代码样式变更
- [ ] 重构
- [ ] 性能改进
- [ ] 单元测试
- [ ] CI/CD
- [ ] 其他

## PR 目的

<!-- 描述一下您的 PR 解决了什么问题。如果可以,请链接到相关 issues。 -->

## 解决方案
  修改 src/layout/LayoutMix.vue 中的 getLeftMenus 函数:
  - 优先从路由的 meta.activeMenu 获取菜单 key
  - 如果没有 activeMenu,则使用 path
  - 确保详情页能正确关联到父菜单并显示其子菜单
<!-- 详细描述您是如何解决的问题 -->

## PR 测试

<!-- 如果可以,请为您的 PR 添加或更新单元测试。 -->
<!-- 请描述一下您是如何测试 PR 的。例如:创建/更新单元测试或添加相关的截图。 -->

## Changelog

| 模块  | Changelog | Related issues |
|-----|-----------| -------------- |
|  src/layout/LayoutMix.vue    |      src/layout/LayoutMix.vue:101-112: 重构 getLeftMenus 函数,优先使用 meta.activeMenu 作为菜单 key      |     Closes #ID5HXD           |

<!-- 如果有多种类型的变更,可以在变更日志表中增加 “类型” 列,该列的值与上方 “PR 类型” 相同。 -->
<!-- Related issues 格式为 Closes #<issue号>,或者 Fixes #<issue号>,或者 Resolves #<issue号>。 -->

## 其他信息

<!-- 请描述一下还有哪些注意事项。例如:如果引入了一个不向下兼容的变更,请描述其影响。 -->

## 提交前确认

- [X] PR 代码经过了完整测试,并且通过了代码规范检查
- [X] 已经完整填写 Changelog,并链接到了相关 issues
- [X] PR 代码将要提交到 dev 分支

See merge request: continew/continew-admin-ui!13
This commit is contained in:
kiki1373639299
2025-11-07 14:24:59 +08:00
committed by Charles_7c
parent 704aacc38f
commit 069175bf16

View File

@@ -98,8 +98,13 @@ const activeMenu = ref<string[]>([])
// 左侧的菜单
const leftMenus = ref<RouteRecordRaw[]>([])
// 获取左侧菜单
const getLeftMenus = (key: string) => {
const arr = searchTree(cloneMenuRoutes, (i) => i.path === key, { children: 'children' })
const getLeftMenus = (currentRoute?: RouteRecordRaw, key?: string) => {
// 优先从路由的 meta.activeMenu 获取key如果没有则使用path
const menuKey = currentRoute
? (currentRoute.meta?.activeMenu as string) || currentRoute.path
: key || ''
const arr = searchTree(cloneMenuRoutes, (i) => i.path === menuKey, { children: 'children' })
const rootPath = arr.length ? arr[0].path : ''
const obj = cloneMenuRoutes.find((i) => i.path === rootPath)
activeMenu.value = obj ? [obj.path] : ['']
@@ -111,7 +116,7 @@ const onMenuItemClick = (key: string) => {
window.open(key)
return
}
setTimeout(() => getLeftMenus(key))
setTimeout(() => getLeftMenus(undefined, key))
const obj = topMenus.value.find((i) => i.path === key)
if (obj && obj.redirect === 'noRedirect') return
router.push({ path: key })
@@ -119,9 +124,9 @@ const onMenuItemClick = (key: string) => {
watch(
() => route.path,
(newPath) => {
() => {
nextTick(() => {
getLeftMenus(newPath)
getLeftMenus(route)
})
},
{ immediate: true },