From 8fb03961f50051695983f8cb415d6009b9d6b643 Mon Sep 17 00:00:00 2001 From: Vben Date: Tue, 23 Mar 2021 22:31:23 +0800 Subject: [PATCH] fix: ensure permissionMode exists close #409 --- src/settings/projectSetting.ts | 2 +- src/store/modules/permission.ts | 30 ++++++++++++++++-------------- src/utils/helper/vuexHelper.ts | 4 ++-- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts index eca9e05f..22dc84ff 100644 --- a/src/settings/projectSetting.ts +++ b/src/settings/projectSetting.ts @@ -20,7 +20,7 @@ const setting: ProjectConfig = { settingButtonPosition: SettingButtonPositionEnum.AUTO, // Permission mode - permissionMode: PermissionModeEnum.ROLE, + permissionMode: PermissionModeEnum.BACK, // Permission-related cache is stored in sessionStorage or localStorage permissionCacheType: CacheTypeEnum.LOCAL, diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index 7f4777c3..d5b184c5 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -1,28 +1,30 @@ import type { AppRouteRecordRaw, Menu } from '/@/router/types'; -import store from '/@/store/index'; -import { hotModuleUnregisterModule } from '/@/utils/helper/vuexHelper'; +import store from '/@/store'; +import { toRaw } from 'vue'; import { VuexModule, Mutation, Module, getModule, Action } from 'vuex-module-decorators'; +import { hotModuleUnregisterModule } from '/@/utils/helper/vuexHelper'; + import { PermissionModeEnum } from '/@/enums/appEnum'; import { appStore } from '/@/store/modules/app'; import { userStore } from '/@/store/modules/user'; +import projectSetting from '/@/settings/projectSetting'; import { asyncRoutes } from '/@/router/routes'; -import { filter } from '/@/utils/helper/treeHelper'; -import { toRaw } from 'vue'; -import { getMenuListById } from '/@/api/sys/menu'; -import { getPermCodeByUserId } from '/@/api/sys/user'; - +import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; import { transformObjToRoute, flatMultiLevelRoutes } from '/@/router/helper/routeHelper'; import { transformRouteToMenu } from '/@/router/helper/menuHelper'; +import { filter } from '/@/utils/helper/treeHelper'; + +import { getMenuListById } from '/@/api/sys/menu'; +import { getPermCodeByUserId } from '/@/api/sys/user'; + import { useMessage } from '/@/hooks/web/useMessage'; import { useI18n } from '/@/hooks/web/useI18n'; -import { ERROR_LOG_ROUTE, PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; -const { createMessage } = useMessage(); const NAME = 'app-permission'; hotModuleUnregisterModule(NAME); @Module({ dynamic: true, namespaced: true, store, name: NAME }) @@ -94,13 +96,11 @@ class Permission extends VuexModule { const { t } = useI18n(); let routes: AppRouteRecordRaw[] = []; const roleList = toRaw(userStore.getRoleListState); - - const { permissionMode = PermissionModeEnum.ROLE } = appStore.getProjectConfig; - + const { permissionMode = projectSetting.permissionMode } = appStore.getProjectConfig; // role permissions if (permissionMode === PermissionModeEnum.ROLE) { - const routeFilter = (route) => { - const { meta } = route as AppRouteRecordRaw; + const routeFilter = (route: AppRouteRecordRaw) => { + const { meta } = route; const { roles } = meta || {}; if (!roles) return true; return roleList.some((role) => roles.includes(role)); @@ -111,6 +111,8 @@ class Permission extends VuexModule { routes = flatMultiLevelRoutes(routes); // If you are sure that you do not need to do background dynamic permissions, please comment the entire judgment below } else if (permissionMode === PermissionModeEnum.BACK) { + const { createMessage } = useMessage(); + createMessage.loading({ content: t('sys.app.menuLoading'), duration: 1, diff --git a/src/utils/helper/vuexHelper.ts b/src/utils/helper/vuexHelper.ts index f3baba0e..14a521dc 100644 --- a/src/utils/helper/vuexHelper.ts +++ b/src/utils/helper/vuexHelper.ts @@ -1,8 +1,8 @@ import store from '/@/store'; export function hotModuleUnregisterModule(name: string) { - if (!name) return; - if ((store.state as any)[name]) { + if (!name || !import.meta.hot) return; + if ((store.state as Recordable)[name]) { store.unregisterModule(name); } }