|
|
@@ -6,124 +6,125 @@ import ParentView from "@/components/ParentView";
|
|
|
import { toCamelCase } from "@/utils";
|
|
|
|
|
|
const permission = {
|
|
|
- state: {
|
|
|
- routes: [],
|
|
|
- addRoutes: [],
|
|
|
- sidebarRouters: [],
|
|
|
+ state: {
|
|
|
+ routes: [],
|
|
|
+ addRoutes: [],
|
|
|
+ sidebarRouters: [],
|
|
|
+ },
|
|
|
+ mutations: {
|
|
|
+ SET_ROUTES: (state, routes) => {
|
|
|
+ state.addRoutes = routes;
|
|
|
+ state.routes = constantRoutes.concat(routes);
|
|
|
},
|
|
|
- mutations: {
|
|
|
- SET_ROUTES: (state, routes) => {
|
|
|
- state.addRoutes = routes;
|
|
|
- state.routes = constantRoutes.concat(routes);
|
|
|
- },
|
|
|
- SET_DEFAULT_ROUTES: (state, routes) => {
|
|
|
- state.defaultRoutes = constantRoutes.concat(routes);
|
|
|
- },
|
|
|
- SET_TOPBAR_ROUTES: (state, routes) => {
|
|
|
- state.topbarRouters = routes;
|
|
|
- },
|
|
|
- SET_SIDEBAR_ROUTERS: (state, routes) => {
|
|
|
- state.sidebarRouters = routes;
|
|
|
- },
|
|
|
+ SET_DEFAULT_ROUTES: (state, routes) => {
|
|
|
+ state.defaultRoutes = constantRoutes.concat(routes);
|
|
|
},
|
|
|
- actions: {
|
|
|
- // 生成路由
|
|
|
- GenerateRoutes({ commit }) {
|
|
|
- return new Promise((resolve) => {
|
|
|
- // 向后端请求路由数据
|
|
|
- const params = { zone: 2 };
|
|
|
- getInfo(params).then((res) => {
|
|
|
- const sdata = JSON.parse(JSON.stringify(res.data.menus));
|
|
|
- const rdata = JSON.parse(JSON.stringify(res.data.menus));
|
|
|
- const sidebarRoutes = filterAsyncRouter(sdata);
|
|
|
- const rewriteRoutes = filterAsyncRouter(rdata, false, true);
|
|
|
- rewriteRoutes.push({ path: "*", redirect: "/404", hidden: true });
|
|
|
- commit("SET_ROUTES", rewriteRoutes);
|
|
|
- commit("SET_SIDEBAR_ROUTERS", constantRoutes.concat(sidebarRoutes));
|
|
|
- commit("SET_DEFAULT_ROUTES", sidebarRoutes);
|
|
|
- commit("SET_TOPBAR_ROUTES", sidebarRoutes);
|
|
|
- resolve(rewriteRoutes);
|
|
|
- });
|
|
|
- });
|
|
|
- },
|
|
|
+ SET_TOPBAR_ROUTES: (state, routes) => {
|
|
|
+ state.topbarRouters = routes;
|
|
|
},
|
|
|
+ SET_SIDEBAR_ROUTERS: (state, routes) => {
|
|
|
+ state.sidebarRouters = routes;
|
|
|
+ },
|
|
|
+ },
|
|
|
+ actions: {
|
|
|
+ // 生成路由
|
|
|
+ GenerateRoutes({ commit }) {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ // 向后端请求路由数据
|
|
|
+ const params = { zone: 2 };
|
|
|
+ getInfo(params).then((res) => {
|
|
|
+ const sdata = JSON.parse(JSON.stringify(res.data.menus));
|
|
|
+ const rdata = JSON.parse(JSON.stringify(res.data.menus));
|
|
|
+ const sidebarRoutes = filterAsyncRouter(sdata);
|
|
|
+ const rewriteRoutes = filterAsyncRouter(rdata, false, true);
|
|
|
+ rewriteRoutes.push({ path: "*", redirect: "/404", hidden: true });
|
|
|
+ commit("SET_ROUTES", rewriteRoutes);
|
|
|
+ commit("SET_SIDEBAR_ROUTERS", constantRoutes.concat(sidebarRoutes));
|
|
|
+ commit("SET_DEFAULT_ROUTES", sidebarRoutes);
|
|
|
+ commit("SET_TOPBAR_ROUTES", sidebarRoutes);
|
|
|
+ resolve(rewriteRoutes);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
// 遍历后台传来的路由字符串,转换为组件对象
|
|
|
function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
|
|
|
- return asyncRouterMap.filter((route) => {
|
|
|
- // 将 ruoyi 后端原有耦合前端的逻辑,迁移到此处
|
|
|
- // 处理 meta 属性
|
|
|
- route.meta = {
|
|
|
- title: route.name,
|
|
|
- icon: route.icon,
|
|
|
- activeMenu: route.activeMenu,
|
|
|
- id: route.id,
|
|
|
- noCache: !route.keepAlive,
|
|
|
- reportId: route.reportId,
|
|
|
- reportList: route.reportList,
|
|
|
- bpmnModelId: route.bpmnModelId,
|
|
|
- componentName: route.componentName,
|
|
|
- };
|
|
|
- // 路由地址转首字母大写驼峰,作为路由名称,适配keepAlive
|
|
|
- // route.name = toCamelCase(route.path, true)
|
|
|
- // 开始调用后端返回的组件名
|
|
|
- route.name = route.componentName;
|
|
|
- route.hidden = !route.visible;
|
|
|
- // 处理 component 属性
|
|
|
- if (route.children) {
|
|
|
- // 父节点
|
|
|
- route.component = route.parentId === 0 ? Layout : ParentView;
|
|
|
- // if (route.parentId === 0) {
|
|
|
- // route.component = Layout
|
|
|
- // } else {
|
|
|
- // route.component = ParentView
|
|
|
- // }
|
|
|
- } else {
|
|
|
- // 根节点
|
|
|
- route.component = loadView(route.component);
|
|
|
- }
|
|
|
+ return asyncRouterMap.filter((route) => {
|
|
|
+ // 将 ruoyi 后端原有耦合前端的逻辑,迁移到此处
|
|
|
+ // 处理 meta 属性
|
|
|
+ route.meta = {
|
|
|
+ title: route.name,
|
|
|
+ icon: route.icon,
|
|
|
+ activeMenu: route.activeMenu,
|
|
|
+ id: route.id,
|
|
|
+ noCache: !route.keepAlive,
|
|
|
+ reportId: route.reportId,
|
|
|
+ reportList: route.reportList,
|
|
|
+ bpmnModelId: route.bpmnModelId,
|
|
|
+ componentName: route.componentName,
|
|
|
+ queryManageId: route.queryManageId,
|
|
|
+ };
|
|
|
+ // 路由地址转首字母大写驼峰,作为路由名称,适配keepAlive
|
|
|
+ // route.name = toCamelCase(route.path, true)
|
|
|
+ // 开始调用后端返回的组件名
|
|
|
+ route.name = route.componentName;
|
|
|
+ route.hidden = !route.visible;
|
|
|
+ // 处理 component 属性
|
|
|
+ if (route.children) {
|
|
|
+ // 父节点
|
|
|
+ route.component = route.parentId === 0 ? Layout : ParentView;
|
|
|
+ // if (route.parentId === 0) {
|
|
|
+ // route.component = Layout
|
|
|
+ // } else {
|
|
|
+ // route.component = ParentView
|
|
|
+ // }
|
|
|
+ } else {
|
|
|
+ // 根节点
|
|
|
+ route.component = loadView(route.component);
|
|
|
+ }
|
|
|
|
|
|
- // filterChildren
|
|
|
- if (type && route.children) {
|
|
|
- route.children = filterChildren(route.children);
|
|
|
- }
|
|
|
- if (route.children != null && route.children && route.children.length) {
|
|
|
- route.children = filterAsyncRouter(route.children, route, type);
|
|
|
- } else {
|
|
|
- delete route["children"];
|
|
|
- }
|
|
|
- return true;
|
|
|
- });
|
|
|
+ // filterChildren
|
|
|
+ if (type && route.children) {
|
|
|
+ route.children = filterChildren(route.children);
|
|
|
+ }
|
|
|
+ if (route.children != null && route.children && route.children.length) {
|
|
|
+ route.children = filterAsyncRouter(route.children, route, type);
|
|
|
+ } else {
|
|
|
+ delete route["children"];
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
function filterChildren(childrenMap, lastRouter = false) {
|
|
|
- var children = [];
|
|
|
- childrenMap.forEach((el, index) => {
|
|
|
- if (el.children && el.children.length) {
|
|
|
- if (el.component === "ParentView" && !lastRouter) {
|
|
|
- el.children.forEach((c) => {
|
|
|
- c.path = el.path + "/" + c.path;
|
|
|
- if (c.children && c.children.length) {
|
|
|
- children = children.concat(filterChildren(c.children, c));
|
|
|
- return;
|
|
|
- }
|
|
|
- children.push(c);
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- if (lastRouter) {
|
|
|
- el.path = lastRouter.path + "/" + el.path;
|
|
|
- }
|
|
|
- children = children.concat(el);
|
|
|
- });
|
|
|
- return children;
|
|
|
+ var children = [];
|
|
|
+ childrenMap.forEach((el, index) => {
|
|
|
+ if (el.children && el.children.length) {
|
|
|
+ if (el.component === "ParentView" && !lastRouter) {
|
|
|
+ el.children.forEach((c) => {
|
|
|
+ c.path = el.path + "/" + c.path;
|
|
|
+ if (c.children && c.children.length) {
|
|
|
+ children = children.concat(filterChildren(c.children, c));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ children.push(c);
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (lastRouter) {
|
|
|
+ el.path = lastRouter.path + "/" + el.path;
|
|
|
+ }
|
|
|
+ children = children.concat(el);
|
|
|
+ });
|
|
|
+ return children;
|
|
|
}
|
|
|
|
|
|
export const loadView = (view) => {
|
|
|
- // 路由懒加载
|
|
|
- return (resolve) => require([`@/views/${view}`], resolve);
|
|
|
+ // 路由懒加载
|
|
|
+ return (resolve) => require([`@/views/${view}`], resolve);
|
|
|
};
|
|
|
|
|
|
export default permission;
|