mirror of
https://github.com/soybeanjs/soybean-admin.git
synced 2025-09-24 20:36:37 +08:00
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { computed, ref, watch } from 'vue';
|
|
import { useRoute } from 'vue-router';
|
|
import { useContext } from '@sa/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
|
|
};
|
|
}
|