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;
|