From aa45de802c9980656dc6a85dd3417cd0f77f7292 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期五, 21 三月 2025 15:49:55 +0800 Subject: [PATCH] fix: 三期需求 --- apps/h5/src/utils/request/index.ts | 131 ++++++++++++++++++++++++------------------- 1 files changed, 73 insertions(+), 58 deletions(-) diff --git a/apps/h5/src/utils/request/index.ts b/apps/h5/src/utils/request/index.ts index 5842e65..3ebb819 100644 --- a/apps/h5/src/utils/request/index.ts +++ b/apps/h5/src/utils/request/index.ts @@ -1,30 +1,36 @@ -import { type IRequestOptions, Request, type RequestConfig } from 'senior-request'; +import { type IRequestOptions, BoleRequest, type RequestConfig } from '@bole-core/core'; import { type AxiosRequestConfig, type AxiosError } from 'axios'; import qs from 'qs'; -import Taro from '@tarojs/taro'; -import { getToken, Message } from '@/utils'; -import { tokenIsExpired, SensitiveManage } from '@life-payment/utils'; -import { useUserStoreWithOut } from '@/stores/modules/user'; +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'; -const RefreshTokenUrl = '/gettokenbyrefreshtoken'; +// 鍔犺浇鐜鍙橀噺 VITE_PROXY_DOMAIN锛堝紑鍙戠幆澧冿級 VITE_PROXY_DOMAIN_REAL锛堟墦鍖呭悗鐨勭嚎涓婄幆澧冿級 +const { VITE_PROXY_DOMAIN, VITE_PROXY_DOMAIN_REAL, DEV } = loadEnv(); + +const RefreshTokenUrl = '/GetTokenByRefreshToken'; /** 璇锋眰鐧藉悕鍗曪紝鏀剧疆涓�浜涗笉闇�瑕乼oken鐨勬帴鍙o紙閫氳繃璁剧疆璇锋眰鐧藉悕鍗曪紝闃叉token杩囨湡鍚庡啀璇锋眰閫犳垚鐨勬寰幆闂锛� */ -const whiteList = [RefreshTokenUrl]; +const whiteList = [RefreshTokenUrl, '/GetToken']; -export function startLoading(showNavigationBarLoading: boolean) { - if (showNavigationBarLoading) { - Taro.showNavigationBarLoading(); - } else { - Taro.showLoading({ - title: '', - mask: true, - }); - } +let loadingInstance: ReturnType<typeof Loading.service>; + +function startLoading() { + loadingInstance = Loading.service({ + fullscreen: true, + lock: true, + background: 'transparent', + }); } -export function endLoading() { - Taro.hideNavigationBarLoading(); - Taro.hideLoading(); +function endLoading() { + if (loadingInstance) { + loadingInstance.close(); + } } // 閿欒澶勭悊鏂规锛� 閿欒绫诲瀷 @@ -76,8 +82,8 @@ } const AxiosOptions: AxiosRequestConfig = { - baseURL: process.env.BASE_URL, - timeout: 10 * 1000, + baseURL: DEV ? VITE_PROXY_DOMAIN : VITE_PROXY_DOMAIN_REAL, + timeout: 30000, headers: { Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json', @@ -116,19 +122,21 @@ // do nothing break; case ErrorShowType.WARN_MESSAGE: - Message.warning(errorMessage); + Message.warnMessage(errorMessage); break; case ErrorShowType.ERROR_MESSAGE: - Message.error(errorMessage); + Message.errorMessage(errorMessage); break; case ErrorShowType.NOTIFICATION: - Message.error(errorMessage); + ElNotification.error({ + message: `${errorCode}: ${errorMessage}`, + }); break; case ErrorShowType.REDIRECT: // TODO: redirect break; default: - Message.error(errorMessage); + Message.errorMessage(errorMessage); } } } else if ((error as AxiosError<ResponseStructure, IRequestOptions>).response) { @@ -140,10 +148,10 @@ // 璇锋眰宸茬粡鎴愬姛鍙戣捣锛屼絾娌℃湁鏀跺埌鍝嶅簲 // \`error.request\` 鍦ㄦ祻瑙堝櫒涓槸 XMLHttpRequest 鐨勫疄渚嬶紝 // 鑰屽湪node.js涓槸 http.ClientRequest 鐨勫疄渚� - Message.error('鏈嶅姟鍣ㄦ棤鍝嶅簲锛岃閲嶈瘯'); + Message.errorMessage('鏈嶅姟鍣ㄦ棤鍝嶅簲锛岃閲嶈瘯'); } else { // 鍙戦�佽姹傛椂鍑轰簡鐐归棶棰� - Message.error('鍙戦�佽姹傛椂鍑轰簡鐐归棶棰�'); + Message.errorMessage('鍙戦�佽姹傛椂鍑轰簡鐐归棶棰�'); } }, @@ -163,56 +171,54 @@ [ (config) => { const $config = config; + // 寮�鍚繘搴︽潯鍔ㄧ敾 + if (config.needNProcess) { + NProgress.start(); + } const token = getToken(); - const userStore = useUserStoreWithOut(); + const userInfo = getUserInfo(); - const userInfo = userStore.userInfo; + const { showLoading = true, mock } = $config; - const { showLoading = true, showNavigationBarLoading, mock } = $config; - - if (mock && process.env.NODE_ENV === 'development') { - $config.baseURL = 'http://localhost:9527'; + if (mock) { + $config.url = $config.url.replace(/^\/api/, ''); } /** * 濡傛灉鏄痳efreshToken杩欎釜鏂规硶 灏辩洿鎺ヨ繑鍥� 闃叉鍐呭瓨娉勬紡 */ - if (whiteList.some((url) => $config.url!.toLowerCase().includes(url.toLowerCase()))) { + if (whiteList.some((url) => $config.url.toLowerCase().includes(url.toLowerCase()))) { return $config; } if (showLoading) { - startLoading(showNavigationBarLoading); + startLoading(); } - return new Promise((resolve, reject) => { - if (userInfo && token && $config.withCredentials) { + return new Promise((resolve) => { + if (token && $config.withCredentials) { if (tokenIsExpired(userInfo)) { - if (!Request.refreshTokenPending) { - Request.refreshTokenPending = true; + if (!BoleRequest.refreshTokenPending) { + const userStore = useUserStoreHook(); + BoleRequest.refreshTokenPending = true; // token杩囨湡鍒锋柊 - useUserStoreWithOut() - .getTokenByRefreshToken({ + userStore + .refreshToken({ refreshToken: userInfo.refreshToken, - clientId: userStore.accountInfo?.client_id, + clientId: userStore.accountInfo.client_id, }) .then((res) => { $config.headers['Authorization'] = 'Bearer ' + res.accessToken; - Request.requests.forEach((cb) => cb(res.accessToken)); - Request.requests = []; - }) - .catch((err) => { - Request.requests.forEach((cb) => cb()); - Request.requests = []; - reject(err); + BoleRequest.requests.forEach((cb) => cb(res.accessToken)); + BoleRequest.requests = []; }) .finally(() => { - Request.refreshTokenPending = false; + BoleRequest.refreshTokenPending = false; }); } - resolve(Request.retryOriginalRequest($config)); + resolve(BoleRequest.retryOriginalRequest($config)); } else { $config.headers['Authorization'] = 'Bearer ' + token; resolve($config); @@ -235,11 +241,14 @@ const { needNProcess, getResponse = false } = $config; + // 鍏抽棴杩涘害鏉″姩鐢� + if (needNProcess) { + NProgress.done(); + } + endLoading(); - return getResponse - ? response - : SensitiveManage.filterSensitiveWord((response.data as any).result); + return getResponse ? response : (response.data as any).result; }, (error) => { endLoading(); @@ -273,16 +282,22 @@ if (error.response.data?.error?.message) { message = error.response.data?.error?.message; } + if (error.response?.status === 401) { handleLogout(); } - - Message.error(message); + Message.errorMessage(message); } } function handleLogout() { - useUserStoreWithOut().logout(); + const userStore = useUserStoreHook(); + let path = '/'; + if (userStore.token) { + path = router.currentRoute.value.fullPath; + } + userStore.logout(); + router.replace(`/login?redirect=${path}`); } -export const request = Request.create(config); +export const request = BoleRequest.create(config); -- Gitblit v1.9.1