|
@@ -4,7 +4,7 @@ import { defineStore } from 'pinia';
|
|
|
import { store } from '/@/store';
|
|
|
import { useI18n } from '/@/hooks/web/useI18n';
|
|
|
import { useUserStore } from './user';
|
|
|
-import { useAppStoreWidthOut } from './app';
|
|
|
+import { useAppStoreWithOut } from './app';
|
|
|
import { toRaw } from 'vue';
|
|
|
import { transformObjToRoute, flatMultiLevelRoutes } from '/@/router/helper/routeHelper';
|
|
|
import { transformRouteToMenu } from '/@/router/helper/menuHelper';
|
|
@@ -32,6 +32,7 @@ interface PermissionState {
|
|
|
lastBuildMenuTime: number;
|
|
|
|
|
|
backMenuList: Menu[];
|
|
|
+ frontMenuList: Menu[];
|
|
|
}
|
|
|
export const usePermissionStore = defineStore({
|
|
|
id: 'app-permission',
|
|
@@ -43,6 +44,8 @@ export const usePermissionStore = defineStore({
|
|
|
lastBuildMenuTime: 0,
|
|
|
|
|
|
backMenuList: [],
|
|
|
+
|
|
|
+ frontMenuList: [],
|
|
|
}),
|
|
|
getters: {
|
|
|
getPermCodeList(): string[] | number[] {
|
|
@@ -51,6 +54,9 @@ export const usePermissionStore = defineStore({
|
|
|
getBackMenuList(): Menu[] {
|
|
|
return this.backMenuList;
|
|
|
},
|
|
|
+ getFrontMenuList(): Menu[] {
|
|
|
+ return this.frontMenuList;
|
|
|
+ },
|
|
|
getLastBuildMenuTime(): number {
|
|
|
return this.lastBuildMenuTime;
|
|
|
},
|
|
@@ -68,6 +74,10 @@ export const usePermissionStore = defineStore({
|
|
|
list?.length > 0 && this.setLastBuildMenuTime();
|
|
|
},
|
|
|
|
|
|
+ setFrontMenuList(list: Menu[]) {
|
|
|
+ this.frontMenuList = list;
|
|
|
+ },
|
|
|
+
|
|
|
setLastBuildMenuTime() {
|
|
|
this.lastBuildMenuTime = new Date().getTime();
|
|
|
},
|
|
@@ -88,52 +98,70 @@ export const usePermissionStore = defineStore({
|
|
|
async buildRoutesAction(): Promise<AppRouteRecordRaw[]> {
|
|
|
const { t } = useI18n();
|
|
|
const userStore = useUserStore();
|
|
|
- const appStore = useAppStoreWidthOut();
|
|
|
+ const appStore = useAppStoreWithOut();
|
|
|
|
|
|
let routes: AppRouteRecordRaw[] = [];
|
|
|
const roleList = toRaw(userStore.getRoleList) || [];
|
|
|
const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig;
|
|
|
-
|
|
|
- if (permissionMode === PermissionModeEnum.ROLE) {
|
|
|
- const routeFilter = (route: AppRouteRecordRaw) => {
|
|
|
- const { meta } = route;
|
|
|
- const { roles } = meta || {};
|
|
|
- if (!roles) return true;
|
|
|
- return roleList.some((role) => roles.includes(role));
|
|
|
- };
|
|
|
- routes = filter(asyncRoutes, routeFilter);
|
|
|
- routes = routes.filter(routeFilter);
|
|
|
-
|
|
|
- routes = flatMultiLevelRoutes(routes);
|
|
|
+
|
|
|
+ const routeFilter = (route: AppRouteRecordRaw) => {
|
|
|
+ const { meta } = route;
|
|
|
+ const { roles } = meta || {};
|
|
|
+ if (!roles) return true;
|
|
|
+ return roleList.some((role) => roles.includes(role));
|
|
|
+ };
|
|
|
+
|
|
|
+ switch (permissionMode) {
|
|
|
+ case PermissionModeEnum.ROLE:
|
|
|
+ routes = filter(asyncRoutes, routeFilter);
|
|
|
+ routes = routes.filter(routeFilter);
|
|
|
+
|
|
|
+ routes = flatMultiLevelRoutes(routes);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PermissionModeEnum.ROUTE_MAPPING:
|
|
|
+ routes = filter(asyncRoutes, routeFilter);
|
|
|
+ routes = routes.filter(routeFilter);
|
|
|
+ const menuList = transformRouteToMenu(asyncRoutes);
|
|
|
+ menuList.sort((a, b) => {
|
|
|
+ return (a.meta?.orderNo || 0) - (b.meta?.orderNo || 0);
|
|
|
+ });
|
|
|
+ this.setFrontMenuList(menuList);
|
|
|
+
|
|
|
+ routes = flatMultiLevelRoutes(routes);
|
|
|
+ break;
|
|
|
+
|
|
|
|
|
|
- } else if (permissionMode === PermissionModeEnum.BACK) {
|
|
|
- const { createMessage } = useMessage();
|
|
|
-
|
|
|
- createMessage.loading({
|
|
|
- content: t('sys.app.menuLoading'),
|
|
|
- duration: 1,
|
|
|
- });
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- let routeList: AppRouteRecordRaw[] = [];
|
|
|
- try {
|
|
|
- this.changePermissionCode();
|
|
|
- routeList = (await getMenuList()) as AppRouteRecordRaw[];
|
|
|
- } catch (error) {
|
|
|
- console.error(error);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- routeList = transformObjToRoute(routeList);
|
|
|
-
|
|
|
-
|
|
|
- const backMenuList = transformRouteToMenu(routeList);
|
|
|
- this.setBackMenuList(backMenuList);
|
|
|
-
|
|
|
- routeList = flatMultiLevelRoutes(routeList);
|
|
|
- routes = [PAGE_NOT_FOUND_ROUTE, ...routeList];
|
|
|
+ case PermissionModeEnum.BACK:
|
|
|
+ const { createMessage } = useMessage();
|
|
|
+
|
|
|
+ createMessage.loading({
|
|
|
+ content: t('sys.app.menuLoading'),
|
|
|
+ duration: 1,
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ let routeList: AppRouteRecordRaw[] = [];
|
|
|
+ try {
|
|
|
+ this.changePermissionCode();
|
|
|
+ routeList = (await getMenuList()) as AppRouteRecordRaw[];
|
|
|
+ } catch (error) {
|
|
|
+ console.error(error);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ routeList = transformObjToRoute(routeList);
|
|
|
+
|
|
|
+
|
|
|
+ const backMenuList = transformRouteToMenu(routeList);
|
|
|
+ this.setBackMenuList(backMenuList);
|
|
|
+
|
|
|
+ routeList = flatMultiLevelRoutes(routeList);
|
|
|
+ routes = [PAGE_NOT_FOUND_ROUTE, ...routeList];
|
|
|
+ break;
|
|
|
}
|
|
|
+
|
|
|
routes.push(ERROR_LOG_ROUTE);
|
|
|
return routes;
|
|
|
},
|
|
@@ -141,6 +169,6 @@ export const usePermissionStore = defineStore({
|
|
|
});
|
|
|
|
|
|
|
|
|
-export function usePermissionStoreWidthOut() {
|
|
|
+export function usePermissionStoreWithOut() {
|
|
|
return usePermissionStore(store);
|
|
|
}
|