From 6544f84bc24b69ff3801cf77cbb4ade69f72d087 Mon Sep 17 00:00:00 2001
From: 无木 <netfan@foxmail.com>
Date: 星期二, 14 九月 2021 22:11:21 +0800
Subject: [PATCH] feat(demo): add token expired example

---
 src/utils/http/axios/index.ts                 |    4 ++++
 src/api/demo/account.ts                       |    3 +++
 src/views/demo/feat/session-timeout/index.vue |   32 ++++++++++++++++++++++++++------
 mock/demo/account.ts                          |    9 +++++++++
 4 files changed, 42 insertions(+), 6 deletions(-)

diff --git a/mock/demo/account.ts b/mock/demo/account.ts
index 4ba247d..a392493 100644
--- a/mock/demo/account.ts
+++ b/mock/demo/account.ts
@@ -1,5 +1,6 @@
 import { MockMethod } from 'vite-plugin-mock';
 import { resultSuccess, resultError } from '../_util';
+import { ResultEnum } from '../../src/enums/httpEnum';
 
 const userInfo = {
   name: 'Vben',
@@ -59,4 +60,12 @@
       return resultError();
     },
   },
+  {
+    url: '/basic-api/user/tokenExpired',
+    method: 'post',
+    statusCode: 200,
+    response: () => {
+      return resultError('Token Expired!', { code: ResultEnum.TIMEOUT as number });
+    },
+  },
 ] as MockMethod[];
diff --git a/src/api/demo/account.ts b/src/api/demo/account.ts
index 53537d1..2a36813 100644
--- a/src/api/demo/account.ts
+++ b/src/api/demo/account.ts
@@ -4,6 +4,7 @@
 enum Api {
   ACCOUNT_INFO = '/account/getAccountInfo',
   SESSION_TIMEOUT = '/user/sessionTimeout',
+  TOKEN_EXPIRED = '/user/tokenExpired',
 }
 
 // Get personal center-basic settings
@@ -11,3 +12,5 @@
 export const accountInfoApi = () => defHttp.get<GetAccountInfoModel>({ url: Api.ACCOUNT_INFO });
 
 export const sessionTimeoutApi = () => defHttp.post<void>({ url: Api.SESSION_TIMEOUT });
+
+export const tokenExpiredApi = () => defHttp.post<void>({ url: Api.TOKEN_EXPIRED });
diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts
index 1108f55..1e946dc 100644
--- a/src/utils/http/axios/index.ts
+++ b/src/utils/http/axios/index.ts
@@ -15,6 +15,7 @@
 import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog';
 import { useI18n } from '/@/hooks/web/useI18n';
 import { joinTimestamp, formatRequestDate } from './helper';
+import { useUserStoreWithOut } from '/@/store/modules/user';
 
 const globSetting = useGlobSetting();
 const urlPrefix = globSetting.urlPrefix;
@@ -61,6 +62,9 @@
     switch (code) {
       case ResultEnum.TIMEOUT:
         timeoutMsg = t('sys.api.timeoutMessage');
+        const userStore = useUserStoreWithOut();
+        userStore.setToken(undefined);
+        userStore.logout(true);
         break;
       default:
         if (message) {
diff --git a/src/views/demo/feat/session-timeout/index.vue b/src/views/demo/feat/session-timeout/index.vue
index 8405752..2a0c328 100644
--- a/src/views/demo/feat/session-timeout/index.vue
+++ b/src/views/demo/feat/session-timeout/index.vue
@@ -3,7 +3,15 @@
     title="鐧诲綍杩囨湡绀轰緥"
     content="鐢ㄦ埛鐧诲綍杩囨湡绀轰緥锛屼笉鍐嶈烦杞櫥褰曢〉锛岀洿鎺ョ敓鎴愰〉闈㈣鐩栧綋鍓嶉〉闈紝鏂逛究淇濇寔杩囨湡鍓嶇殑鐢ㄦ埛鐘舵�侊紒"
   >
-    <a-button type="primary" @click="test">鐐瑰嚮瑙﹀彂鐢ㄦ埛鐧诲綍杩囨湡</a-button>
+    <a-card title="璇风偣鍑讳笅闈㈢殑鎸夐挳璁块棶娴嬭瘯鎺ュ彛" extra="鎵�璁块棶鐨勬帴鍙d細杩斿洖Token杩囨湡鍝嶅簲">
+      <a-card-grid style="width: 50%; text-align: center">
+        <a-button type="primary" @click="test1">HttpStatus == 401</a-button>
+      </a-card-grid>
+      <a-card-grid style="width: 50%; text-align: center">
+        <span></span>
+        <a-button class="ml-4" type="primary" @click="test2">Response.code == 401</a-button>
+      </a-card-grid>
+    </a-card>
   </PageWrapper>
 </template>
 <script lang="ts">
@@ -11,24 +19,36 @@
   import { PageWrapper } from '/@/components/Page';
   import { useUserStore } from '/@/store/modules/user';
 
-  import { sessionTimeoutApi } from '/@/api/demo/account';
+  import { sessionTimeoutApi, tokenExpiredApi } from '/@/api/demo/account';
+  import { Card } from 'ant-design-vue';
 
   export default defineComponent({
     name: 'TestSessionTimeout',
-    components: { PageWrapper },
+    components: { ACardGrid: Card.Grid, ACard: Card, PageWrapper },
     setup() {
       const userStore = useUserStore();
-      async function test() {
-        // 绀轰緥缃戠珯鐢熶骇鐜鐢ㄥ緱鏄痬ock鏁版嵁锛屾墍浠ヤ笉鑳借繑鍥�401锛�
+      async function test1() {
+        // 绀轰緥缃戠珯鐢熶骇鐜鐢ㄧ殑鏄痬ock鏁版嵁锛屼笉鑳借繑鍥濰ttp鐘舵�佺爜锛�
         // 鎵�浠ュ湪鐢熶骇鐜鐩存帴鏀瑰彉鐘舵�佹潵杈惧埌娴嬭瘯鏁堟灉
         if (import.meta.env.PROD) {
           userStore.setToken(undefined);
           userStore.setSessionTimeout(true);
         } else {
+          // 杩欎釜api浼氳繑鍥炵姸鎬佺爜涓�401鐨勫搷搴�
           await sessionTimeoutApi();
         }
       }
-      return { test };
+
+      async function test2() {
+        // 杩欎釜api浼氳繑鍥瀋ode涓�401鐨刯son鏁版嵁锛孒ttp鐘舵�佺爜涓�200
+        try {
+          await tokenExpiredApi();
+        } catch (err) {
+          console.log('鎺ュ彛璁块棶閿欒锛�', (err as Error).message || '閿欒');
+        }
+      }
+
+      return { test1, test2 };
     },
   });
 </script>

--
Gitblit v1.8.0