{
"code": 0,
"message": "success",
"menus": [{
"id": "1",
"name": "myinfo",
"path": "/myinfo",
"component": "views/myinfo/index.vue",
"meta": {
"title": "个人中心"
}
},
{
"id": "2",
"name": "farm",
"path": "/farm",
"component": "views/farm/index.vue",
"meta": {
"title": "农场"
},
"children": [{
"id": "7",
"name": "land",
"path": "/farm/land",
"component": "views/farm/land/index.vue",
"meta": {
"title": "土地"
}
},
]
},
{
"id": "3",
"name": "person",
"path": "/person",
"component": "views/person/index.vue",
"meta": {
"title": "人员"
}
},
]
}
module.exports = file => () => {
return import('@/' + file)
}
const _import = require('./_import')
export const asyncRouterHandle = asyncRouter => {
asyncRouter.map(item => {
if (item.component) {
item.component = _import(item.component)
} else {
delete item['component']
}
if (item.children) {
asyncRouterHandle(item.children)
}
})
console.log('asyncRouter', asyncRouter)
}
const originalPush = Router.prototype.push
Router.prototype.push = function push (location) {
return originalPush.call(this, location).catch(err => err)
}
const baseRouters = [
{
path: '/',
redirect: '/login'
},
{
path: '/login',
name: 'Login',
component: () => import('@/views/login/index')
}
]
const createRouter = () =>
new Router({
routes: baseRouters
})
const router = createRouter()
export default router
import { asyncRouterHandle } from '@/utils/asyncRouter'
import { login } from '@/api/login'
const routerList = []
const formatRouter = routes => {
routes &&
routes.map(item => {
if (
(!item.children || item.children.every(ch => ch.hidden)) &&
item.name !== '404'
) {
routerList.push({ label: item.meta.title, value: item.name })
}
if (item.children && item.children.length > 0) {
formatRouter(item.children)
}
})
}
export const router = {
namespaced: true,
state: {
asyncRouters: [],
routerList: routerList
},
mutations: {
setRouterList (state, routerList) {
state.routerList = routerList
},
setAsyncRouter (state, asyncRouters) {
state.asyncRouters = asyncRouters
}
},
actions: {
async SetAsyncRouter ({ commit }) {
const baseRouter = [
{
path: '/layout',
name: 'layout',
component: 'views/layout/index.vue',
meta: {
title: '底层layout'
},
children: []
}
]
const asyncRouterRes = await login()
const asyncRouter = asyncRouterRes.data && asyncRouterRes.data.menus
asyncRouter.push({
path: '404',
name: '404',
hidden: true,
meta: {
title: '迷路了*。*'
},
component: 'view/error/index.vue'
})
formatRouter(asyncRouter)
baseRouter[0].children = asyncRouter
baseRouter.push({
path: '*',
redirect: '/layout/404'
})
asyncRouterHandle(baseRouter)
commit('setAsyncRouter', baseRouter)
commit('setRouterList', routerList)
return true
}
},
getters: {
asyncRouters (state) {
return state.asyncRouters
},
routerList (state) {
return state.routerList
},
defaultRouter (state) {
return state.defaultRouter
}
}
}