From 05c363fdd7ab04e3bd9a753e2c5d5bfff04d681c Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期二, 09 六月 2026 10:21:35 +0800
Subject: [PATCH] 备份上传
---
utils/request.js | 270 +++++++++++++++++++++++++----------------------------
1 files changed, 128 insertions(+), 142 deletions(-)
diff --git a/utils/request.js b/utils/request.js
index aa7a1a1..38fcda0 100644
--- a/utils/request.js
+++ b/utils/request.js
@@ -1,210 +1,196 @@
+import getConfig from "./config.js";
+const { baseURL } = getConfig();
// @/utils/request.js
+let isRedirectingToLogin = false;
-/**
- * 鏄剧ずToast鎻愮ず锛堝吋瀹箄view-plus锛�
- * @param {string} message 鎻愮ず鍐呭
- */
+// 鍏ㄥ眬 SSO 澶勭悊鏍囪锛堟寕杞藉埌 uni 涓婏紝渚夸簬璺ㄦā鍧楀叡浜級
+uni.__isSSOHandling = false;
+
const showToast = (message) => {
if (uni.$u?.toast) {
- uni.$u.toast(message)
+ uni.$u.toast(message);
} else {
- uni.showToast({
- title: message,
- icon: 'none'
- })
+ uni.showToast({ title: message, icon: "none" });
}
-}
+};
+console.log(baseURL,'baseURL');
-// 鍩虹閰嶇疆 - 浠庣幆澧冨彉閲忎腑鑾峰彇baseURL
const config = {
- baseURL: '/api', // 浣跨敤鐜鍙橀噺涓殑閰嶇疆
+ baseURL: baseURL,
timeout: 60000,
header: {
- 'Content-Type': 'application/json',
- 'X-Business-System': 'medical-system',
-
+ "Content-Type": "application/json",
+ "X-Business-System": "medical-system",
},
- // 鏂板閰嶇疆椤�
- loginPage: '/pages/login/Login', // 鐧诲綍椤佃矾寰�
- tokenExpiredCode: 401, // 鍚庣杩斿洖鐨凾oken杩囨湡鐘舵�佺爜
- noPermissionCode: 403, // 鏃犳潈闄愮姸鎬佺爜
- // 娣诲姞鐧藉悕鍗曢厤缃紙涓嶉渶瑕佹牎楠宼oken鐨勬帴鍙o級
- whiteList: [
- '/login', // 鐧诲綍鎺ュ彛
- // '/dingtalk/auth/login', // 閽夐拤鎺堟潈鐧诲綍鎺ュ彛
- // '/dingtalk/auth/bind' // 閽夐拤鎺堟潈鐧诲綍缁戝畾鎺ュ彛
- ]
-}
+ loginPage: "/pages/login/Login",
+ tokenExpiredCode: 401,
+ noPermissionCode: 403,
+ whiteList: ["/login", "/getToken", "/GiLink/getCode"],
+};
-/**
- * 妫�鏌ヨ姹傛槸鍚﹀湪鐧藉悕鍗曚腑
- * @param {string} url 璇锋眰URL
- */
const isInWhiteList = (url) => {
- // 鎻愬彇鐩稿璺緞锛堢Щ闄aseURL锛夊苟蹇界暐鏌ヨ鍙傛暟
- const relativeUrl = url.replace(config.baseURL, '').split('?')[0];
- return config.whiteList.some(path => {
- // 澶勭悊閫氶厤绗︽儏鍐�
- if (path.endsWith('/')) {
- return relativeUrl.startsWith(path)
- }
- // 绮剧‘鍖归厤璺緞
- return relativeUrl === path
- })
-}
+ const relativeUrl = url.replace(config.baseURL, "").split("?")[0];
+ return config.whiteList.some((path) => {
+ if (path.endsWith("/")) return relativeUrl.startsWith(path);
+ return relativeUrl === path;
+ });
+};
-/**
- * 璺宠浆鍒扮櫥褰曢〉
- */
const navigateToLogin = () => {
- uni.redirectTo({
- url: config.loginPage + '?redirect=' + encodeURIComponent(getCurrentPagePath())
- })
-}
+ // SSO 澶勭悊涓紝涓嶉噸澶嶈烦杞�
+ if (isRedirectingToLogin || uni.__isSSOHandling) {
+ console.log("姝e湪璺宠浆鐧诲綍椤垫垨SSO澶勭悊涓紝璺宠繃");
+ return;
+ }
-/**
- * 鑾峰彇褰撳墠椤甸潰璺緞锛堢敤浜庣櫥褰曞悗璺冲洖锛�
- */
+ isRedirectingToLogin = true;
+
+ const pages = getCurrentPages();
+ const currentPage = pages[pages.length - 1];
+ const isLoginPage =
+ currentPage &&
+ currentPage.route &&
+ currentPage.route.includes("login/Login");
+
+ if (isLoginPage) {
+ console.log("褰撳墠宸插湪鐧诲綍椤碉紝涓嶈烦杞�");
+ isRedirectingToLogin = false;
+ return;
+ }
+
+ console.log("璺宠浆鍒扮櫥褰曢〉");
+ setTimeout(() => {
+ uni.redirectTo({
+ url:
+ config.loginPage +
+ "?redirect=" +
+ encodeURIComponent(getCurrentPagePath()),
+ success: () => {
+ console.log("璺宠浆鐧诲綍椤垫垚鍔�");
+ isRedirectingToLogin = false;
+ },
+ fail: () => {
+ console.log("璺宠浆鐧诲綍椤靛け璐�");
+ isRedirectingToLogin = false;
+ },
+ });
+ }, 100);
+};
+
const getCurrentPagePath = () => {
- const pages = getCurrentPages()
- return pages[pages.length - 1]?.route || ''
-}
+ const pages = getCurrentPages();
+ return pages[pages.length - 1]?.route || "";
+};
-/**
- * 妫�鏌oken鏄惁杩囨湡
- * @param {number} statusCode HTTP鐘舵�佺爜
- */
const checkTokenExpired = (statusCode) => {
if (statusCode === config.tokenExpiredCode) {
- showToast('鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�')
- navigateToLogin()
- return true
+ showToast("鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�");
+ navigateToLogin();
+ return true;
}
- return false
-}
+ return false;
+};
-/**
- * 璇锋眰鎷︽埅鍣�
- */
const requestInterceptor = (options) => {
- const token = uni.getStorageSync('token')
-
- // 濡傛灉璇锋眰鍦ㄧ櫧鍚嶅崟涓紝鐩存帴鏀捐
+ const token = uni.getStorageSync("token");
+
if (isInWhiteList(options.url)) {
- return options
+ console.log("鐧藉悕鍗曟帴鍙o紝璺宠繃token鏍¢獙:", options.url);
+ return options;
}
- // 濡傛灉鏈櫥褰曚笖涓嶆槸鐧藉悕鍗曟帴鍙o紝璺宠浆鐧诲綍
- console.log(token,'token');
-
if (!token) {
- navigateToLogin()
- throw new Error('鏈櫥褰�')
+ const pages = getCurrentPages();
+ const currentPage = pages[pages.length - 1];
+ const isLoginPage =
+ currentPage &&
+ currentPage.route &&
+ (currentPage.route.includes("login/Login") ||
+ currentPage.route.includes("login/DingTalkLogin"));
+
+ if (isLoginPage) {
+ console.log("褰撳墠鏄櫥褰曢〉锛屽厑璁告棤token璇锋眰");
+ return options;
+ }
+
+ console.log("鏈櫥褰曚笖涓嶅湪鐧诲綍椤碉紝璺宠浆鍒扮櫥褰曢〉");
+ navigateToLogin();
+ throw new Error("鏈櫥褰�");
}
- // 娣诲姞Token鍒癏eader
options.header = {
...options.header,
- 'Authorization': `Bearer ${token}`
- }
-
- return options
-}
+ Authorization: `Bearer ${token}`,
+ };
+ return options;
+};
-/**
- * 鍝嶅簲鎷︽埅鍣�
- */
const responseInterceptor = (response) => {
- const { statusCode, data } = response
-
- // Token杩囨湡澶勭悊
- if (checkTokenExpired(statusCode)) {
- return Promise.reject(data)
- }
-
- // 鏃犳潈闄愬鐞�
+ const { statusCode, data } = response;
+ if (checkTokenExpired(statusCode)) return Promise.reject(data);
if (statusCode === config.noPermissionCode) {
- showToast('鏃犳潈闄愯闂�')
- return Promise.reject(data)
+ showToast("鏃犳潈闄愯闂�");
+ return Promise.reject(data);
}
-
- // 鍏朵粬閿欒鐘舵�佺爜
if (statusCode !== 200) {
- showToast(`璇锋眰澶辫触: ${statusCode}`)
- return Promise.reject(data)
+ showToast(`璇锋眰澶辫触: ${statusCode}`);
+ return Promise.reject(data);
}
-
- // 鎺ュ彛鑷畾涔夐敊璇爜澶勭悊锛堝亣璁綿ata.code涓�0琛ㄧず鎴愬姛锛�
if (data?.code !== 200) {
- showToast(data?.msg || '鎿嶄綔澶辫触')
- return Promise.reject(data)
+ showToast(data?.msg || "鎿嶄綔澶辫触");
+ return Promise.reject(data);
}
+ return data;
+};
- return data.data || data // 杩斿洖瀹為檯涓氬姟鏁版嵁
-}
-
-/**
- * 鏍稿績璇锋眰鏂规硶
- */
const request = async (options) => {
try {
- // 鍚堝苟閰嶇疆
options = {
...config,
...options,
url: config.baseURL + options.url,
- header: { ...config.header, ...options.header }
- }
-
- // 璇锋眰鎷︽埅
- options = await requestInterceptor(options)
-
- // 鍙戣捣璇锋眰
+ header: { ...config.header, ...options.header },
+ };
+ options = await requestInterceptor(options);
return new Promise((resolve, reject) => {
uni.request({
...options,
- success: (res) => {
- resolve(responseInterceptor(res))
- },
+ success: (res) => resolve(responseInterceptor(res)),
fail: (err) => {
- showToast('缃戠粶閿欒锛岃閲嶈瘯')
- reject(err)
- }
- })
- })
+ showToast("缃戠粶閿欒锛岃閲嶈瘯");
+ reject(err);
+ },
+ });
+ });
} catch (err) {
- return Promise.reject(err)
+ return Promise.reject(err);
}
-}
+};
-// 蹇嵎鏂规硶灏佽
const http = {
get(url, data = {}, options = {}) {
- return request({ url, data, method: 'GET', ...options })
+ return request({ url, data, method: "GET", ...options });
},
post(url, data = {}, options = {}) {
- return request({ url, data, method: 'POST', ...options })
+ return request({ url, data, method: "POST", ...options });
},
put(url, data = {}, options = {}) {
- return request({ url, data, method: 'PUT', ...options })
+ return request({ url, data, method: "PUT", ...options });
},
delete(url, data = {}, options = {}) {
- return request({ url, data, method: 'DELETE', ...options })
+ return request({ url, data, method: "DELETE", ...options });
},
- // 鏂板锛氫笂浼犳枃浠舵柟娉�
- upload(url, filePath, name = 'file', formData = {}) {
+ upload(url, filePath, name = "file", formData = {}) {
return request({
url,
- method: 'POST',
+ method: "POST",
filePath,
name,
formData,
- header: { 'Content-Type': 'multipart/form-data' }
- })
- }
-}
+ header: { "Content-Type": "multipart/form-data" },
+ });
+ },
+};
-// 鎸傝浇鍒板叏灞�
-uni.$uapi = http
-
-export default http
\ No newline at end of file
+uni.$uapi = http;
+export default http;
--
Gitblit v1.9.3