1- import { defineComponent } from 'vue'
2- import { RouterView } from 'vue-router'
1+ import { defineComponent , computed } from 'vue'
2+ import { RouterView , RouteRecordRaw , useRouter , useRoute } from 'vue-router'
33import { Layout , Dropdown } from 'ant-design-vue'
4- import { GlobalHeader , Menus } from '@/components/GlobalHeader'
4+ import { GlobalHeader , Menus , LevelMenus } from '@/components/GlobalHeader'
55
66import styles from './index.module.less'
77import UserIcon from '../assets/user.png'
88
99const LevelBasicLayout = defineComponent ( {
1010 name : 'LevelBasicLayout' ,
1111 setup ( ) {
12+ // 获取显示状态的路由
13+ const menuLists = computed ( ( ) => {
14+ const menus = getMenus ( ) . filter ( ( item : any ) => ! item ?. meta ?. hidden )
15+ menus . forEach ( ( item : any ) => {
16+ if ( item . children ) {
17+ // 只取第一层
18+ delete item . children
19+ }
20+ } )
21+ return menus
22+ } )
23+
24+ // 获取子路由
25+ const subMenuLists = computed ( ( ) => {
26+ let menus : RouteRecordRaw [ ] = [ ]
27+ const names = useRoute ( ) . path . split ( '/' )
28+ if ( names . length ) {
29+ getMenus ( ) . forEach ( ( item ) => {
30+ if ( item . name == names [ 1 ] ) {
31+ menus = item ?. children || [ ]
32+ }
33+ } )
34+ }
35+ return menus
36+ } )
37+
38+ // 获取路由列表
39+ const getMenus = ( ) => {
40+ let menuList : RouteRecordRaw [ ] = [ ]
41+ const routes : Array < RouteRecordRaw > = useRouter ( ) . options ?. routes || [ ]
42+ routes . forEach ( ( item ) => {
43+ if ( item . path == '/' ) {
44+ menuList = item . children || [ ]
45+ }
46+ } )
47+ return JSON . parse ( JSON . stringify ( menuList ) )
48+ }
1249 const slots = {
1350 content : ( ) => (
1451 < >
1552 { /* 导航栏 */ }
16- < Menus > </ Menus >
53+ < LevelMenus menuLists = { menuLists [ 'value' ] } > </ LevelMenus >
1754 { /* 用户信息 */ }
1855 < div class = { styles [ 'user-info' ] } >
1956 < Dropdown >
@@ -30,7 +67,15 @@ const LevelBasicLayout = defineComponent({
3067 < Layout class = { styles [ 'level-layout' ] } >
3168 < GlobalHeader v-slots = { slots } > </ GlobalHeader >
3269 < div class = { styles [ 'level-content' ] } >
33- < div class = { styles [ 'level-sub-menu' ] } > </ div >
70+ { /* 侧边子目录 */ }
71+ { subMenuLists [ 'value' ] . length ? (
72+ < div class = { styles [ 'vertical-sub-menu' ] } >
73+ < Menus menuLists = { subMenuLists [ 'value' ] } mode = "inline" > </ Menus >
74+ </ div >
75+ ) : (
76+ ''
77+ ) }
78+ { /* 右侧内容区 */ }
3479 < Layout . Content >
3580 < RouterView />
3681 </ Layout . Content >
0 commit comments