Browse Source

feat(project-setting): added sessionTimeoutProcessing project configuration item,fix #772

Vben 3 years ago
parent
commit
0d0708409c

+ 1 - 0
CHANGELOG.zh_CN.md

@@ -17,6 +17,7 @@
 - **Setup** 新增引导页示例
 - **Tests** 添加 jest 测试套件,暂不支持 Vue 组件单测
 - **Axios** 新增`authenticationScheme`配置,用于指定认证方案
+- **Setting** 新增 `sessionTimeoutProcessing` 项目配置项,用于配置会话超时如何处理
 
 ### 🐛 Bug Fixes
 

+ 5 - 0
src/enums/appEnum.ts

@@ -20,6 +20,11 @@ export enum SettingButtonPositionEnum {
   FIXED = 'fixed',
 }
 
+export enum SessionTimeoutProcessingEnum {
+  ROUTE_JUMP,
+  PAGE_COVERAGE,
+}
+
 /**
  * 权限模式
  */

+ 4 - 0
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,
 

+ 9 - 3
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');

+ 3 - 0
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