埃驰前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

259 lines
8.2 KiB

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
}