From 464723fb4351541205e976c4a939cd34dcf0452c Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期日, 28 九月 2025 15:50:36 +0800
Subject: [PATCH] fix: 新增日志

---
 src/utils/request/index.ts |  103 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 65 insertions(+), 38 deletions(-)

diff --git a/src/utils/request/index.ts b/src/utils/request/index.ts
index 3ebb819..d5c39ef 100644
--- a/src/utils/request/index.ts
+++ b/src/utils/request/index.ts
@@ -3,11 +3,11 @@
 import qs from 'qs';
 import NProgress from '../progress';
 import { loadEnv } from '@build/index';
-import { getToken, getUserInfo } from '../storage';
 import { useUserStoreHook } from '@/store/modules/user';
 import { ElLoading as Loading, ElNotification } from 'element-plus';
 import { router } from '@/router';
 import { Message, tokenIsExpired } from '@/utils';
+import { httpLoggerRecord } from '../LoggerRecord';
 
 // 鍔犺浇鐜鍙橀噺 VITE_PROXY_DOMAIN锛堝紑鍙戠幆澧冿級  VITE_PROXY_DOMAIN_REAL锛堟墦鍖呭悗鐨勭嚎涓婄幆澧冿級
 const { VITE_PROXY_DOMAIN, VITE_PROXY_DOMAIN_REAL, DEV } = loadEnv();
@@ -15,7 +15,7 @@
 const RefreshTokenUrl = '/GetTokenByRefreshToken';
 
 /** 璇锋眰鐧藉悕鍗曪紝鏀剧疆涓�浜涗笉闇�瑕乼oken鐨勬帴鍙o紙閫氳繃璁剧疆璇锋眰鐧藉悕鍗曪紝闃叉token杩囨湡鍚庡啀璇锋眰閫犳垚鐨勬寰幆闂锛� */
-const whiteList = [RefreshTokenUrl, '/GetToken'];
+const whiteList = [RefreshTokenUrl, '/passwordLogin'];
 
 let loadingInstance: ReturnType<typeof Loading.service>;
 
@@ -56,14 +56,19 @@
   success: boolean;
   data: any;
   /**
+   * http鐘舵�佸悧
+   */
+  code?: number;
+  /**
    * 閿欒鐮�
    */
-  error?: number;
+  errorCode?: string;
   /**
    * 閿欒淇℃伅
    */
   msg?: string;
   showType?: ErrorShowType;
