From 0c4288eb37fd0ac9d4c6d87a62c33403561827d0 Mon Sep 17 00:00:00 2001 From: zoujing Date: Fri, 15 May 2026 14:17:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A6=96=E6=AC=A1=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E7=BD=91=E7=BB=9C=E7=8A=B6=E6=80=81=E7=9A=84?= =?UTF-8?q?=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 94 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 87 insertions(+), 7 deletions(-) diff --git a/src/App.vue b/src/App.vue index 6df4f46..033e9ca 100644 --- a/src/App.vue +++ b/src/App.vue @@ -2,18 +2,98 @@ import { onLaunch, onShow, onHide } from "@dcloudio/uni-app"; import { getEvnUrl } from "@/request/base/config"; import { refreshToken } from "@/hooks/useGoLogin"; -import { getAccessToken } from "@/constant/token"; -onLaunch(async () => { - /// 获取环境配置 - await getEvnUrl(); - - /// 刷新token - await refreshToken(); +let wasOffline = false; +let isRecoveringNetwork = false; + +const initAppNetworkData = async () => { + try { + /// 获取环境配置 + await getEvnUrl(); + + /// 刷新token + await refreshToken(); + return true; + } catch (error) { + wasOffline = true; + console.warn("初始化网络数据失败,等待网络恢复后重试:", error); + return false; + } +}; + +const getCurrentPageUrl = () => { + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + + if (!currentPage) return "/pages/index/index"; + + const route = currentPage.route || "pages/index/index"; + const options = currentPage.options || {}; + const query = Object.keys(options) + .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(options[key])}`) + .join("&"); + + return `/${route}${query ? `?${query}` : ""}`; +}; + +const reloadCurrentPage = () => { + const url = getCurrentPageUrl(); + uni.reLaunch({ + url, + fail: (error) => { + console.warn("网络恢复后重载当前页面失败:", error); + }, + }); +}; + +const recoverAfterNetworkReady = async () => { + if (!wasOffline || isRecoveringNetwork) return; + + isRecoveringNetwork = true; + let recovered = false; + try { + recovered = await initAppNetworkData(); + if (recovered) { + reloadCurrentPage(); + } + } finally { + if (recovered) { + wasOffline = false; + } + isRecoveringNetwork = false; + } +}; + +const checkNetworkStatus = () => { + uni.getNetworkType({ + success: (res) => { + if (res.networkType === "none") { + wasOffline = true; + return; + } + + recoverAfterNetworkReady(); + }, + }); +}; + +onLaunch(() => { + uni.onNetworkStatusChange((res) => { + if (!res.isConnected || res.networkType === "none") { + wasOffline = true; + return; + } + + recoverAfterNetworkReady(); + }); + + checkNetworkStatus(); + initAppNetworkData(); }); onShow(() => { console.log("App Show"); + checkNetworkStatus(); }); onHide(() => {