Skip to content

Commit b45a13c

Browse files
committed
feat: 支持菜单层级
1 parent eeb01a7 commit b45a13c

File tree

6 files changed

+72
-38
lines changed

6 files changed

+72
-38
lines changed

src/layouts/default.vue

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
.layout-main--side {
55
width: 200px;
66
background-color: #051428;
7+
user-select: none;
8+
cursor: pointer;
79
.el-menu {
810
border-right: none;
911
.el-menu-item {
@@ -16,34 +18,37 @@
1618
}
1719
</style>
1820

19-
<template>
20-
<div class="layout-main" flex="dir:left">
21-
<div class="layout-main--side" flex-box="0">
22-
<el-menu
23-
:default-active="$route.path"
24-
background-color="#051428"
25-
text-color="#969CA5"
26-
active-text-color="#FFF"
27-
router>
28-
<el-menu-item
29-
v-for="menu of menus"
30-
:key="menu.path"
31-
:index="menu.path">
32-
{{ menu.title }}
33-
</el-menu-item>
34-
</el-menu>
35-
</div>
36-
<div flex-box="1">
37-
<router-view/>
38-
</div>
39-
</div>
40-
</template>
41-
4221
<script>
4322
import { menus } from '@/router'
4423
4524
export default {
4625
name: 'layout-main',
26+
render () {
27+
const createMenu = menu => menu.children ? createGroup(menu) : createItem(menu)
28+
const createItem = menu => <el-menu-item index={ menu.path }>{ menu.title }</el-menu-item>
29+
const createGroup = menu =>
30+
<el-submenu index={ menu.path }>
31+
<template slot="title">{ menu.title }</template>
32+
{ menu.children.map(child => createMenu(child)) }
33+
</el-submenu>
34+
const node =
35+
<div class="layout-main" flex="dir:left">
36+
<div class="layout-main--side" flex-box="0">
37+
<el-menu
38+
default-active={ this.$route.path }
39+
background-color="#051428"
40+
text-color="#969CA5"
41+
active-text-color="#FFF"
42+
router>
43+
{ this.menus.map(menu => createMenu(menu)) }
44+
</el-menu>
45+
</div>
46+
<div flex-box="1">
47+
<router-view/>
48+
</div>
49+
</div>
50+
return node
51+
},
4752
data () {
4853
return {
4954
menus

src/pages/about.vue

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/pages/demo1.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<route-meta>
2+
{
3+
"title": "DEMO FOLDER 1"
4+
}
5+
</route-meta>
6+
7+
<template>
8+
<router-view/>
9+
</template>

src/pages/demo1/1.vue

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<route-meta>
2+
{
3+
"title": "DEMO 1-1"
4+
}
5+
</route-meta>
6+
7+
<template>
8+
<div>
9+
{{ $route.name }}
10+
</div>
11+
</template>

src/pages/demo1/2.vue

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<route-meta>
2+
{
3+
"title": "DEMO 1-2"
4+
}
5+
</route-meta>
6+
7+
<template>
8+
<div>
9+
{{ $route.name }}
10+
</div>
11+
</template>

src/router.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,25 @@ import Vue from 'vue'
22
import Router from 'vue-router'
33
import routes from 'vue-auto-routing'
44
import { createRouterLayout } from 'vue-router-layout'
5+
import { concat } from 'lodash'
56

67
Vue.use(Router)
78

89
const RouterLayout = createRouterLayout(layout => {
910
return import('@/layouts/' + layout + '.vue')
1011
})
1112

13+
function routes2menus (routes, parentPaths = []) {
14+
return routes.map(route => {
15+
const menu = {}
16+
const newParentPaths = concat(parentPaths, route.path)
17+
menu.path = newParentPaths.join('/')
18+
menu.title = route.meta.title
19+
if (route.children) menu.children = routes2menus(route.children, newParentPaths)
20+
return menu
21+
})
22+
}
23+
1224
export const router = new Router({
1325
routes: [
1426
{
@@ -19,7 +31,4 @@ export const router = new Router({
1931
]
2032
})
2133

22-
export const menus = routes.map(route => ({
23-
path: route.path,
24-
title: route.meta.title
25-
}))
34+
export const menus = routes2menus(routes)

0 commit comments

Comments
 (0)