From 2efb5b71c32cf86f5f51fbf5290727a609508a9a Mon Sep 17 00:00:00 2001 From: Netfan Date: Mon, 16 Dec 2024 02:57:50 +0800 Subject: [PATCH] feat: auto activate subMenu on select root menu (#5147) * feat: auto activate subMenu on click root menu * fix: prop name fixed * chore: test and docs update --- docs/src/en/guide/essentials/settings.md | 1 + docs/src/guide/essentials/settings.md | 1 + .../__snapshots__/config.test.ts.snap | 1 + packages/@core/preferences/src/config.ts | 1 + packages/@core/preferences/src/types.ts | 2 ++ .../layouts/src/basic/menu/use-extra-menu.ts | 10 ++++++++ .../preferences/blocks/layout/sidebar.vue | 24 ++++++++++++++++++- .../preferences/preferences-drawer.vue | 7 ++++++ .../locales/src/langs/en-US/preferences.json | 6 ++++- .../locales/src/langs/zh-CN/preferences.json | 6 ++++- 10 files changed, 56 insertions(+), 3 deletions(-) diff --git a/docs/src/en/guide/essentials/settings.md b/docs/src/en/guide/essentials/settings.md index 68fef3e7..a3cd579e 100644 --- a/docs/src/en/guide/essentials/settings.md +++ b/docs/src/en/guide/essentials/settings.md @@ -217,6 +217,7 @@ const defaultPreferences: Preferences = { globalSearch: true, }, sidebar: { + autoActivateChild: false, collapsed: false, collapsedShowTitle: false, enable: true, diff --git a/docs/src/guide/essentials/settings.md b/docs/src/guide/essentials/settings.md index e3357206..3669a771 100644 --- a/docs/src/guide/essentials/settings.md +++ b/docs/src/guide/essentials/settings.md @@ -240,6 +240,7 @@ const defaultPreferences: Preferences = { globalSearch: true, }, sidebar: { + autoActivateChild: false, collapsed: false, collapsedShowTitle: false, enable: true, diff --git a/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap b/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap index 65408799..f05a96dc 100644 --- a/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap +++ b/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap @@ -65,6 +65,7 @@ exports[`defaultPreferences immutability test > should not modify the config obj "globalSearch": true, }, "sidebar": { + "autoActivateChild": false, "collapsed": false, "collapsedShowTitle": false, "enable": true, diff --git a/packages/@core/preferences/src/config.ts b/packages/@core/preferences/src/config.ts index 589b7a13..c4dce039 100644 --- a/packages/@core/preferences/src/config.ts +++ b/packages/@core/preferences/src/config.ts @@ -65,6 +65,7 @@ const defaultPreferences: Preferences = { globalSearch: true, }, sidebar: { + autoActivateChild: false, collapsed: false, collapsedShowTitle: false, enable: true, diff --git a/packages/@core/preferences/src/types.ts b/packages/@core/preferences/src/types.ts index 3da5cd47..59dce2e2 100644 --- a/packages/@core/preferences/src/types.ts +++ b/packages/@core/preferences/src/types.ts @@ -125,6 +125,8 @@ interface NavigationPreferences { } interface SidebarPreferences { + /** 点击目录时自动激活子菜单 */ + autoActivateChild: boolean; /** 侧边栏是否折叠 */ collapsed: boolean; /** 侧边栏折叠时,是否显示title */ diff --git a/packages/effects/layouts/src/basic/menu/use-extra-menu.ts b/packages/effects/layouts/src/basic/menu/use-extra-menu.ts index a1c6d3fe..f47a81a8 100644 --- a/packages/effects/layouts/src/basic/menu/use-extra-menu.ts +++ b/packages/effects/layouts/src/basic/menu/use-extra-menu.ts @@ -15,6 +15,9 @@ function useExtraMenu() { const menus = computed(() => accessStore.accessMenus); + /** 记录当前顶级菜单下哪个子菜单最后激活 */ + const defaultSubMap = new Map(); + const route = useRoute(); const extraMenus = ref([]); const sidebarExtraVisible = ref(false); @@ -32,6 +35,12 @@ function useExtraMenu() { sidebarExtraVisible.value = hasChildren; if (!hasChildren) { await navigation(menu.path); + } else if (preferences.sidebar.autoActivateChild) { + await navigation( + defaultSubMap.has(menu.path) + ? (defaultSubMap.get(menu.path) as string) + : menu.path, + ); } }; @@ -89,6 +98,7 @@ function useExtraMenu() { menus.value, currentPath, ); + if (rootMenuPath) defaultSubMap.set(rootMenuPath, currentPath); extraActiveMenu.value = rootMenuPath ?? findMenu?.path ?? ''; extraMenus.value = rootMenu?.children ?? []; }, diff --git a/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue b/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue index 3c9efd69..e2eafbf5 100644 --- a/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue +++ b/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue @@ -1,17 +1,23 @@