import {
|
asyncRouterMap
|
} from '@/router'
|
import Vue from 'vue'
|
|
/**
|
*
|
* @param {*} router
|
* @param {*} authInfo
|
*/
|
function checkAuth(router, authInfo) {
|
// 判断当前路由在权限数组中是否存在
|
if (router.meta) {
|
const metaInfo = router.meta
|
if (!metaInfo.requiresAuth) {
|
return true
|
} else {
|
if (metaInfo.index === 0) {
|
return !!authInfo[metaInfo.type]
|
} else if (metaInfo.index === 1) {
|
if (authInfo[metaInfo.type]) {
|
return !!authInfo[metaInfo.type][metaInfo.subType]
|
}
|
return false
|
} else {
|
var typeAuth = authInfo[metaInfo.type]
|
for (let index = 0; index < metaInfo.subType.length; index++) {
|
const field = metaInfo.subType[index]
|
typeAuth = typeAuth[field]
|
if (typeAuth && metaInfo.subType.length - 1 === index) {
|
return true
|
} else if (!typeAuth) {
|
return false
|
}
|
}
|
}
|
}
|
}
|
return true
|
}
|
|
/**
|
*
|
* @param {*} routers
|
* @param {*} authInfo
|
*/
|
const filterAsyncRouter = function(routers, authInfo) {
|
const res = []
|
routers.forEach(router => {
|
const tmp = {
|
...router
|
}
|
if (checkAuth(tmp, authInfo)) {
|
if (tmp.children) {
|
tmp.children = filterAsyncRouter(tmp.children, authInfo)
|
}
|
res.push(tmp)
|
}
|
})
|
return res
|
}
|
|
const permission = {
|
state: {
|
addRouters: [],
|
crmRouters: {
|
name: 'crm',
|
children: []
|
},
|
biRouters: {
|
name: 'bi',
|
children: []
|
},
|
manageRouters: {
|
name: 'manager',
|
children: []
|
},
|
oaRouters: {
|
name: 'oa',
|
children: []
|
}
|
},
|
mutations: {
|
SET_ROUTERS: (state, routers) => {
|
state.addRouters = routers
|
for (let index = 0; index < routers.length; index++) {
|
const element = routers[index]
|
if (element.name === 'oa') {
|
state.oaRouters = element
|
} else if (element.name === 'crm') {
|
state.crmRouters = element
|
} else if (element.name === 'bi') {
|
state.biRouters = element
|
} else if (element.name === 'manager') {
|
state.manageRouters = element
|
}
|
}
|
},
|
|
/**
|
* 客户管理待办消息数
|
*/
|
SET_CRMROUTERSNUM: (state, num) => {
|
const messageItem = state.crmRouters.children[1]
|
messageItem.meta.num = num
|
Vue.set(state.crmRouters.children, 1, messageItem)
|
}
|
},
|
actions: {
|
GenerateRoutes({
|
commit
|
}, data) {
|
return new Promise(resolve => {
|
const accessedRouters = filterAsyncRouter(asyncRouterMap, data)
|
let redirect = ''
|
for (let index = 0; index < accessedRouters.length; index++) {
|
const element = accessedRouters[index]
|
if (element.children && element.children.length > 0) {
|
element.redirect = element.path + '/' + element.children[0].path
|
}
|
|
// 获取跳转
|
if (element.redirect && !redirect) {
|
redirect = element.redirect
|
}
|
}
|
if (redirect) {
|
accessedRouters.push({
|
path: '/',
|
redirect: redirect,
|
hidden: true
|
})
|
}
|
commit('SET_ROUTERS', accessedRouters)
|
resolve()
|
})
|
}
|
}
|
}
|
|
export default permission
|