需要修改的文件只有两个: 修改文件\src\router\index.js 和 修改文件 src\store\modules\permission.js 接口可以放在user.js里面
1. \src\router\index.js 修改为
export const asyncRoutes = [
{ path: '*', redirect: '/404', hidden: true }
]2. src\store\modules\permission.js修改为:
import { asyncRoutes, constantRoutes } from '@/router'
import { getAuthMenu } from '@/api/user'
import Layout from '@/layout'
/**
* 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 routes
*/
export function generaMenu(routes, data) {
data.forEach(item => {
// alert(JSON.stringify(item))
const menu = {
path: item.path === '#' ? item.id + '_key' : item.path,
component: item.component === '#' ? Layout : () => import(`@/views${item.component}`),
hidden: item.hidden,
redirect: item.redirect,
children: [],
name: 'menu_' + item.id,
meta: item.meta
// meta: { title: item.name, id: item.id, roles: ['admin'] }
}
if (item.children) {
generaMenu(menu.children, item.children)
}
routes.push(menu)
})
}
// ******************此处为增加部分结束
/**
* 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) => {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
}
}
const actions = {
generateRoutes({ commit }, roles) {
return new Promise(resolve => {
const loadMenuData = []
// 先查询后台并返回左侧菜单数据并把数据添加到路由 ****************此处为修改部分
getAuthMenu(state.token).then(response => {
let data = response
if (response.code !== 20000) {
alert(JSON.stringify('菜单数据加载异常'))
// throw new Error('菜单数据加载异常')
} else {
data = response.data
Object.assign(loadMenuData, data)
const tempAsyncRoutes = Object.assign([], asyncRoutes)
// tempAsyncRoutes = asyncRoutes
generaMenu(tempAsyncRoutes, loadMenuData)
let accessedRoutes
if (roles.includes('admin')) {
accessedRoutes = tempAsyncRoutes || []
} else {
accessedRoutes = filterAsyncRoutes(tempAsyncRoutes, roles)
}
commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes)
}
// generaMenu(asyncRoutes, data)
}).catch(error => {
console.log(error)
})
})
}
}
export default {
namespaced: true,
state,
mutations,
actions
}

出来了;
有的时候点击路由会报错

这个的问题是
错误的写法: () => import(`@/views${item.component}`)
正确的写法:(resolve) => require([`@/views${item.component}`], resolve
修改后就不报错了
版权声明:本文为sunlizhen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。