import { asyncRoutes, constantRoutes } from '@/router' import Layout from '@/layout' import { getDefinitionMenu } from '@/api/wms-auth' import store from '@/store' import router from '@/router' // 身份权限的页面标识(角色等) const AbpIdentity_mark = 'AbpIdentityMark' const state = { routes: [],//菜单 roles: [],//当前用户权限 addRoutes: [], tablesName:null,//所有的表名 } const mutations = { SET_ROUTES: (state, routes) => { state.addRoutes = routes state.routes = constantRoutes.concat(routes) router.addRoutes(routes) }, // 设置权限(v-permission) SET_ROLES: (state, roles) => { state.roles = roles }, SET_TABLESNAME: (state, data) => { state.tablesName = data }, SET_AbpIdentity: (state, data) => { state.abpIdentityName = data } } /** * 静态路由懒加载 * @param view 格式必须为 xxx/xxx 开头不要加斜杠 * @returns */ export const loadView = (view) => { return (resolve) => require([`@/views/menuList/${view}`], resolve) } /** * 把从后端查询的菜单数据拼装成路由格式的数据 * @param routes * @param data 后端返回的菜单数据 */ export function generaMenu(routes, data, first) { // 不显示的菜单配置隐藏 let _noShowMenus = localStorage.getItem('menuHiddenConfig').split(',') data.forEach(item => { let _item = { path: item.path, component: loadView(item.name), hidden: _noShowMenus.indexOf(item.name) >= 0, // 状态为0的隐藏 name: item.name, meta: item.meta } let menu = _item // if(first && item.component == '@/layout'){ if(first){ menu = { path: '/', component: Layout, redirect: '/' + item.name, // redirect: 'noRedirect', } if(item.children && item.children.length > 0){ menu.meta=item.meta }else{ menu.children = [] menu.children.push(_item) } } // 一级菜单 二级菜单 特定属性 // if (item.component == '@/layout' || item.component == 'index') { // menu.alwaysShow = true // menu.redirect = 'noRedirect' // } // if (item.sort < 99) { // menu.level = 1 // } else if (item.sort > 99 && item.sort < 9999) { // menu.level = 2 // } else { // menu.level = 3 // } // iframe页面处理 // if (item.permission.indexOf('Report') > -1) { // // delete menu.component // menu.iframeComponent = item.component === '@/layout' ? Layout : loadView(item.component) // menu.hasOpen = false // 是否打开过,默认false // } if (item.children && item.children.length > 0) { if(!menu.children)menu.children = [] generaMenu(menu.children, item.children) } // if (item.permission == 'skip' && item.children.length == 0) { // } routes.push(menu) }) return routes } // todo:接口返回的层级菜单,与查重后最终显示的菜单数组做查重及组合处理 export function initTreeMenusHandle(tree, list,first) { let _res = [] tree.forEach(item=>{ if(list.indexOf(item.name) >= 0 || item.name.indexOf(AbpIdentity_mark) >= 0){ if(item.name.indexOf(AbpIdentity_mark) >= 0){ if(item.name == AbpIdentity_mark){ item.title = '系统设置管理' }else{ let _name = item.name.substring(AbpIdentity_mark.length,item.name.length) item.title = store.getters.columZHList[_name] || _name } }else{ item.title = store.getters.columZHList[item.name] || item.name } item.path = '/'+item.name item.meta={ title: item.title, icon: item.icon || 'svg_default', // roles: item.permission, outerFirst:first } // if(first)item.component = '@/layout' if (item.children && item.children.length > 0) { item.children = initTreeMenusHandle(item.children,list) } _res.push(item) } }) return _res } const actions = { // 设置权限 setUserRoles({commit},data){ commit('SET_ROLES', data) }, getApiColumnsNames({ commit }, userId) { return new Promise(resolve => { getDefinitionMenu(true).then(res => { let roles_arr = [] for(let r in res.auth.grantedPolicies){ if(res.auth.grantedPolicies[r])roles_arr.push(r) } commit('SET_ROLES', roles_arr) let _allConfig = res.auth.grantedPolicies;//所有配置 let _menuList = []//接口获取所有的菜单 let _AbpIdentity = []//接口获取所有的身份配置信息数据 for(let item in _allConfig){ let point_number = item.split('.').length - 1 // 只选择配置项中的数据 if(point_number == 1 && item.substring(0,item.indexOf('.')) == localStorage.getItem('appClientScope')){ _menuList.push(item.substring(item.indexOf('.') + 1,item.length)) } // 身份配置信息数据(用户、角色) if(point_number == 1 && item.substring(0,item.indexOf('.')) == 'AbpIdentity'){ _AbpIdentity.push(AbpIdentity_mark + item.substring(item.indexOf('.') + 1,item.length)) } } // 存储所有的表名 commit('SET_TABLESNAME', _menuList) // 存储身份标识 commit('SET_AbpIdentity', _AbpIdentity) // 数据模拟,todo-new:接口获取 let _treeMenusAll = null//树形菜单 // _treeMenusAll = [ // {name:"aaaaaaa"}, // { // name:"ExportCustomUserSetting1", // children:[ // {name:'ExportCustomUserSetting'}, // {name:'OutgoingDataHistory' // ,children:[ // {name:"OutgoingDataHistory"}, // {name:'IncomingData',children:[ // {name:'IncomingDataHistory'}, // {name:'IncomingData'}, // {name:'333333'}, // ]}, // {name:'eee1111-bbb',children:[ // {name:'IncomingDataHistory'}, // {name:'MessageReceive'}, // ]}, // ]}, // {name:'eee222'}, // {name:'eee333'}, // {name:'eee444'}, // {name:'eee555'}, // ] // }, // {name:"MesProductL7PartsNote"}, // {name:"MessageReceive"}, // {name:"OutgoingData"}, // {name:"AsnDet"}, // {name:"AsnMstr"}, // {name:"Bom"}, // {name:"CustPart"}, // {name:"Cust"}, // {name:"Inventory"}, // {name:"Loc"}, // {name:"Part"}, // {name:"PoDet"}, // {name:"PoMstr"}, // {name:"PrhHist"}, // {name:"ProdLine"}, // {name:"ReceiptDet"}, // {name:"ReceiptMstr"}, // {name:"ReturnDet"}, // {name:"ReturnMstr"}, // {name:"SodDet"}, // {name:"VendPart"}, // {name:"Vend"}, // ] let _menuAndAbpList = [..._menuList,..._AbpIdentity]// 包含配置项中的业务菜单+身份权限菜单(角色用户等) let _initTreeMenus = []//转义为树状结构 if(_treeMenusAll && _treeMenusAll.length > 0){ _initTreeMenus = initTreeMenusHandle(_treeMenusAll,_menuAndAbpList,true) }else{ let _data = [] // 自定义系统设置管理分级 if(_AbpIdentity && _AbpIdentity.length > 0){ _data.push({name:AbpIdentity_mark,children:[]}) } for(let i in _menuAndAbpList){ if(_menuAndAbpList[i].indexOf(AbpIdentity_mark) >= 0){ _data[0].children.push({ name:_menuAndAbpList[i] }) } else{ _data.push({name:_menuAndAbpList[i]}) } } _initTreeMenus = initTreeMenusHandle(_data,_menuAndAbpList,true) } // 最后查重+层级查重后的菜单 let _initEndMenus = generaMenu(asyncRoutes, _initTreeMenus,true) let accessedRoutes = _initEndMenus commit('SET_ROUTES', accessedRoutes) resolve(accessedRoutes) }).catch(err => { console.log(err) }) }) }, } export default { namespaced: true, state, mutations, actions }