Skip to content

Commit ac515bd

Browse files
committed
优化刷新页面设置默认菜单
1 parent 32a1f64 commit ac515bd

File tree

11 files changed

+99
-40
lines changed

11 files changed

+99
-40
lines changed

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<pre style='text-align:center;background-color:#ccc; height:100%;border:0;position:fixed;top:0;left:0;width:100%;z-index:1234'>
1414
<h2 style='padding-top:200px;margin:0'>
1515
<strong>你的浏览器版本太low了,已经和时代脱轨了 :(</strong>
16-
<strong>请升级浏览器版本,或者下载谷歌浏览器火狐浏览器等现代浏览器</strong>
16+
<strong>请升级浏览器版本,或者下载谷歌浏览器火狐浏览器等现代浏览器</strong>
1717
</h2>
1818
</pre>
1919
<![endif]-->

src/router/index.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,19 @@ export default new Router({
1212
{ path: '/', redirect: '/error/404' },
1313
{
1414
path: '/demo/list', name: 'demoList', component: _import('demo/list'),
15-
meta: {title: '学校信息', location: ['教务管理', '学校管理', '学校信息']} // title 为路由tab的标题,location表示位置
15+
meta: {title: ['学校管理', '学生管理', '学生信息']} // title 表示菜单位置,需要自定义
16+
},
17+
{
18+
path: '/demo/add', name: 'demoAdd', component: _import('demo/add'),
19+
meta: {title: ['学校管理', '学生管理', '添加学生']}
1620
},
1721
{
1822
path: '/demo/test_1', name: 'test_1', component: _import('demo/test_1'),
19-
meta: {title: '测试1', location: ['测试1', '测试2']}
23+
meta: {title: ['学校管理', '班级管理']}
2024
},
2125
{
2226
path: '/demo/test_2', name: 'test_2', component: _import('demo/test_2'),
23-
meta: {title: '测试2', location: ['测试1', '测试2']}
27+
meta: {title: ['教务管理', '学年学期']}
2428
},
2529
]
2630
},

src/store/modules/menu-list.js

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,56 @@
11
import { MENU_LIST } from '../mutations'
22

3+
function getMatchMenu(menuList, currentMenuName) {
4+
let node = null; // 获取的子节点
5+
let code = 'label'; // 匹配的属性
6+
let children = 'children'; // 包含子节点的属性
7+
8+
/**
9+
* 根据 NodeID 查找当前节点以及父节点
10+
* json 数据源
11+
* nodeId 匹配的值
12+
*/
13+
let getNode = (json, nodeName) => {
14+
for (let i = 0; i < json.length; i++) {
15+
let obj = json[i];
16+
// if (!nodeName) break;
17+
// if (!obj || !obj[code]) continue;
18+
if (obj[code] == nodeName) {
19+
node = obj;
20+
break;
21+
} else {
22+
if (obj[children]) {
23+
getNode(obj[children], nodeName);
24+
} else {
25+
continue;
26+
}
27+
}
28+
}
29+
return node;
30+
}
31+
32+
return getNode(menuList, currentMenuName);
33+
};
34+
35+
336
const state = {
437
list: [
5-
{ moduleName: '学校管理', menuList: []},
6-
{ moduleName: '教务管理', menuList: [
38+
{ moduleName: '学校管理', menuList: [
739
{ index: '1', label: '学生管理', children: [
8-
{ index: '1-1', label: '学生信息', name: 'demoList', path: '/demo/list' }, // 注意:必须与路由router的name、path对应
9-
{ index: '1-2', label: 'test', children: [
10-
{ index: '1-2-1', label: 'test_1', name: 'test_1', path: '/demo/test_1' }
11-
]}]
12-
}
40+
{ index: '1-1', label: '学生信息', path: '/demo/list' },
41+
{ index: '1-2', label: '添加学生', path: '/demo/add'}]
42+
},
43+
{ index: '2', label: '班级管理', path: '/demo/test_1'}
1344
]},
14-
{ moduleName: '教职工管理', menuList: [
15-
{ index: '1', label: '学生管理', children: [
16-
{ index: '1-1', label: 'test_2', name: 'test_2', path: '/demo/test_2' }]
17-
}
45+
{ moduleName: '教务管理', menuList: [
46+
{ index: '1', label: '学年学期', path: '/demo/test_2'}
1847
]},
48+
{ moduleName: '教职工管理', menuList: []},
1949
{ moduleName: '行政办公', menuList: []},
2050
],
2151
activeModuleName: '',
22-
activeMenuIndex: '-1'
52+
activeMenuIndex: '-1',
53+
activeMenuName: '',
2354

2455
}
2556

@@ -43,7 +74,16 @@ const mutations = {
4374
// 设置当前菜单的index
4475
[MENU_LIST.SET_ACTICE_MENU_INDEX] (state, menuIndex) {
4576
state.activeMenuIndex = menuIndex;
46-
},
77+
},
78+
// 设置当前菜单的name,设置index
79+
[MENU_LIST.SET_ACTICE_MENU_NAME] (state, menuName) {
80+
state.activeMenuName = menuName;
81+
82+
// 设置当前菜单的index
83+
let menuList = getters.menuList();
84+
let current = getMatchMenu(menuList, state.activeMenuName);
85+
state.activeMenuIndex = current.index;
86+
},
4787
}
4888

4989
export default {

src/store/modules/router-tab.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { ROUTER_TAB } from '../mutations'
22

33
const state = {
4-
openTab:[], //所有打开的路由
5-
activeIndex: '' //激活状态
4+
openTab:[], //所有打开的路由 - openTab 为 router对象的数组
5+
activeIndex: '' // 激活状态 - activeIndex 为 path 路径
66
}
77

88
const mutations = {

src/store/mutations.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ export const ROUTER_TAB = {
1212
export const MENU_LIST = {
1313
SET_ACTICE_MODULE_NAME: 'set_active_module_name',
1414
SET_ACTICE_MENU_INDEX: 'set_active_menu_index',
15+
SET_ACTICE_MENU_NAME: 'set_active_menu_name',
1516
}
1617

src/views/common/menuAside.vue

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</div>
77
<!-- 菜单列表 -->
88
<div v-if="loading">
9-
<el-menu class="menu-list" :default-active="activeMenu" :collapse="isCollapse">
9+
<el-menu class="menu-list" :default-active="activeMenuIndex" :collapse="isCollapse">
1010
<MenuTree :menuLIst="menuLIst" @clickMenuItem="clickMenuItem"></MenuTree>
1111
</el-menu>
1212
</div>
@@ -28,18 +28,21 @@ export default {
2828
}
2929
},
3030
created(){
31-
this.activeMenu = '1-1';
31+
// 刷新页面,通过路由(meta > title)设置模块名与菜单名
32+
let routeMeta = this.$route.meta;
33+
this.moduleName = routeMeta.title[0]; // 当前模块名
34+
this.activeMenuName = routeMeta.title[routeMeta.title.length - 1]; // 当前菜单名
3235
},
3336
methods: {
3437
// 点击菜单的跳转,改变菜单index值
3538
clickMenuItem(menuItem){
36-
this.activeMenu = menuItem.index;
39+
this.activeMenuIndex = menuItem.index;
3740
this.$router.push(menuItem.path);
3841
}
3942
},
4043
watch:{
41-
activeMenu(newVal){
42-
// 当切换模块时,菜单index === '-1',重新渲染菜单列表
44+
// 当切换模块时,菜单index === '-1',重新渲染菜单列表
45+
activeMenuIndex(newVal){
4346
if(newVal === '-1'){
4447
this.loading = false;
4548
this.$nextTick(() => {
@@ -49,19 +52,32 @@ export default {
4952
}
5053
},
5154
computed: {
52-
moduleName() {
53-
return this.$store.state.menuList.activeModuleName;
55+
moduleName: {
56+
get() {
57+
return this.$store.state.menuList.activeModuleName;
58+
},
59+
set(val) {
60+
this.$store.commit(MENU_LIST.SET_ACTICE_MODULE_NAME, val);
61+
}
5462
},
5563
menuLIst(){
5664
return this.$store.getters.menuList;
5765
},
58-
activeMenu: {
66+
activeMenuIndex: {
5967
get () {
6068
return this.$store.state.menuList.activeMenuIndex;
6169
},
6270
set (val) {
6371
this.$store.commit(MENU_LIST.SET_ACTICE_MENU_INDEX, val);
6472
}
73+
},
74+
activeMenuName: {
75+
get () {
76+
return this.$store.state.menuList.activeMenuName;
77+
},
78+
set (val) {
79+
this.$store.commit(MENU_LIST.SET_ACTICE_MENU_NAME, val);
80+
}
6581
}
6682
},
6783
components: {

src/views/common/navigationBar.vue

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@ export default {
3333
default: false
3434
}
3535
},
36-
data() {
37-
return { }
38-
},
39-
created(){
40-
this.activeModuleName = '教务管理'; // 默认显示模块
41-
},
4236
methods:{
4337
collapse(){
4438
this.$emit('update:isCollapse', !this.isCollapse);

src/views/common/router-tab.vue

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<template>
22
<div class="router-tabs-theme t-tabs">
33
<el-tabs v-model="activeIndex" v-if="openTab.length" type="border-card" closable @tab-click='tabClick' @tab-remove='tabRemove'>
4-
<el-tab-pane :key="item.name" v-for="(item) in openTab" :label="item.meta.title" :name="item.path">
4+
<el-tab-pane :key="item.name" v-for="(item) in openTab" :label="item.meta.title[item.meta.title.length-1]" :name="item.path">
55
<span>当前位置:</span>
66
<el-breadcrumb separator=">" class="t-breadcrumb">
7-
<el-breadcrumb-item v-for="(item, index) in item.meta.location" :key="index">{{item}}</el-breadcrumb-item>
7+
<el-breadcrumb-item v-for="(item, index) in item.meta.title" :key="index">{{item}}</el-breadcrumb-item>
88
</el-breadcrumb>
99
</el-tab-pane>
1010
</el-tabs>
@@ -13,9 +13,6 @@
1313
<script>
1414
import { ROUTER_TAB } from "../../store/mutations.js";
1515
export default {
16-
data(){
17-
return{}
18-
},
1916
created() {
2017
// 刷新时以当前路由做为 tab 加入tabs
2118
this.routerAdd(this.$route);
@@ -48,6 +45,8 @@ export default {
4845
},
4946
watch:{
5047
'$route'(to,from){
48+
console.log(this.$router);
49+
5150
// flag 判断路由是否已经tab打开
5251
let flag = false;
5352
for(let item of this.openTab){

src/views/demo/add.vue

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<template>
2+
<div>
3+
添加学生
4+
</div>
5+
</template>

src/views/demo/test_1.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
22
<div>
3-
test1
3+
班级管理
44
</div>
55
</template>

0 commit comments

Comments
 (0)