vue根据权限动态生成路由
import store from '@/store'
import router from '@/router'
import axios from './request'
const data = [
{
path: '/systemManagement',
name: 'systemManagement',
component: () => import('@/views/Index/subMenus.vue'),
meta: { title: '系统管理', icon: '', id: 90000, seo: 0, parentId: 0, menu: '主菜单' }
},
{
path: '/personalSetting',
name: 'personalSetting',
component: () => import('@/views/SystemManagement/BasicSetting/PersonalSetting.vue'),
meta: { title: '个人设置', icon: '', id: 91300, seo: 0, parentId: 90000, menu: '基本设置' }
}
}
]
const auth = {
SYSTEMMODULE: 90000,
SYSTEMMOUULE_PERSONAL_SETTINGS_CHANGEPWD: 91301
}
export function checkAuth(authId) {
return store.getters.getPermissionList.indexOf(authId) > -1
}
export function generateRoute() {
return new Promise((resolve, reject) => {
const routeNames = []
axios
.get('/******(查询权限id列表)', { headers: { closedLoading: true } })
.then(res => {
queryPermission(res.data).forEach(item => {
router.addRoute(item)
routeNames.push(item.name)
})
store.commit('setRoutes', routeNames)
resolve()
})
.catch(error => {
reject(error)
})
})
}
export function deleteRoute() {
store.getters.getRoutes.forEach(route => {
router.removeRoute(route)
})
store.commit('removeRoutes')
store.commit('removePermissionList')
}
function queryPermission(permission) {
const routes = querySubPermission(data, permission)
store.commit('setPermissionList', queryAuth(permission))
return routes
}
function querySubPermission(subPermission, permission) {
const permissionList = []
subPermission.forEach(item => {
if (permission.indexOf(item.meta.id.toString()) > -1) {
permissionList.push(item)
}
})
permissionList.sort((x, y) => {
if (x.meta.seo < y.meta.seo) {
return 1
}
if (x.meta.seo > y.meta.seo) {
return -1
}
return 0
})
const list = []
permissionList.forEach(item => {
const route = {
name: item.name,
path: item.path,
meta: item.meta,
component: item.component
}
if ('children' in item) {
route.children = querySubPermission(item.children, permission)
}
const menu = {
name: item.name,
path: item.path,
meta: item.meta
}
store.commit('pushMenus', menu)
list.push(route)
})
return list
}
export function queryMenus(id) {
const menus = []
store.getters.getMenus.forEach(menu => {
if (menu.meta.parentId === id && (!('hidden' in menu.meta) || !menu.meta.hidden)) {
menus.push(menu)
}
})
menus.sort((x, y) => {
if (x.meta.seo < y.meta.seo) {
return 1
}
if (x.meta.seo > y.meta.seo) {
return -1
}
return 0
})
const result = []
const groupMenu = {}
menus.forEach(menu => {
const meta = menu.meta
const subArray = groupMenu[meta.menu] ? groupMenu[meta.menu] : []
if (subArray.length === 0) {
groupMenu[meta.menu] = subArray
result.push({ title: meta.menu, sub: subArray })
}
subArray.push(menu)
})
return result
}
function queryAuth(permission) {
const authList = []
for (const key in auth) {
if (permission.indexOf(auth[key].toString()) > -1) {
authList.push(auth[key])
}
}
return authList
}
export default auth