From db685b04e52efd75213ef7540fdc0bed7dccfd9e Mon Sep 17 00:00:00 2001
From: wangrong <wangrong@shsening.com>
Date: 星期一, 26 十月 2026 21:13:37 +0800
Subject: [PATCH] 更新小程序

---
 cool/service/request.ts |   75 ++++++++++++++++++++++++++++++++++---
 1 files changed, 69 insertions(+), 6 deletions(-)

diff --git a/cool/service/request.ts b/cool/service/request.ts
index 11eae91..a78b730 100644
--- a/cool/service/request.ts
+++ b/cool/service/request.ts
@@ -10,6 +10,33 @@
 // Token 鏄惁鍒锋柊涓�
 let isRefreshing = false;
 
+let reloginTask: Promise<boolean> | null = null;
+
+function dropToken() {
+	const { user } = useStore();
+	user.token = "";
+	storage.remove("token");
+	storage.remove("token_deadtime");
+	storage.remove("refreshToken");
+	storage.remove("refreshToken_deadtime");
+}
+
+function recoverLogin() {
+	if (reloginTask) {
+		return reloginTask;
+	}
+	reloginTask = import("../mini-login")
+		.then(({ miniAutoLogin }) => {
+			dropToken();
+			return miniAutoLogin(true);
+		})
+		.catch(() => false)
+		.finally(() => {
+			reloginTask = null;
+		});
+	return reloginTask;
+}
+
 export default function request(options: any) {
 	const { user } = useStore();
 
@@ -45,6 +72,23 @@
 						message: string;
 						data: any;
 					};
+
+					const invalid = res.statusCode === 401 || message === "鐧诲綍澶辨晥~";
+					const skipRelogin = /miniAuto|refreshToken/.test(options.url || "");
+					if (invalid && !skipRelogin && !options.__retried) {
+						options.__retried = true;
+						recoverLogin()
+							.then((ok) => {
+								if (!ok) {
+									reject({ message: message || "鐧诲綍澶辨晥~", code: code || 1001 });
+									return;
+								}
+								Authorization = useStore().user.token || "";
+								next();
+							})
+							.catch((err) => reject(err));
+						return;
+					}
 
 					// 鏃犳潈闄�
 					if (res.statusCode === 401) {
@@ -95,9 +139,18 @@
 				// 鍒ゆ柇 token 鏄惁杩囨湡
 				if (storage.isExpired("token")) {
 					// 鍒ゆ柇 refreshToken 鏄惁杩囨湡
-					if (storage.isExpired("refreshToken")) {
-						// 閫�鍑虹櫥褰�
-						return user.logout();
+					if (!storage.get("refreshToken") || storage.isExpired("refreshToken")) {
+						recoverLogin()
+							.then((ok) => {
+								if (!ok) {
+									reject({ message: "鐧诲綍澶辨晥~", code: 1001 });
+									return;
+								}
+								Authorization = useStore().user.token || "";
+								next();
+							})
+							.catch((err) => reject(err));
+						return;
 					}
 
 					// 鏄惁鍦ㄥ埛鏂颁腑
@@ -109,9 +162,19 @@
 								requests = [];
 								isRefreshing = false;
 							})
-							.catch((err) => {
-								user.logout();
-								reject(err);
+							.catch(() => {
+								isRefreshing = false;
+								requests = [];
+								recoverLogin()
+									.then((ok) => {
+										if (!ok) {
+											reject({ message: "鐧诲綍澶辨晥~", code: 1001 });
+											return;
+										}
+										Authorization = useStore().user.token || "";
+										next();
+									})
+									.catch((err) => reject(err));
 							});
 					}
 

--
Gitblit v1.9.1