feat add routes mock

This commit is contained in:
Revantant
2019-07-11 14:45:58 +08:00
parent 6a322c9def
commit e671cba3b0
9 changed files with 87 additions and 558 deletions

8
src/api/route.js Normal file
View File

@@ -0,0 +1,8 @@
import request from '@/utils/request'
export function getRoutes() {
return request({
url: '/routes',
method: 'get'
})
}

View File

@@ -28,9 +28,9 @@ import * as filters from './filters' // global filters
* please remove it before going online! ! !
*/
import { mockXHR } from '../mock'
if (process.env.NODE_ENV === 'production') {
mockXHR()
}
// if (process.env.NODE_ENV === 'production') {
mockXHR()
// }
Vue.use(Element, {
size: Cookies.get('size') || 'medium' // set element-ui default size

View File

@@ -1,5 +1,6 @@
import { asyncRoutes, constantRoutes } from '@/router'
import { constantRoutes } from '@/router'
import { getRoutes } from '@/api/route'
// const _import = path => import('@/views/' + path)
/**
* Use meta.role to determine if the current user has permission
* @param roles
@@ -18,6 +19,21 @@ function hasPermission(roles, route) {
* @param routes asyncRoutes
* @param roles
*/
export function mapAsyncRoutes(routes) {
return routes.map(route => {
const tmp = { ...route }
if (typeof tmp.component === 'string') {
const path = tmp.component
tmp.component = () => import(`@/${path}`)
}
if (tmp.children && tmp.children.length) {
tmp.children = mapAsyncRoutes(tmp.children)
}
return tmp
})
}
export function filterAsyncRoutes(routes, roles) {
const res = []
@@ -50,13 +66,17 @@ const actions = {
generateRoutes({ commit }, roles) {
return new Promise(resolve => {
let accessedRoutes
if (roles.includes('admin')) {
accessedRoutes = asyncRoutes || []
} else {
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
}
commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes)
getRoutes().then(res => {
const asyncRoutes = res.data
if (roles.includes('admin')) {
accessedRoutes = mapAsyncRoutes(asyncRoutes || [])
} else {
accessedRoutes = mapAsyncRoutes(filterAsyncRoutes(asyncRoutes, roles))
debugger
}
commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes)
})
})
}
}

View File

@@ -1,3 +1,4 @@
@import "./variables.scss";
#app {
.main-container {