push
This commit is contained in:
136
lib/saas/store/modules/route.ts
Normal file
136
lib/saas/store/modules/route.ts
Normal file
@@ -0,0 +1,136 @@
|
||||
|
||||
import { defineStore } from 'pinia';
|
||||
import { RouteMenu } from '/nerv-base/router/helper/menu-helper';
|
||||
import { ModuleMenu } from '/nerv-base/router/types';
|
||||
import { appConfigStore } from '/nerv-base/store/modules/app-config';
|
||||
import { transformRouteToMenu } from '/nerv-base/router/helper/route-helper';
|
||||
import { NSAxios } from '/nerv-lib/util/http/axios';
|
||||
interface RouteState {
|
||||
route: Recordable[];
|
||||
routeModule: RouteMenu[];
|
||||
routeModuleObject: Recordable;
|
||||
}
|
||||
export const useRouteStore = defineStore({
|
||||
id: 'route',
|
||||
state: (): RouteState => {
|
||||
return { route: [], routeModule: [], routeModuleObject: {} };
|
||||
},
|
||||
getters: {},
|
||||
actions: {
|
||||
async getRouteModule() {
|
||||
const initList = [];
|
||||
this.route.forEach((item) => {
|
||||
if (item.name !== 'root') {
|
||||
initList.push(transformRouteToMenu(item));
|
||||
}
|
||||
});
|
||||
this.dealNoChildrenMenu(initList);
|
||||
this.routeModule = initList;
|
||||
return this.routeModule;
|
||||
},
|
||||
async setRoute(route: Recordable[]) {
|
||||
this.route = route;
|
||||
await this.getRouteModule();
|
||||
},
|
||||
/**
|
||||
* 判断菜单是否是noChildrenMenu
|
||||
*
|
||||
*/
|
||||
dealNoChildrenMenu(item: any) {
|
||||
item.forEach((sitem: any) => {
|
||||
if (
|
||||
Object.prototype.toString.call(sitem.menus) === '[object Array]' &&
|
||||
sitem.menus.length !== 0
|
||||
) {
|
||||
if (sitem.menus.findIndex((x) => x.type === 'menus') === -1) {
|
||||
sitem.type = 'noChildrenMenu';
|
||||
} else {
|
||||
this.dealNoChildrenMenu(sitem.menus);
|
||||
}
|
||||
} else {
|
||||
if (sitem.route?.meta?.hideChildren) {
|
||||
sitem.type = 'noChildrenMenu';
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 同步菜单修改到路由
|
||||
*/
|
||||
syncRoute() {
|
||||
const appConfig = appConfigStore();
|
||||
const routeModuleObject: Recordable = {};
|
||||
function loop(routeModule: ModuleMenu[]) {
|
||||
for (let i = 0, j = routeModule.length; i < j; i++) {
|
||||
routeModuleObject[routeModule[i].code] = routeModule[i];
|
||||
routeModule[i].menus && loop(routeModule[i].menus);
|
||||
}
|
||||
}
|
||||
loop(this.routeModule);
|
||||
this.routeModuleObject = routeModuleObject;
|
||||
function loopRoute(routeList) {
|
||||
for (let i = 0, j = routeList.length; i < j; i++) {
|
||||
const route = routeList[i];
|
||||
!route.meta && (route.meta = {});
|
||||
if (routeModuleObject[route.name] === undefined) {
|
||||
console.error(`route ${route.name} is not in menu`);
|
||||
return;
|
||||
}
|
||||
if (!route.meta.index || route.meta.index !== routeModuleObject[route.name].sort) {
|
||||
route.meta.index = routeModuleObject[route.name].sort;
|
||||
}
|
||||
if (!route.meta.title || route.meta.title !== routeModuleObject[route.name].label) {
|
||||
route.meta.title = routeModuleObject[route.name].label;
|
||||
}
|
||||
route.children && loopRoute(route.children);
|
||||
}
|
||||
}
|
||||
loopRoute(this.route);
|
||||
this.route.sort((a, b) => {
|
||||
return a.meta?.index - b.meta?.index;
|
||||
});
|
||||
const initPcResource = { application: {}, menus: [] };
|
||||
this.routeModule.sort((a, b) => {
|
||||
return a.route?.meta?.index - b.route?.meta?.index;
|
||||
});
|
||||
const info = JSON.parse(JSON.stringify(this.routeModule));
|
||||
initRouteMouleList(info);
|
||||
function initRouteMouleList(info) {
|
||||
info.forEach((item, index) => {
|
||||
item.sort = index;
|
||||
if (item.menus) {
|
||||
initRouteMouleList(item.menus);
|
||||
}
|
||||
if (item.extend) {
|
||||
let isNull = true;
|
||||
Object.keys(item.extend).forEach((key) => {
|
||||
if (item.extend[key]) {
|
||||
isNull = false;
|
||||
}
|
||||
});
|
||||
if (isNull) {
|
||||
delete item.extend;
|
||||
}
|
||||
}
|
||||
delete item.route;
|
||||
});
|
||||
}
|
||||
initPcResource.application = appConfig.resourceInfo?.application as object;
|
||||
initPcResource.menus = appConfig.resourceInfo?.dealReosurceList
|
||||
? appConfig.resourceInfo?.dealReosurceList(info)
|
||||
: info;
|
||||
new NSAxios({
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
'QA-token': appConfig.resourceInfo?.token as string,
|
||||
},
|
||||
withCredentials: true,
|
||||
timeout: 3 * 1000,
|
||||
})
|
||||
.post(appConfig.resourceInfo?.api as string, initPcResource)
|
||||
.then((res) => {
|
||||
console.log(res);
|
||||
});
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user