UNPKG

enc-framework

Version:

enc-framework 核心组件.

233 lines (213 loc) 5.76 kB
/** * 解析权限 */ 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