提交 | 用户 | 时间
|
314507
|
1 |
import { ElSubMenu, ElMenuItem } from 'element-plus' |
H |
2 |
import { hasOneShowingChild } from '../helper' |
|
3 |
import { isUrl } from '@/utils/is' |
|
4 |
import { useRenderMenuTitle } from './useRenderMenuTitle' |
|
5 |
import { pathResolve } from '@/utils/routerHelper' |
|
6 |
|
|
7 |
const { renderMenuTitle } = useRenderMenuTitle() |
|
8 |
|
|
9 |
export const useRenderMenuItem = () => |
|
10 |
// allRouters: AppRouteRecordRaw[] = [], |
|
11 |
{ |
|
12 |
const renderMenuItem = (routers: AppRouteRecordRaw[], parentPath = '/') => { |
|
13 |
return routers |
|
14 |
.filter((v) => !v.meta?.hidden) |
|
15 |
.map((v) => { |
|
16 |
const meta = v.meta ?? {} |
|
17 |
const { oneShowingChild, onlyOneChild } = hasOneShowingChild(v.children, v) |
|
18 |
const fullPath = isUrl(v.path) ? v.path : pathResolve(parentPath, v.path) // getAllParentPath<AppRouteRecordRaw>(allRouters, v.path).join('/') |
|
19 |
|
|
20 |
if ( |
|
21 |
oneShowingChild && |
|
22 |
(!onlyOneChild?.children || onlyOneChild?.noShowingChildren) && |
|
23 |
!meta?.alwaysShow |
|
24 |
) { |
|
25 |
return ( |
|
26 |
<ElMenuItem |
|
27 |
index={onlyOneChild ? pathResolve(fullPath, onlyOneChild.path) : fullPath} |
|
28 |
> |
|
29 |
{{ |
|
30 |
default: () => renderMenuTitle(onlyOneChild ? onlyOneChild?.meta : meta) |
|
31 |
}} |
|
32 |
</ElMenuItem> |
|
33 |
) |
|
34 |
} else { |
|
35 |
return ( |
|
36 |
<ElSubMenu index={fullPath}> |
|
37 |
{{ |
|
38 |
title: () => renderMenuTitle(meta), |
|
39 |
default: () => renderMenuItem(v.children!, fullPath) |
|
40 |
}} |
|
41 |
</ElSubMenu> |
|
42 |
) |
|
43 |
} |
|
44 |
}) |
|
45 |
} |
|
46 |
|
|
47 |
return { |
|
48 |
renderMenuItem |
|
49 |
} |
|
50 |
} |