From 0d0708409c4adbe7a0c5e33abf5307031147eaeb Mon Sep 17 00:00:00 2001 From: Vben Date: Thu, 17 Jun 2021 23:39:27 +0800 Subject: [PATCH] feat(project-setting): added sessionTimeoutProcessing project configuration item,fix #772 --- CHANGELOG.zh_CN.md | 1 + src/enums/appEnum.ts | 5 +++++ src/settings/projectSetting.ts | 4 ++++ src/utils/http/axios/checkStatus.ts | 12 +++++++++--- types/config.d.ts | 3 +++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 2de64681..55830819 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -17,6 +17,7 @@ - **Setup** 新增引导页示例 - **Tests** 添加 jest 测试套件,暂不支持 Vue 组件单测 - **Axios** 新增`authenticationScheme`配置,用于指定认证方案 +- **Setting** 新增 `sessionTimeoutProcessing` 项目配置项,用于配置会话超时如何处理 ### 🐛 Bug Fixes diff --git a/src/enums/appEnum.ts b/src/enums/appEnum.ts index 025fa939..b2c9826e 100644 --- a/src/enums/appEnum.ts +++ b/src/enums/appEnum.ts @@ -20,6 +20,11 @@ export enum SettingButtonPositionEnum { FIXED = 'fixed', } +export enum SessionTimeoutProcessingEnum { + ROUTE_JUMP, + PAGE_COVERAGE, +} + /** * 权限模式 */ diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts index 53d25cae..4c9d412a 100644 --- a/src/settings/projectSetting.ts +++ b/src/settings/projectSetting.ts @@ -7,6 +7,7 @@ import { ThemeEnum, RouterTransitionEnum, SettingButtonPositionEnum, + SessionTimeoutProcessingEnum, } from '/@/enums/appEnum'; import { SIDE_BAR_BG_COLOR_LIST, HEADER_PRESET_BG_COLOR_LIST } from './designSetting'; import { primaryColor } from '../../build/config/themeConfig'; @@ -28,6 +29,9 @@ const setting: ProjectConfig = { // Permission-related cache is stored in sessionStorage or localStorage permissionCacheType: CacheTypeEnum.LOCAL, + // Session timeout processing + sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP, + // color themeColor: primaryColor, diff --git a/src/utils/http/axios/checkStatus.ts b/src/utils/http/axios/checkStatus.ts index 762bb000..5cd78682 100644 --- a/src/utils/http/axios/checkStatus.ts +++ b/src/utils/http/axios/checkStatus.ts @@ -4,10 +4,12 @@ import { useI18n } from '/@/hooks/web/useI18n'; // import router from '/@/router'; // import { PageEnum } from '/@/enums/pageEnum'; import { useUserStoreWidthOut } from '/@/store/modules/user'; +import projectSetting from '/@/settings/projectSetting'; +import { SessionTimeoutProcessingEnum } from '/@/enums/appEnum'; const { createMessage, createErrorModal } = useMessage(); - const error = createMessage.error!; +const stp = projectSetting.sessionTimeoutProcessing; export function checkStatus( status: number, @@ -27,8 +29,12 @@ export function checkStatus( // Return to the current page after successful login. This step needs to be operated on the login page. case 401: errMessage = t('sys.api.errMsg401'); - userStore.setToken(undefined); - userStore.setSessionTimeout(true); + if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) { + userStore.setToken(undefined); + userStore.setSessionTimeout(true); + } else { + userStore.logout(true); + } break; case 403: errMessage = t('sys.api.errMsg403'); diff --git a/types/config.d.ts b/types/config.d.ts index 7b81ee0e..cb5a5a99 100644 --- a/types/config.d.ts +++ b/types/config.d.ts @@ -5,6 +5,7 @@ import { ThemeEnum, RouterTransitionEnum, SettingButtonPositionEnum, + SessionTimeoutProcessingEnum, } from '/@/enums/appEnum'; import { CacheTypeEnum } from '/@/enums/cacheEnum'; @@ -89,6 +90,8 @@ export interface ProjectConfig { settingButtonPosition: SettingButtonPositionEnum; // Permission mode permissionMode: PermissionModeEnum; + // Session timeout processing + sessionTimeoutProcessing: SessionTimeoutProcessingEnum; // Website gray mode, open for possible mourning dates grayMode: boolean; // Whether to turn on the color weak mode