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