| | |
| | | import { getAllParentPath } from '/@/router/helper/menuHelper'; |
| | | |
| | | import { useTimeoutFn } from '/@/hooks/core/useTimeout'; |
| | | import { useDebounceFn } from '@vueuse/core'; |
| | | |
| | | export function useOpenKeys( |
| | | menuState: MenuState, |
| | | menus: Ref<MenuType[]>, |
| | | accordion: Ref<boolean>, |
| | | mixSider: Ref<boolean>, |
| | | collapse: Ref<boolean> |
| | | // mode: Ref<MenuModeEnum>, |
| | | collapse: Ref<boolean>, |
| | | ) { |
| | | const debounceSetOpenKeys = useDebounceFn(setOpenKeys, 50); |
| | | async function setOpenKeys(path: string) { |
| | | // if (mode.value === MenuModeEnum.HORIZONTAL) { |
| | | // return; |
| | | // } |
| | | const native = !mixSider.value; |
| | | const menuList = toRaw(menus.value); |
| | | useTimeoutFn( |
| | | () => { |
| | | const menuList = toRaw(menus.value); |
| | | if (menuList?.length === 0) { |
| | | menuState.activeSubMenuNames = []; |
| | | menuState.openNames = []; |
| | | return; |
| | | } |
| | | const keys = getAllParentPath(menuList, path); |
| | | |
| | | if (!unref(accordion)) { |
| | | menuState.openNames = uniq([...menuState.openNames, ...keys]); |
| | | } else { |
| | |
| | | } |
| | | menuState.activeSubMenuNames = menuState.openNames; |
| | | }, |
| | | 16, |
| | | native |
| | | 30, |
| | | native, |
| | | ); |
| | | } |
| | | |
| | |
| | | return unref(collapse) ? [] : menuState.openNames; |
| | | }); |
| | | |
| | | return { setOpenKeys, getOpenKeys }; |
| | | return { setOpenKeys: debounceSetOpenKeys, getOpenKeys }; |
| | | } |