From 1e14293d671cde4f712ad9e6b5d4609d328abe89 Mon Sep 17 00:00:00 2001 From: Soybean Date: Thu, 25 Apr 2024 21:49:14 +0800 Subject: [PATCH] refactor(projects): useMixMenuContext replace useMixMenu --- src/layouts/context/index.ts | 45 ++++++++++++++++++- src/layouts/hooks/index.ts | 44 ------------------ .../modules/global-menu/vertical-mix-menu.vue | 8 +--- 3 files changed, 46 insertions(+), 51 deletions(-) delete mode 100644 src/layouts/hooks/index.ts diff --git a/src/layouts/context/index.ts b/src/layouts/context/index.ts index 7108b9f6..631f675b 100644 --- a/src/layouts/context/index.ts +++ b/src/layouts/context/index.ts @@ -1,4 +1,47 @@ +import { computed, ref, watch } from 'vue'; +import { useRoute } from 'vue-router'; import { useContext } from '@sa/hooks'; -import { useMixMenu } from '../hooks'; +import { useRouteStore } from '@/store/modules/route'; export const { setupStore: setupMixMenuContext, useStore: useMixMenuContext } = useContext('mix-menu', useMixMenu); + +function useMixMenu() { + const route = useRoute(); + const routeStore = useRouteStore(); + + const activeFirstLevelMenuKey = ref(''); + + function setActiveFirstLevelMenuKey(key: string) { + activeFirstLevelMenuKey.value = key; + } + + function getActiveFirstLevelMenuKey() { + const { hideInMenu, activeMenu } = route.meta; + const name = route.name as string; + + const routeName = (hideInMenu ? activeMenu : name) || name; + + const [firstLevelRouteName] = routeName.split('_'); + + setActiveFirstLevelMenuKey(firstLevelRouteName); + } + + const menus = computed( + () => routeStore.menus.find(menu => menu.key === activeFirstLevelMenuKey.value)?.children || [] + ); + + watch( + () => route.name, + () => { + getActiveFirstLevelMenuKey(); + }, + { immediate: true } + ); + + return { + activeFirstLevelMenuKey, + setActiveFirstLevelMenuKey, + getActiveFirstLevelMenuKey, + menus + }; +} diff --git a/src/layouts/hooks/index.ts b/src/layouts/hooks/index.ts deleted file mode 100644 index 474d878c..00000000 --- a/src/layouts/hooks/index.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { computed, ref, watch } from 'vue'; -import { useRoute } from 'vue-router'; -import { useRouteStore } from '@/store/modules/route'; - -export function useMixMenu() { - const route = useRoute(); - const routeStore = useRouteStore(); - - const activeFirstLevelMenuKey = ref(''); - - function setActiveFirstLevelMenuKey(key: string) { - activeFirstLevelMenuKey.value = key; - } - - function getActiveFirstLevelMenuKey() { - const { hideInMenu, activeMenu } = route.meta; - const name = route.name as string; - - const routeName = (hideInMenu ? activeMenu : name) || name; - - const [firstLevelRouteName] = routeName.split('_'); - - setActiveFirstLevelMenuKey(firstLevelRouteName); - } - - const menus = computed( - () => routeStore.menus.find(menu => menu.key === activeFirstLevelMenuKey.value)?.children || [] - ); - - watch( - () => route.name, - () => { - getActiveFirstLevelMenuKey(); - }, - { immediate: true } - ); - - return { - activeFirstLevelMenuKey, - setActiveFirstLevelMenuKey, - getActiveFirstLevelMenuKey, - menus - }; -} diff --git a/src/layouts/modules/global-menu/vertical-mix-menu.vue b/src/layouts/modules/global-menu/vertical-mix-menu.vue index 46f1a6d2..e713dd79 100644 --- a/src/layouts/modules/global-menu/vertical-mix-menu.vue +++ b/src/layouts/modules/global-menu/vertical-mix-menu.vue @@ -2,11 +2,10 @@ import { computed } from 'vue'; import { useBoolean } from '@sa/hooks'; import { useAppStore } from '@/store/modules/app'; -import { useRouteStore } from '@/store/modules/route'; import { useThemeStore } from '@/store/modules/theme'; import { useRouterPush } from '@/hooks/common/router'; import { $t } from '@/locales'; -import { useMixMenu } from '../../hooks'; +import { useMixMenuContext } from '../../context'; import FirstLevelMenu from './first-level-menu.vue'; import BaseMenu from './base-menu.vue'; @@ -16,15 +15,12 @@ defineOptions({ const appStore = useAppStore(); const themeStore = useThemeStore(); -const routeStore = useRouteStore(); const { routerPushByKey } = useRouterPush(); const { bool: drawerVisible, setBool: setDrawerVisible } = useBoolean(); -const { activeFirstLevelMenuKey, setActiveFirstLevelMenuKey, getActiveFirstLevelMenuKey } = useMixMenu(); +const { menus, activeFirstLevelMenuKey, setActiveFirstLevelMenuKey, getActiveFirstLevelMenuKey } = useMixMenuContext(); const siderInverted = computed(() => !themeStore.darkMode && themeStore.sider.inverted); -const menus = computed(() => routeStore.menus.find(menu => menu.key === activeFirstLevelMenuKey.value)?.children || []); - const showDrawer = computed(() => (drawerVisible.value && menus.value.length) || appStore.mixSiderFixed); function handleSelectMixMenu(menu: App.Global.Menu) {