enc-framework
Version:
enc-framework 核心组件.
233 lines (213 loc) • 5.76 kB
JavaScript
/**
* 解析权限
*/
function parsePermissions(resources) {
let permissionContext = {
permissions: [],
pages: []
};
let menus = convertMenus(permissionContext, resources);
permissionContext.menus = menus;
return permissionContext;
}
/**
* 转换菜单集合
*/
function convertMenus(permissionContext, resources) {
if (!resources || resources.length == 0) {
return [];
}
let menus = [];
let menu = null;
// 循环权限数组
let resource = null;
for (var i = 0; i < resources.length; i++) {
resource = resources[i];
menu = convertMenu(permissionContext, resource);
if (!menu) {
continue;
}
menus.push(menu);
}
// 返回菜单
return menus;
}
/**
* 转换菜单
*/
function convertMenu(permissionContext, resource) {
if (!resource) {
return null;
}
// 菜单对象
let menu = {
// 菜单ID
menuId: resource.id,
// 菜单名称
menuName: resource.nodeName,
// 菜单图标
menuIcon: resource.resourceIcon,
// 菜单路径
menuPath: resource.resourcePath || "/menu_" + resource.id,
// 菜单编码
menuCode: resource.resourceCode,
// 父菜单ID
parentMenuId: resource.parentNodeId
};
if (resource.menuNodeList && resource.menuNodeList.length > 0) {
menu.children = convertMenus(permissionContext, resource.menuNodeList);
} else {
// 添加权限
permissionContext.permissions.push({
path: menu.menuPath,
menuPath: menu.menuPath,
type: 1
});
}
if (resource.pageNodeList) {
// 转换菜单页面数据
convertPages(permissionContext, menu, resource.pageNodeList);
}
return menu;
}
/**
* 转换页面集合
*/
function convertPages(permissionContext, menu, pageNodeList) {
if (!pageNodeList || pageNodeList.length == 0) {
return;
}
for (var i = 0; i < pageNodeList.length; i++) {
convertPage(permissionContext, menu, pageNodeList[i]);
}
}
/**
* 转换页面
*/
function convertPage(permissionContext, menu, pageNode) {
if (!pageNode) {
return null;
}
// 菜单页面对象
let page = {
// 菜单页面ID
pageId: pageNode.id,
// 菜单页面名称
pageName: pageNode.nodeName,
// 菜单页面图标
pageIcon: pageNode.resourceIcon,
pagePath: pageNode.resourcePath || "/page_" + pageNode.id,
// 菜单页面路径
menuPath: menu.menuPath,
// 菜单页面编码
menuCode: menu.menuCode
};
// 添加页面
permissionContext.pages.push(page);
// 添加权限
permissionContext.permissions.push({
path: page.pagePath,
menuPath: page.menuPath,
type: 3
});
}
/**
* 递归转换路由
*/
function convertToButtonCodes(resources) {
if (!resources || resources.length == 0) {
return [];
}
// 按钮id集合
var buttonCodes = [];
var resource = null;
for (var i = 0; i < resources.length; i++) {
resource = resources[i];
var btnNodeList = resource.btnNodeList;
if (btnNodeList && btnNodeList.length > 0) {
for (var id in btnNodeList) {
buttonCodes.push(btnNodeList[id].resourceCode);
}
}
var menuNodeList = resource.menuNodeList;
if (resource.menuNodeList && resource.menuNodeList.length > 0) {
buttonCodes = buttonCodes.concat(convertToButtonCodes(menuNodeList));
}
}
//返回路由
return buttonCodes;
}
// 是否存在
function isInArray(arr, value) {
for (var i = 0; i < arr.length; i++) {
if (value === arr[i]) {
return true;
}
}
return false;
}
function checkPermission(permissions, paths) {
return getPermission(permissions, paths) != null;
}
function getPermission(permissions, paths) {
for (var i = 0; i < permissions.length; i++) {
let permission = permissions[i];
if (isInArray(paths,permission.path)) {
return permission;
}
}
return null;
}
// 权限
const permission = {
namespaced: true,
// 状态信息
state: {
// 权限集合
permissions: null,
// 资源集合
resouces: null,
// 菜单集合
menus: null,
buttonCodes: []
},
// 操作方法
mutations: {
// 设置权限信息
savePermissions: (state, resouces) => {
//保留资源
state.resouces = resouces;
// 解析权限
let permissionContext = parsePermissions(resouces);
state.permissions = permissionContext.permissions;
state.menus = permissionContext.menus;
state.pages = permissionContext.pages;
},
saveButtonCodes: (state, buttonCodes) => {
state.buttonCodes = buttonCodes;
}
},
//任意异步操作
actions: {
// 加载路由集合
savePermissions({
commit
}, resouces) {
commit('savePermissions', resouces);
commit('saveButtonCodes', convertToButtonCodes(resouces));
},
// 检测权限
checkPermission({
state
}, paths) {
return checkPermission(state.permissions, paths);
},
// 获取权限
getPermission({
state
}, paths) {
return getPermission(state.permissions, paths);
}
}
}
export default permission