This commit is contained in:
zhuoda
2020-04-08 20:15:01 +08:00
15 changed files with 615 additions and 837 deletions

View File

@@ -13,6 +13,10 @@ export const privilegeApi = {
addBatchSaveMenu: data => {
return postAxios('/privilege/menu/batchSaveMenu', data);
},
// 功能点批量保存
addBatchSavePoints: data => {
return postAxios('/privilege/function/batchSave', data);
},
// 查询菜单功能点
queryPrivilegeFunctionList: menuKey => {
return postAxios('/privilege/function/query/' + menuKey);

View File

@@ -11,7 +11,7 @@
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.children[0]" v-if="item.children[0].children && item.children[0].children.length > 0 "></side-menu-item>
<menu-item
@@ -179,9 +179,6 @@ 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;
@@ -190,8 +187,6 @@ export default {
}
},
updateOpenName(name) {
// if (name === this.$config.homeName) this.openedNames = [];
// else this.openedNames = this.getOpenedNamesByActiveName(name);
this.openedNames = this.menuNameMatchedMap.get(name);
}
}

View File

@@ -363,11 +363,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) {
//验证权限
@@ -393,7 +399,6 @@ export default {
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) {

View File

@@ -10,7 +10,7 @@ import config from '@/config';
const { homeName } = config;
Vue.use(Router);
Vue.use(Router);
const router = new Router({
// routes: routers,
routes: buildRouters(routers)
@@ -211,9 +211,6 @@ if (process.env.NODE_ENV === 'development') {
delete tempCheckObj.checkRouterPathMap;
}
delete tempCheckObj.checkRouterNameMap;
delete tempCheckObj.checkRouterPathMap;
const topMenuArray = routers.filter(e => e.meta.topMenu);
export { topMenuArray };

View File

@@ -48,6 +48,10 @@ export const systemSetting = [
title: '编辑',
name: 'privilege-main-update'
},
{
title: '批量保存功能点',
name: 'privilege-batch-save-points'
},
{
title: '查询',
name: 'privilege-main-search'

View File

@@ -90,6 +90,17 @@
<div class="card-title" slot="title">
<Icon type="ios-cog"></Icon>功能点
</div>
<div slot="extra">
<Button
@click="addBatchSavePoints"
icon="ios-albums-outline"
type="primary"
size="small"
v-privilege="'privilege-batch-save-points'"
v-if="pointsChangeNum > 0"
>批量保存功能点</Button>
</div>
<Alert show-icon type="warning" v-if="pointsChangeNum > 0"> {{this.pointsChangeNum}} 个功能点更新请立即批量保存</Alert>
<Row>
<Table :columns="privilegeTableColumn" :data="privilegeTableData" border></Table>
</Row>
@@ -135,8 +146,11 @@ export default {
},
menuTree: [],
menusChange: false,
//菜单差异数量
menusChangeNum: 0,
menuList: [],
//功能点差异数量
pointsChangeNum:0,
routerMap: new Map(),
privilegeTableData: [],
privilegeTableColumn: [
@@ -290,7 +304,24 @@ console.error(privilegeTree)
this.menusChangeNum = this.menusChangeNum + 1;
}
},
// 菜单批量保存
// 批量保存功能点
async addBatchSavePoints(){
this.$Spin.show();
let result = await privilegeApi.addBatchSavePoints(
this.privilegeTableData.map(e =>{
return Object.assign({},{
functionName:e.title,
menuKey:e.parentKey,
functionKey:e.name,
sort:e.sort
});
})
);
this.$Message.success('批量保存成功');
this.$Spin.hide();
this.loadPrivilegeTableData(this.privilegeTableData[0].parentKey);
},
// 批量保存菜单
async addBatchSaveMenu() {
this.$Spin.show();
let result = await privilegeApi.addBatchSaveMenu(this.menuList);
@@ -312,33 +343,45 @@ console.error(privilegeTree)
this.formData.show = true;
},
// 查询菜单对应的页面以及功能点
async getPrivilegeList(menuKey) {
async getPrivilegeList(menuKey,frontPrivilegeData) {
this.$Spin.show();
this.formData.show = false;
let result = await privilegeApi.queryPrivilegeFunctionList(menuKey);
this.$Spin.hide();
let datas = result.data;
let functionKey = new Map();
datas.map(item => {
functionKey.set(item.functionKey, item.url);
//处理服务端存储的功能点
let serverPointData = result.data;
let serverFunctionKeyUrlMap = new Map();
serverPointData.map(item => {
serverFunctionKeyUrlMap.set(item.functionKey, {url:item.url?item.url:''});
});
let privilegeTableData = [];
this.privilegeTableData.map(item => {
let url = functionKey.get(item.name) || '';
item.url = url;
privilegeTableData.push(item);
});
this.privilegeTableData = privilegeTableData;
let pointsChangeNum = 0;
for (let frontPrivilege of frontPrivilegeData) {
let serverUrlObject = serverFunctionKeyUrlMap.get(frontPrivilege.name);
if(serverUrlObject){
frontPrivilege.url = serverUrlObject.url;
}else{
frontPrivilege.url = '';
//服务端没有此功能点
pointsChangeNum++;
}
}
this.pointsChangeNum = pointsChangeNum;
this.privilegeTableData = frontPrivilegeData;
},
// 点击菜单事件
loadPrivilegeTableData(name) {
let router = this.routerMap.get(name);
let frontPrivilegeData = [];
if (!_.isUndefined(router) && router.meta && router.meta.privilege) {
this.privilegeTableData = router.meta.privilege.map(e =>
Object.assign({}, e, { parentKey: name })
let sort = 0;
frontPrivilegeData = router.meta.privilege.map(e =>{
sort++;
return Object.assign({}, e, { parentKey: name },{sort});
}
);
}
this.getPrivilegeList(name);
this.getPrivilegeList(name,frontPrivilegeData);
}
}
};

View File

@@ -0,0 +1,26 @@
<template>
<Card class="warp-card" dis-hover>
<Alert>
<h3>三级路由页面</h3>
<pre>
这个是三级路由页面
</pre>
</Alert>
</Card>
</template>
<script>
export default {
name: 'ThreeContent',
components: {},
props: {},
data() {
return {
};
},
mounted() {
},
methods: {
}
};
</script>