+  traceId?: string;
 }
 
 interface ErrorResponse {
@@ -75,7 +80,7 @@
 }
 
 interface ErrorInfo {
-  errorCode?: number;
+  errorCode?: string;
   errorMessage?: string;
   showType?: ErrorShowType;
   data: any;
@@ -104,6 +109,19 @@
     // 閿欒鎺ユ敹鍙婂鐞�
     errorHandler: (error, opts) => {
       console.log('error: ', error);
+
+      const url = opts.url ?? '';
+      httpLoggerRecord.error({
+        message: `[${url}] 璇锋眰閿欒`,
+        httpParams: {
+          url: url,
+          //@ts-ignore
+          traceId: error?.info?.traceId,
+          stackTrace: error.stack,
+        },
+        args: [{ data: opts.data, params: opts.params, headers: opts.headers }],
+      });
+
       if (opts?.skipErrorHandler) throw error;
 
       if (opts?.customErrorHandler) {
@@ -117,6 +135,9 @@
         const errorInfo: ErrorInfo | undefined = (error as any).info;
         if (errorInfo) {
           const { errorMessage, errorCode } = errorInfo;
+          if (Number(errorCode) === 401) {
+            handleLogout();
+          }
           switch (errorInfo.showType) {
             case ErrorShowType.SILENT:
               // do nothing
@@ -142,7 +163,7 @@
       } else if ((error as AxiosError<ResponseStructure, IRequestOptions>).response) {
         // Axios 鐨勯敊璇�
         // 璇锋眰鎴愬姛鍙戝嚭涓旀湇鍔″櫒涔熷搷搴斾簡鐘舵�佺爜锛屼絾鐘舵�佷唬鐮佽秴鍑轰簡 2xx 鐨勮寖鍥�
-        handleAxiosResponseError(error as AxiosError<ErrorResponse, IRequestOptions>);
+        handleAxiosResponseError(error as AxiosError<ResponseStructure, IRequestOptions>);
         // Message.errorMessage(`Response status:${(error as AxiosError).response.status}`);
       } else if ((error as AxiosError).request) {
         // 璇锋眰宸茬粡鎴愬姛鍙戣捣锛屼絾娌℃湁鏀跺埌鍝嶅簲
@@ -157,7 +178,7 @@
 
     // 閿欒鎶涘嚭
     errorThrower: (res) => {
-      const { success, data, error: errorCode, msg, showType } = res;
+      const { success, data, errorCode, msg, showType } = res;
       if (!success) {
         const error: any = new Error(msg);
         error.name = 'BizError';
@@ -176,9 +197,17 @@
           NProgress.start();
         }
 
-        const token = getToken();
+        httpLoggerRecord.info({
+          message: `[${$config.url}] 璇锋眰寮�濮媊,
+          httpParams: {
+            url: $config.url,
+          },
+          args: [{ data: $config.data, params: $config.params, headers: $config.headers }],
+        });
 
-        const userInfo = getUserInfo();
+        const userStore = useUserStoreHook();
+
+        const userInfo = userStore.userInfo;
 
         const { showLoading = true, mock } = $config;
 
@@ -198,31 +227,10 @@
         }
 
         return new Promise((resolve) => {
-          if (token && $config.withCredentials) {
-            if (tokenIsExpired(userInfo)) {
-              if (!BoleRequest.refreshTokenPending) {
-                const userStore = useUserStoreHook();
-                BoleRequest.refreshTokenPending = true;
-                // token杩囨湡鍒锋柊
-                userStore
-                  .refreshToken({
-                    refreshToken: userInfo.refreshToken,
-                    clientId: userStore.accountInfo.client_id,
-                  })
-                  .then((res) => {
-                    $config.headers['Authorization'] = 'Bearer ' + res.accessToken;
-                    BoleRequest.requests.forEach((cb) => cb(res.accessToken));
-                    BoleRequest.requests = [];
-                  })
-                  .finally(() => {
-                    BoleRequest.refreshTokenPending = false;
-                  });
-              }
-              resolve(BoleRequest.retryOriginalRequest($config));
-            } else {
-              $config.headers['Authorization'] = 'Bearer ' + token;
-              resolve($config);
-            }
+          if (userInfo.accessToken && $config.withCredentials) {
+            $config.headers['Authorization'] = 'Bearer ' + userInfo.accessToken;
+            $config.headers['X-Authorization'] = 'Bearer ' + userInfo.refreshToken;
+            resolve($config);
           } else {
             resolve($config);
           }
@@ -239,6 +247,15 @@
       (response) => {
         const $config = response.config as IRequestOptions;
 
+        httpLoggerRecord.info({
+          message: `[${$config.url}] 璇锋眰缁撴潫`,
+          httpParams: {
+            url: $config.url,
+            traceId: response.data?.traceId,
+          },
+          args: [{ data: $config.data, params: $config.params, headers: $config.headers }],
+        });
+
         const { needNProcess, getResponse = false } = $config;
 
         // 鍏抽棴杩涘害鏉″姩鐢�
@@ -246,9 +263,19 @@
           NProgress.done();
         }
 
+        const userStore = useUserStoreHook();
+
+        if (response.headers['x-access-token']) {
+          userStore.setToken(response.headers['access-token']);
+          userStore.setUserInfo({
+            accessToken: response.headers['access-token'],
+            refreshToken: response.headers['x-access-token'],
+          });
+        }
+
         endLoading();
 
-        return getResponse ? response : (response.data as any).result;
+        return getResponse ? response : response.data.data;
       },
       (error) => {
         endLoading();
@@ -272,18 +299,18 @@
   [505]: 'HTTP鐗堟湰涓嶅彈鏀寔',
 };
 
-function handleAxiosResponseError(error: AxiosError<ErrorResponse, IRequestOptions>) {
+function handleAxiosResponseError(error: AxiosError<ResponseStructure, IRequestOptions>) {
   if (error.response.config.url.toLowerCase().includes(RefreshTokenUrl.toLowerCase())) {
     handleLogout();
     return;
   }
   if (error && error.response) {
     let message = ErrorMessageMap[error.response?.status] ?? '璇锋眰閿欒';
-    if (error.response.data?.error?.message) {
-      message = error.response.data?.error?.message;
+    if (error.response.data?.msg) {
+      message = error.response.data?.msg;
     }
 
-    if (error.response?.status === 401) {
+    if (error.response?.status === 401 || error.response.data.code === 401) {
       handleLogout();
     }
     Message.errorMessage(message);

--
Gitblit v1.9.1