提交 | 用户 | age
|
2f1255
|
1 |
import { MenuModeEnum } from '/@/enums/menuEnum'; |
2f6253
|
2 |
import type { Menu as MenuType } from '/@/router/types'; |
ba068b
|
3 |
import type { MenuState } from '../types'; |
2f6253
|
4 |
import type { Ref } from 'vue'; |
陈 |
5 |
|
|
6 |
import { unref } from 'vue'; |
c303ec
|
7 |
import { getAllParentPath } from '/@/router/helper/menuHelper'; |
4ff6b7
|
8 |
import { es6Unique } from '/@/utils'; |
ba068b
|
9 |
import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; |
2f6253
|
10 |
|
陈 |
11 |
export function useOpenKeys( |
|
12 |
menuState: MenuState, |
|
13 |
menus: Ref<MenuType[]>, |
|
14 |
flatMenusRef: Ref<MenuType[]>, |
2f1255
|
15 |
isAppMenu: Ref<boolean>, |
4ff6b7
|
16 |
mode: Ref<MenuModeEnum>, |
V |
17 |
accordion: Ref<boolean> |
2f6253
|
18 |
) { |
ba068b
|
19 |
const { getCollapsed } = useMenuSetting(); |
2f6253
|
20 |
/** |
陈 |
21 |
* @description:设置展开 |
|
22 |
*/ |
|
23 |
function setOpenKeys(menu: MenuType) { |
|
24 |
const flatMenus = unref(flatMenusRef); |
4ff6b7
|
25 |
if (!unref(accordion)) { |
V |
26 |
menuState.openKeys = es6Unique([ |
|
27 |
...menuState.openKeys, |
|
28 |
...getAllParentPath(flatMenus, menu.path), |
|
29 |
]); |
|
30 |
} else { |
|
31 |
menuState.openKeys = getAllParentPath(flatMenus, menu.path); |
|
32 |
} |
2f6253
|
33 |
} |
4ff6b7
|
34 |
|
2f6253
|
35 |
/** |
陈 |
36 |
* @description: 重置值 |
|
37 |
*/ |
|
38 |
function resetKeys() { |
|
39 |
menuState.selectedKeys = []; |
|
40 |
menuState.openKeys = []; |
|
41 |
} |
|
42 |
|
|
43 |
function handleOpenChange(openKeys: string[]) { |
4ff6b7
|
44 |
if (unref(mode) === MenuModeEnum.HORIZONTAL || !unref(accordion)) { |
2f1255
|
45 |
menuState.openKeys = openKeys; |
2f6253
|
46 |
} else { |
2f1255
|
47 |
const rootSubMenuKeys: string[] = []; |
V |
48 |
for (const { children, path } of unref(menus)) { |
|
49 |
if (children && children.length > 0) { |
|
50 |
rootSubMenuKeys.push(path); |
|
51 |
} |
|
52 |
} |
ba068b
|
53 |
if (!unref(getCollapsed) || !unref(isAppMenu)) { |
2f1255
|
54 |
const latestOpenKey = openKeys.find((key) => menuState.openKeys.indexOf(key) === -1); |
V |
55 |
if (rootSubMenuKeys.indexOf(latestOpenKey as string) === -1) { |
|
56 |
menuState.openKeys = openKeys; |
|
57 |
} else { |
|
58 |
menuState.openKeys = latestOpenKey ? [latestOpenKey] : []; |
|
59 |
} |
|
60 |
} else { |
|
61 |
menuState.collapsedOpenKeys = openKeys; |
|
62 |
} |
2f6253
|
63 |
} |
陈 |
64 |
} |
|
65 |
return { setOpenKeys, resetKeys, handleOpenChange }; |
|
66 |
} |