vue根据权限动态生成路由
javascript">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