This commit is contained in:
zhuokongming
2020-03-19 14:05:42 +08:00
parent 478b39d61a
commit a6d3ace808
13 changed files with 167 additions and 48 deletions

View File

@@ -9,7 +9,7 @@ export default {
return showTitle(item, this);
},
showChildren (item) {
return item.children && (item.children.length > 1 || (item.meta && item.meta.showAlways));
return item.children && (item.children.length > 0 || (item.meta && item.meta.showAlways));
},
getNameOrHref (item, children0) {
return item.href ? `isTurnByHref_${item.href}` : (children0 ? item.children[0].name : item.name);

View File

@@ -11,9 +11,9 @@
v-show="!collapsed"
width="auto"
>
<template v-for="item in menuList">
<template v-for="item in menuList">
<template v-if="item.children && item.children.length === 1">
<side-menu-item :key="`menu-${item.name}`" :parent-item="item" v-if="showChildren(item)"></side-menu-item>
<side-menu-item :key="`menu-${item.name}`" :parent-item="item.children[0]" v-if="item.children[0].children && item.children[0].children.length > 0 "></side-menu-item>
<menu-item
:key="`menu-${item.children[0].name}`"
:name="getNameOrHref(item, true)"
@@ -24,7 +24,7 @@
</menu-item>
</template>
<template v-else>
<side-menu-item :key="`menu-${item.name}`" :parent-item="item" v-if="showChildren(item)"></side-menu-item>
<side-menu-item :key="`menu-${item.name}`" :parent-item="item" v-if="item.children && item.children.length > 0"></side-menu-item>
<menu-item :key="`menu-${item.name}`" :name="getNameOrHref(item)" v-else>
<common-icon :type="item.icon || ''" />
<span>{{ showTitle(item) }}</span>
@@ -81,6 +81,13 @@ export default {
CollapsedMenu
},
props: {
// 菜单path数组
menuNameMatchedMap:{
type: Map,
default() {
return new Map();
}
},
// 菜单集合
menuList: {
type: Array,
@@ -161,6 +168,7 @@ export default {
},
methods: {
updateActiveName(name){
this.updateOpenName(name);
this.$nextTick(() => {
this.$refs.menu.updateOpened();
this.$refs.menu.updateActiveName(name);
@@ -171,13 +179,15 @@ export default {
},
// 从激活菜单的名称中获取打开的菜单
getOpenedNamesByActiveName(name) {
return this.$route.matched
.map(item => item.name)
.filter(item => item !== name);
let array = this.menuNameMatchedMap.get(name);
if(array){
return array;
}else{
return [];
}
},
updateOpenName(name) {
if (name === this.$config.homeName) this.openedNames = [];
else this.openedNames = this.getOpenedNamesByActiveName(name);
this.openedNames = this.menuNameMatchedMap.get(name);
}
}
};

View File

@@ -10,6 +10,7 @@
v-model="collapsed"
>
<SideMenu
:menuNameMatchedMap="menuNameMatchedMap"
:active-name="$route.name"
:collapsed="collapsed"
:menu-list="menuList"
@@ -123,7 +124,8 @@ export default {
searchKeyWord: '',
searchList: [],
searchListResult: [],
menuList: []
menuList: [],
menuNameMatchedMap:new Map()
};
},
computed: {
@@ -284,6 +286,7 @@ export default {
icon: _.isUndefined(router.meta.icon) ? '' : router.meta.icon,
children: []
};
this.menuNameMatchedMap.set(menu.name,[menu.name]);
privilegeTree.push(menu);
//存在孩子节点,开始递归
if (router.children && router.children.length > 0) {
@@ -292,11 +295,17 @@ export default {
}
}
}
console.log('privilegeTree',privilegeTree)
this.menuList = privilegeTree;
},
recursion(children, parentMenu) {
for (const router of children) {
//验证权限
if (this.$store.state.user.privilegeMenuKeyList.indexOf(router.name) ===-1) {
continue;
}
//过滤非菜单
if (!router.meta.hideInMenu) {
let menu = {
@@ -309,6 +318,10 @@ export default {
name: router.name,
title: router.meta.title
});
let menuNameArray = this.menuNameMatchedMap.get(parentMenu.name);
this.menuNameMatchedMap.set(menu.name,[...menuNameArray,menu.name]);
parentMenu.children.push(menu);
//存在孩子节点,开始递归
if (router.children && router.children.length > 0) {