fix:项目初始化
This commit is contained in:
Executable
+157
@@ -0,0 +1,157 @@
|
||||
// import { getRoleMenuList } from '@/api/account/role'
|
||||
import {
|
||||
getAuth
|
||||
} from '@/api/account/roleList'
|
||||
import {
|
||||
constantRoutes
|
||||
} from '@/router'
|
||||
import {
|
||||
getRoleId
|
||||
} from '@/utils/auth' // get roleId from cookie
|
||||
import {
|
||||
assemblyRoute
|
||||
} from '@/utils/serviceRoute'
|
||||
// import { reject } from 'q'
|
||||
|
||||
import {
|
||||
serverRouter, filterRouts
|
||||
} from '@/utils/roleTreeList'
|
||||
import { getFilterRoutes } from '@/utils/get-page-title'
|
||||
|
||||
/**
|
||||
* Use meta.role to determine if the current user has permission
|
||||
* @param roles
|
||||
* @param route
|
||||
*/
|
||||
function hasPermission (roles, route) {
|
||||
if (route.meta && route.meta.roles) {
|
||||
return roles.some(role => route.meta.roles.includes(role))
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 组装路由
|
||||
* @param {Obejct} params
|
||||
*/
|
||||
function assemblyRouteList (params) {
|
||||
const router = []
|
||||
params.forEach(e => {
|
||||
if (assemblyRoute(e.name)) {
|
||||
let e_new = {
|
||||
path: e.path,
|
||||
name: e.name,
|
||||
meta: {
|
||||
...e.meta,
|
||||
...{
|
||||
apiArr: e.api_url || []
|
||||
}
|
||||
},
|
||||
component: assemblyRoute(e.name)
|
||||
}
|
||||
if (e.children && e.children.length > 0) {
|
||||
e_new = Object.assign({}, e_new, {
|
||||
children: assemblyRouteList(e.children)
|
||||
})
|
||||
}
|
||||
if (e.redirect) {
|
||||
e_new = Object.assign({}, e_new, {
|
||||
redirect: e.redirect
|
||||
})
|
||||
}
|
||||
if (e.alwaysShow) {
|
||||
e_new = Object.assign({}, e_new, {
|
||||
alwaysShow: e.alwaysShow
|
||||
})
|
||||
}
|
||||
if (e.hidden) {
|
||||
e_new = Object.assign({}, e_new, {
|
||||
hidden: true
|
||||
})
|
||||
}
|
||||
router.push(e_new)
|
||||
}
|
||||
})
|
||||
return router
|
||||
}
|
||||
/**
|
||||
* Filter asynchronous routing tables by recursion
|
||||
* @param routes asyncRoutes
|
||||
* @param roles
|
||||
*/
|
||||
export function filterAsyncRoutes (routes, roles) {
|
||||
const res = []
|
||||
routes.forEach(route => {
|
||||
const tmp = {
|
||||
...route
|
||||
}
|
||||
if (hasPermission(roles, tmp)) {
|
||||
if (tmp.children) {
|
||||
tmp.children = filterAsyncRoutes(tmp.children, roles)
|
||||
}
|
||||
res.push(tmp)
|
||||
}
|
||||
})
|
||||
return res
|
||||
}
|
||||
const state = {
|
||||
routes: [],
|
||||
addRoutes: []
|
||||
}
|
||||
|
||||
const mutations = {
|
||||
SET_ROUTES: (state, routes) => {
|
||||
// console.log('原有路由:')
|
||||
// console.log(constantRoutes)
|
||||
// console.log('服务端路由:')
|
||||
// console.log(routes)
|
||||
state.addRoutes = routes
|
||||
state.routes = constantRoutes.concat(routes)
|
||||
// console.log('正式路由:')
|
||||
// console.log(state.routes)
|
||||
}
|
||||
}
|
||||
const actions = {
|
||||
resetRouter ({ commit }) {
|
||||
commit('SET_ROUTES', [])
|
||||
},
|
||||
generateRoutes ({ commit }, { next, NProgress }) {
|
||||
return new Promise(resolve => {
|
||||
// const a = assemblyRouteList(serverRouter)
|
||||
// console.log(a)
|
||||
// a.push({
|
||||
// path: '*',
|
||||
// redirect: '/404',
|
||||
// hidden: true
|
||||
// })
|
||||
// const newFilterRouts = getFilterRoutes(a, filterRouts)
|
||||
// console.log(newFilterRouts)
|
||||
|
||||
// commit('SET_ROUTES', newFilterRouts)
|
||||
// // commit('SET_ROUTES', a)
|
||||
// resolve(newFilterRouts)
|
||||
const r = parseInt(getRoleId())
|
||||
getAuth({ id: r }).then(res => {
|
||||
//
|
||||
// 组装路由 res 是我服务端存的动态路由表,
|
||||
// 经过这个方法 这个方法组件导入进去,然后设置SET_ROUTES 就生成了导航
|
||||
const a = assemblyRouteList(res.data.router)
|
||||
a.push({
|
||||
path: '*',
|
||||
redirect: '/404',
|
||||
hidden: true
|
||||
})
|
||||
const newFilterRouts = getFilterRoutes(a, filterRouts)
|
||||
commit('SET_ROUTES', newFilterRouts)
|
||||
resolve(newFilterRouts)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state,
|
||||
mutations,
|
||||
actions
|
||||
}
|
||||
Reference in New Issue
Block a user