From 6afb492942b17ebdb80f8e57af1b0df7ba5ee821 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期四, 09 四月 2026 15:29:50 +0800
Subject: [PATCH] fix: 版本更新修改

---
 src/utils/versionUpgrade.js |   95 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 77 insertions(+), 18 deletions(-)

diff --git a/src/utils/versionUpgrade.js b/src/utils/versionUpgrade.js
index f39a40f..e0c818a 100644
--- a/src/utils/versionUpgrade.js
+++ b/src/utils/versionUpgrade.js
@@ -1,5 +1,6 @@
 import config from "@/config";
 import { getAllVersion } from "@/api/viewIndex";
+import bus from "@/plugins/bus";
 
 function compareVersion(v1, v2) {
   const s1 = String(v1 || "").replace(/[^\d.]/g, "").split(".").map((n) => Number(n) || 0);
@@ -23,7 +24,7 @@
   return `${size}B`;
 }
 
-function getCurrentVersion(logPrefix) {
+async function getCurrentVersion(logPrefix) {
   let currentVersion = config?.appInfo?.version || "1.0.0";
   console.log(`${logPrefix} 寮�濮嬭幏鍙栧綋鍓嶇増鏈紝榛樿鍊�:`, currentVersion);
   // #ifdef MP-WEIXIN
@@ -40,12 +41,23 @@
   // #endif
   // #ifdef APP-PLUS
   try {
+    // APP-PLUS 涓嬶紝plus.runtime.version 涓嶆槸涓氬姟鐗堟湰鍙凤紙缁忓父鏄繍琛屾椂/SDK鐗堟湰锛夛紝
+    // 杩欓噷鏀圭敤 getProperty 鍙栫郴缁熷眰闈㈢殑 app version銆�
     // @ts-ignore
-    if (plus?.runtime?.version) {
+    if (plus?.runtime?.getProperty) {
       // @ts-ignore
-      currentVersion = plus.runtime.version;
-      console.log(`${logPrefix} 褰撳墠鐜=APP-PLUS锛岀増鏈�=`, currentVersion);
-      return currentVersion;
+      const appid = plus.runtime.appid;
+      const appInfo = await new Promise((resolve) => {
+        // @ts-ignore
+        plus.runtime.getProperty(appid, (info) => resolve(info || {}));
+      });
+      const v = appInfo?.version || appInfo?.versionName || appInfo?.appVersion || "";
+      if (v) {
+        currentVersion = String(v);
+        console.log(`${logPrefix} 褰撳墠鐜=APP-PLUS锛岀増鏈�=`, currentVersion);
+        return currentVersion;
+      }
+      console.log(`${logPrefix} APP-PLUS 鑾峰彇鍒扮殑鐗堟湰瀛楁涓虹┖锛屽皢浣跨敤閰嶇疆鐗堟湰:`, currentVersion);
     }
   } catch (e) {
     console.log(`${logPrefix} APP-PLUS 鑾峰彇鐗堟湰澶辫触:`, e);
@@ -83,20 +95,46 @@
   // #endif
 }
 
-function downloadVersionPackage(url, logPrefix) {
-  console.log(`${logPrefix} 寮�濮嬩笅杞芥洿鏂板寘:`, url);
-  uni.showLoading({ title: "鏇存柊鍖呬笅杞戒腑..." });
-  uni.downloadFile({
-    url,
+function buildFullDownloadUrl(rawUrl) {
+  const u = String(rawUrl || "").trim();
+  if (!u) return "";
+  // 宸茬粡鏄粷瀵瑰湴鍧�锛岀洿鎺ヨ繑鍥�
+  if (/^https?:\/\//i.test(u)) return u;
+  const base = String(config?.fileUrl || config?.baseUrl || "").replace(/\/+$/, "");
+  const path = u.startsWith("/") ? u : `/${u}`;
+  return `${base}${path}`;
+}
+
+function emitDownloadProgress(payload, logPrefix) {
+  try {
+    bus.$emit("versionUpgrade:downloadProgress", payload);
+  } catch (e) {
+    console.log(`${logPrefix} downloadProgress 浜嬩欢娲惧彂澶辫触:`, e);
+  }
+}
+
+function downloadVersionPackage(url, logPrefix, fileSize) {
+  const fullUrl = buildFullDownloadUrl(url);
+  console.log(`${logPrefix} 寮�濮嬩笅杞芥洿鏂板寘:`, { rawUrl: url, fullUrl });
+  if (!fullUrl) {
+    uni.showToast({ title: "鏇存柊闄勪欢鍦板潃鏃犳晥", icon: "none" });
+    return;
+  }
+  const totalSize = Number(fileSize);
+  const hasTotalSize = Number.isFinite(totalSize) && totalSize > 0;
+  console.log(`${logPrefix} 涓嬭浇澶у皬淇℃伅:`, { fileSize, totalSize, hasTotalSize });
+  emitDownloadProgress({ show: true, progress: 0, title: "鏇存柊鍖呬笅杞戒腑..." }, logPrefix);
+  const task = uni.downloadFile({
+    url: fullUrl,
     success: (res) => {
       console.log(`${logPrefix} 涓嬭浇缁撴灉:`, res);
-      uni.hideLoading();
+      emitDownloadProgress({ show: false }, logPrefix);
       if (res.statusCode !== 200 || !res.tempFilePath) {
         console.log(`${logPrefix} 涓嬭浇澶辫触锛岀姸鎬佺爜鎴栦复鏃惰矾寰勫紓甯竊);
         uni.showToast({ title: "涓嬭浇澶辫触锛岃绋嶅悗閲嶈瘯", icon: "none" });
         return;
       }
-      const lowerUrl = String(url || "").toLowerCase();
+      const lowerUrl = String(fullUrl || "").toLowerCase();
       const isInstallPkg = lowerUrl.endsWith(".wgt") || lowerUrl.endsWith(".wgtu") || lowerUrl.endsWith(".apk");
       console.log(`${logPrefix} 鏂囦欢绫诲瀷鍒ゆ柇:`, { lowerUrl, isInstallPkg });
       if (isInstallPkg) {
@@ -114,10 +152,31 @@
     },
     fail: (err) => {
       console.log(`${logPrefix} 涓嬭浇璇锋眰澶辫触:`, err);
-      uni.hideLoading();
+      emitDownloadProgress({ show: false }, logPrefix);
       uni.showToast({ title: "涓嬭浇澶辫触锛岃妫�鏌ョ綉缁�", icon: "none" });
     },
   });
+
+  // 涓嬭浇杩涘害锛氶儴鍒嗙锛圓PP/灏忕▼搴忥級鏀寔 onProgressUpdate
+  try {
+    if (task && typeof task.onProgressUpdate === "function") {
+      task.onProgressUpdate((p) => {
+        const downloadedSize = Number(p?.totalBytesWritten ?? p?.writtenBytes ?? p?.downloadedSize);
+        const expectedSize = Number(p?.totalBytesExpectedToWrite ?? p?.totalBytesExpected ?? p?.totalSize);
+        const denom = hasTotalSize ? totalSize : (Number.isFinite(expectedSize) && expectedSize > 0 ? expectedSize : 0);
+
+        let progress = Number(p?.progress);
+        if (!(Number.isFinite(progress) && progress >= 0 && progress <= 100) && denom > 0 && Number.isFinite(downloadedSize) && downloadedSize >= 0) {
+          progress = (downloadedSize / denom) * 100;
+        }
+        if (!Number.isFinite(progress)) return;
+
+        emitDownloadProgress({ show: true, progress, title: "鏇存柊鍖呬笅杞戒腑..." }, logPrefix);
+      });
+    }
+  } catch (e) {
+    console.log(`${logPrefix} onProgressUpdate 缁戝畾澶辫触:`, e);
+  }
 }
 
 async function checkAppVersionUpgrade(logPrefix, currentVersion) {
@@ -170,7 +229,7 @@
       return;
     }
     const firstFile = Array.isArray(first?.commonFileList) ? first.commonFileList[0] : null;
-    const downloadUrl = firstFile?.url || "";
+    const downloadUrl = firstFile?.url || firstFile?.downloadUrl || "";
     const fileSizeText = formatFileSize(firstFile?.fileSize);
     console.log(`${logPrefix} 鏇存柊闄勪欢淇℃伅:`, {
       downloadUrl,
@@ -191,7 +250,7 @@
           uni.showToast({ title: "鏈壘鍒版洿鏂伴檮浠跺湴鍧�", icon: "none" });
           return;
         }
-        downloadVersionPackage(downloadUrl, logPrefix);
+        downloadVersionPackage(downloadUrl, logPrefix, firstFile?.fileSize);
       },
     });
   } catch (e) {
@@ -204,7 +263,7 @@
   const logPrefix = options.logPrefix || "[version]";
   let lastVersionCheckAt = 0;
 
-  const triggerVersionCheck = (from = "unknown") => {
+  const triggerVersionCheck = async (from = "unknown") => {
     const now = Date.now();
     if (now - lastVersionCheckAt < throttleMs) {
       console.log(`${logPrefix} 璺宠繃閲嶅妫�鏌ワ紝鏉ユ簮=${from}`);
@@ -212,8 +271,8 @@
     }
     lastVersionCheckAt = now;
     console.log(`${logPrefix} 瑙﹀彂鐗堟湰妫�鏌ワ紝鏉ユ簮=${from}`);
-    const currentVersion = getCurrentVersion(logPrefix);
-    checkAppVersionUpgrade(logPrefix, currentVersion);
+    const currentVersion = await getCurrentVersion(logPrefix);
+    await checkAppVersionUpgrade(logPrefix, currentVersion);
   };
 
   return { triggerVersionCheck };

--
Gitblit v1.9.3