Commit f38ddc5f by caoyanzhi

update: 按钮权限

parent 5beeddf1
/* eslint-disable */
module.exports = {
// key为按钮所在的页面路径,对象为页面按钮
// 客户列表
myCustomerList: {
// key为按钮code,数组为按钮数据
// 按钮名称、是否受权限控制0否1是、是否增删改0跳转1是2其他、按钮跳转路径
assign: ['分配', 1, 2],
multipleAssign: ['批量分配', 1, 2]
},
memberTagSet: {
syncLog: ['同步历史', 1, 0, 'syncHistory']
}
}
...@@ -3,8 +3,9 @@ const path = require('path'); ...@@ -3,8 +3,9 @@ const path = require('path');
const fs = require('fs'); const fs = require('fs');
const json2xls = require('json2xls'); const json2xls = require('json2xls');
const menuData = require('./menu-data.js'); const menuData = require('./menu-data.js');
const buttonData = require('./button-code.js');
function checkData(data, level) { function checkMenuData(data, level) {
return data.some(el => { return data.some(el => {
// 每个节点是否有menu属性 // 每个节点是否有menu属性
let flag = el.hasOwnProperty('menu'); let flag = el.hasOwnProperty('menu');
...@@ -39,15 +40,15 @@ function checkData(data, level) { ...@@ -39,15 +40,15 @@ function checkData(data, level) {
} }
} }
if (flag && Array.isArray(el.children)) { if (flag && Array.isArray(el.children)) {
flag = !checkData(el.children, level + 1); flag = !checkMenuData(el.children, level + 1);
} }
return !flag; return !flag;
}); });
}; };
function createMenuJson(data, parentCode) { function createMenuJson(data, parentCode) {
let result = []; let result = [];
// 菜单名称、路径、icon_url、code、父code
data.forEach((el, index) => { data.forEach((el, index) => {
// 菜单名称、路径、是否受权限控制、icon_url
const [ menuName, menuUrl, isRight, iconUrl ] = el.menu; const [ menuName, menuUrl, isRight, iconUrl ] = el.menu;
const menuIndex = (index + 1).toString().padStart(2, '0'); const menuIndex = (index + 1).toString().padStart(2, '0');
const item = { const item = {
...@@ -55,10 +56,9 @@ function createMenuJson(data, parentCode) { ...@@ -55,10 +56,9 @@ function createMenuJson(data, parentCode) {
menuCode: parentCode ? parentCode + menuIndex : 'hb_m' + menuIndex, menuCode: parentCode ? parentCode + menuIndex : 'hb_m' + menuIndex,
parentCode, parentCode,
menuUrl, menuUrl,
type: 0, menuType: 0,
iconUrl: iconUrl || '', iconUrl,
isRight, isRight
isPageBtn: 0
} }
result.push(item); result.push(item);
if (Array.isArray(el.children)) { if (Array.isArray(el.children)) {
...@@ -67,21 +67,119 @@ function createMenuJson(data, parentCode) { ...@@ -67,21 +67,119 @@ function createMenuJson(data, parentCode) {
}); });
return result; return result;
} }
function checkButtonData(data, menuJson) {
function hasPage(menuUrl, menuJson, menuUrlList) {
const menu = menuJson.find(el => el.menuUrl == menuUrl) || {};
let flag = menu && menu.menuCode;
if (!Array.isArray(menuUrlList)) {
menuUrlList = [];
}
menuUrlList.push(menuUrl)
if (!flag) {
console.log(menuUrlList, '页面不存在');
return flag;
}
if (menu.parentCode.length > 6) {
flag = hasPage(menuJson.find(el => el.menuCode == menu.parentCode).menuUrl, menuJson, menuUrlList);
}
return flag;
}
let buttonCode = [];
let flag = Object.keys(data).some(menuUrl => {
// 按钮所在的页面和上级页是否存在
return !hasPage(menuUrl, menuJson) || Object.keys(data[menuUrl]).some(code => {
// 按钮code是否重复
let flag = buttonCode.includes(code);
if (flag) {
console.log(code, 'code重复了');
return flag;
}
// 按钮名称、是否受权限控制、是否增删改、跳转页面
// 是否有3个或者4个元素
flag = !Array.isArray(data[menuUrl][code]) || (data[menuUrl][code].length != 3 && data[menuUrl][code].length != 4);
if (flag) {
console.log(code, '按钮数据配置错误');
return flag;
}
// 如果是跳转按钮
if (data[menuUrl][code][2] == 0) {
// 是否配了跳转页面
flag = !data[menuUrl][code][3];
if (flag) {
console.log(code, '未配置跳转页面')
return;
}
// 按钮跳转的页面和上级页面是否存在
flag = !hasPage(data[menuUrl][code][3], menuJson);
if (flag) {
console.log(code, '页面不存在');
return flag;
}
}
return false;
});
});
return flag;
}
function createButtonJson(data, menuJson) {
return Object.keys(data).reduce((buttonJson, menuUrl) => {
const codeData = data[menuUrl];
const menuCode = menuJson.find(el => el.menuUrl == menuUrl).menuCode;
const codeJson = Object.keys(codeData).reduce((result, btnCode) => {
// 按钮名称、是否受权限控制、是否增删改、跳转页面
const [ menuName, isRight, buttonType, toUrl ] = codeData[btnCode];
const item = {
menuName,
menuCode: btnCode,
parentCode: menuCode,
menuType: 5,
isRight,
buttonType,
toUrl
};
result.push(item);
return result;
}, []);
return buttonJson.concat(codeJson);
}, [])
}
function createXls() { function createXls() {
if (checkData(menuData, 0)) return; if (checkMenuData(menuData, 0)) return;
return const menuJson = createMenuJson(menuData, '');
const data = createMenuJson(menuData, ''); if (checkButtonData(buttonData, menuJson)) return;
const jsonArray = data.map( item => { const buttonJson = createButtonJson(buttonData, menuJson);
// 按钮受权限控制时,跳转页面不受权限控制,并且跳转页面的关联code改成按钮code
// 按钮不受权限控制时,跳转页面受权限控制,并且按钮的关联code改成页面的code
buttonJson.forEach(btn => {
if (btn.buttonType == 0) {
menuJson.some(menu => {
if (menu.menuUrl == btn.toUrl) {
if (btn.isRight == 1) {
menu.isRight = 0;
menu.concatCode = btn.menuCode;
} else {
menu.isRight = 1;
btn.concatCode = menu.menuCode;
}
}
return menu.menuUrl == btn.toUrl;
})
}
})
// return
const jsonArray = [...menuJson, ...buttonJson].map( item => {
return { return {
'菜单名称': item.menuName, '菜单名称': item.menuName,
'菜单code': item.menuCode, '菜单code': item.menuCode,
'父菜单code': item.parentCode, '父菜单code': item.parentCode,
'菜单路径': item.menuUrl, '菜单路径': item.menuUrl || '',
'菜单类型(0菜单 5按钮)': item.type, '菜单类型(0菜单 5按钮)': item.menuType,
'icon_url': item.iconUrl, 'icon_url': item.iconUrl || '',
'是否控制权限,1控制 0否': item.isRight, '是否控制权限,1控制 0否': item.isRight,
'只有页面才有,用于菜单不需要独立权限控制,配置的是按钮的menu_code': '', '只有页面才有,用于菜单不需要独立权限控制,配置的是按钮的menu_code': item.concatCode || '',
'是否赠删改的按钮': item.isPageBtn '是否赠删改的按钮0:跳转 1:增删改 2:其他': typeof item.buttonType == 'number' ? item.buttonType : ''
} }
}); });
fs.writeFile(path.resolve(__dirname, './result.xlsx'), json2xls(jsonArray), 'binary', (err) => { fs.writeFile(path.resolve(__dirname, './result.xlsx'), json2xls(jsonArray), 'binary', (err) => {
...@@ -93,5 +191,3 @@ function createXls() { ...@@ -93,5 +191,3 @@ function createXls() {
}); });
} }
createXls(); createXls();
// console.log(createMenuJson(menuData, ''));
/* eslint-disable */ /* eslint-disable */
module.exports = [ module.exports = [
// 菜单名称、路径、是否分权、icon_url、code、父code // 菜单名称、路径、是否受权限控制、icon_url
{ {
menu: ['客户', '', 1], menu: ['客户', '', 1],
children: [ children: [
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment