Skip to content

Commit cedc105

Browse files
committed
动态路由及路由权限
1 parent da51bcb commit cedc105

File tree

29 files changed

+312
-265
lines changed

29 files changed

+312
-265
lines changed

menus.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
{
22
"code":0,
3-
"message":"Permintaan berhasil",
3+
"message":"请求成功",
44
"result":[
55
{
66
"id":1,
77
"name":"Demo1",
88
"parentId":-1,
9-
"path":"demo1"
9+
"url":"demo1"
1010
},
1111
{
1212
"id":2,
1313
"name":"Demo11",
1414
"parentId":1,
15-
"path":"demo1.demo11"
15+
"url":"demo1.demo11"
1616
},
1717
{
1818
"id":3,
1919
"name":"Demo12",
2020
"parentId":1,
21-
"path":"demo1.demo12"
21+
"url":"demo1.demo12"
2222
},
2323
{
2424
"id":4,
2525
"name":"demo2",
2626
"parentId":-1,
27-
"path":"demo2"
27+
"url":"demo2"
2828
}
2929
]
3030
}

src/components/app-breadcrumb/AppBreadcrumb.vue

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

src/components/app-breadcrumb/index.ts

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

src/components/app-header/index.ts

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

src/components/app-sidebar/AppSidebar.vue

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

src/components/app-sidebar/index.ts

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

src/components/framement/index.ts

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

src/components/index.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
1-
import AppBreadcrumb from './app-breadcrumb';
2-
import AppHeader from './app-header';
3-
import AppSidebar from './app-sidebar';
4-
import Framement from './framement';
1+
import Menus from './menus';
52
import Demo from './demo';
63

74
const components: { [propsName: string]: any } = {
8-
AppBreadcrumb,
9-
AppHeader,
10-
AppSidebar,
11-
Framement,
5+
Menus,
126
Demo,
137
};
148

src/components/menus/MenuItem.vue

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<template>
2+
<div>
3+
<el-submenu
4+
v-if="item.children.length"
5+
:index="item.url"
6+
>
7+
<template slot="title">{{ item.name }}</template>
8+
<!-- 递归使用该组件 -->
9+
<template v-for="(m, i) in item.children">
10+
<MenuItem
11+
:item="m"
12+
:key="i"
13+
/>
14+
</template>
15+
</el-submenu>
16+
<el-menu-item
17+
v-else
18+
:index="item.url"
19+
>
20+
<router-link :to="{ name: item.url }">
21+
<li>{{ item.name }}</li>
22+
</router-link>
23+
24+
</el-menu-item>
25+
</div>
26+
</template>
27+
28+
<script lang="ts">
29+
import { Component, Prop, Vue } from 'vue-property-decorator';
30+
31+
@Component({
32+
name: 'MenuItem',
33+
})
34+
export default class MenuItem extends Vue {
35+
@Prop() private item!: () => {};
36+
}
37+
</script>
38+
39+
<style scoped lang="scss"></style>

src/components/menus/Menus.vue

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<template>
2+
<div class="app-sidebar">
3+
<el-row class="tac">
4+
<el-col :span="24">
5+
<el-menu
6+
default-active="2"
7+
class="el-menu-vertical-demo"
8+
v-if="menuList.length"
9+
background-color="#333"
10+
text-color="#fff"
11+
active-text-color="#f90"
12+
@open="handleOpen"
13+
@close="handleClose"
14+
>
15+
<template v-for="(item, index) in menuList">
16+
<MenuItem
17+
:key="index"
18+
:item="item"
19+
/>
20+
</template>
21+
</el-menu>
22+
</el-col>
23+
</el-row>
24+
</div>
25+
</template>
26+
27+
<script lang="ts">
28+
import { Component, Prop, Vue, Watch } from 'vue-property-decorator';
29+
import MenuItem from './MenuItem.vue';
30+
import { State, Action } from 'vuex-class';
31+
import { IViewState } from '@/store/view';
32+
33+
@Component({
34+
components: {
35+
MenuItem,
36+
},
37+
})
38+
export default class Menu extends Vue {
39+
// 获取本地存储的菜单
40+
@State private viewStore!: IViewState;
41+
42+
private isCollapse: boolean = false;
43+
44+
private handleOpen(key: any, keyPath: any) {
45+
console.log(key, keyPath);
46+
}
47+
private handleClose(key: any, keyPath: any) {
48+
console.log(key, keyPath);
49+
}
50+
51+
// 计算属性
52+
private get menuList() {
53+
return this.viewStore.menuList;
54+
}
55+
}
56+
</script>
57+
58+
<style scoped lang="less">
59+
.sidebar {
60+
position: relative;
61+
.app-sidebar {
62+
position: absolute;
63+
left: 0;
64+
top: 0;
65+
right: 0;
66+
bottom: 0;
67+
}
68+
}
69+
</style>

0 commit comments

Comments
 (0)