import { constantRoutes } from "@/router"; import { getRouters } from "@/api/menu"; import Layout from "@/layout/index"; import RouteView from "@/layout/RouteView"; const permission = { state: { routes: [], addRoutes: [] }, mutations: { SET_ROUTES: (state, routes) => { state.addRoutes = routes; state.routes = constantRoutes.concat(routes); } }, actions: { // 生成路由 GenerateRoutes({ commit }) { return new Promise(resolve => { // 向后端请求路由数据 getRouters().then(res => { const accessedRoutes = filterAsyncRouter(res.data); accessedRoutes.push({ path: "*", redirect: "/404", hidden: true }); commit("SET_ROUTES", accessedRoutes); resolve(accessedRoutes); }); }); } } }; // 遍历后台传来的路由字符串,转换为组件对象 function filterAsyncRouter(asyncRouterMap) { return asyncRouterMap.filter(route => { if (route.component) { // Layout组件特殊处理 if (route.component === "Layout") { route.component = Layout; } else if (route.component === "RouteView") { route.component = RouteView; } else { route.component = loadView(route.component); } } if (route.children != null && route.children && route.children.length) { route.children = filterAsyncRouter(route.children); } return true; }); } // export const loadView = (view) => { // 路由懒加载 // return () => import(`@/views/${view}`) // } export const loadView = view => { // 路由懒加载 return resolve => require([`@/views/${view}`], resolve); }; export default permission;