From eedf75ae97d84a90236e3a365a78266a21377873 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期四, 09 四月 2026 13:02:07 +0800
Subject: [PATCH] fix: 版本管理80%
---
src/pages/index.vue | 9
src/pages/login.vue | 45 ++++
src/pages/works.vue | 8
src/api/viewIndex.js | 9
src/utils/versionUpgrade.js | 220 ++++++++++++++++++++++
src/config.js | 4
src/manifest.json | 276 +++++++++++++-------------
7 files changed, 431 insertions(+), 140 deletions(-)
diff --git a/src/api/viewIndex.js b/src/api/viewIndex.js
index 8b5d144..7801618 100644
--- a/src/api/viewIndex.js
+++ b/src/api/viewIndex.js
@@ -100,6 +100,15 @@
method: "get",
});
};
+
+// 鐗堟湰鍗囩骇锛氭煡璇㈢増鏈垪琛紙鍙栫涓�鏉℃渶鏂版暟鎹級
+export const getAllVersion = (params) => {
+ return request({
+ url: "/app/getAllVersion",
+ method: "get",
+ params,
+ });
+};
// 璐ㄦ鍒嗘瀽锛堝彲浼� dateType: 1鍛� 2鏈� 3瀛e害锛�
export const qualityStatistics = (params) => {
return request({
diff --git a/src/config.js b/src/config.js
index b87a0a7..13bce09 100644
--- a/src/config.js
+++ b/src/config.js
@@ -6,8 +6,8 @@
appInfo: {
// 搴旂敤鍚嶇О
name: "ruoyi-app-vue3",
- // 搴旂敤鐗堟湰
- version: "1.1.0",
+ // 搴旂敤鐗堟湰锛堜笌 manifest.json 鐨� versionName 淇濇寔涓�鑷达級
+ version: "1.0.0",
// 搴旂敤logo
logo: "/static/YGCY.png",
// 瀹樻柟缃戠珯
diff --git a/src/manifest.json b/src/manifest.json
index 6324e7b..6c55649 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -1,143 +1,143 @@
{
- "name" : "淇℃伅绠$悊",
- "appid" : "__UNI__1F1A548",
- "description" : "",
- "versionName" : "1.0.0",
- "versionCode" : "100",
- "transformPx" : false,
- /* 5+App鐗规湁鐩稿叧 */
- "app-plus" : {
- "compatible" : {
- "usingComponents" : true,
- "ignoreVersion" : true
- },
- "usingComponents" : true,
- "nvueStyleCompiler" : "uni-app",
- "compilerVersion" : 3,
- "splashscreen" : {
- "alwaysShowBeforeRender" : true,
- "waiting" : true,
- "autoclose" : true,
- "delay" : 0
- },
- /* 妯″潡閰嶇疆 */
- "modules" : {
- "Camera" : {},
- "Barcode" : {},
- "Push" : {},
- "Maps" : {}
- },
- /* 搴旂敤鍙戝竷淇℃伅 */
- "distribute" : {
- /* android鎵撳寘閰嶇疆 */
- "android" : {
- "permissions" : [
- "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
- "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
- "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
- "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
- "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
- "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
- "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
- "<uses-permission android:name=\"android.permission.CAMERA\"/>",
- "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
- "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
- "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
- "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
- "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
- "<uses-feature android:name=\"android.hardware.camera\"/>",
- "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
- "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
- "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
- "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
- "<uses-feature android:name=\"android.hardware.location\"/>",
- "<uses-feature android:name=\"android.hardware.location.gps\"/>",
- "<uses-feature android:name=\"android.hardware.location.network\"/>"
- ]
- },
- /* ios鎵撳寘閰嶇疆 */
- "ios" : {
- "dSYMs" : false,
- "plist" : {
- "NSLocationWhenInUseUsageDescription" : "闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭潵璁板綍瀹㈡埛鎷滆鍦扮偣",
- "NSLocationAlwaysAndWhenInUseUsageDescription" : "闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭潵璁板綍瀹㈡埛鎷滆鍦扮偣"
- }
- },
- /* SDK閰嶇疆 */
- "sdkConfigs" : {
- "push" : {
- "unipush" : {
- "icons" : {
- "small" : {
- "ldpi" : "D:/xindao/wenjian/img/logo/app.png"
- }
- },
- "offline" : false
- }
- },
- "maps" : {
- "amap" : {
- "name" : "amap_18330707920ae9zOwCD",
- "appkey_ios" : "c2b4e3889ab4cb9468e9c8ae4f3ab53f",
- "appkey_android" : "c2b4e3889ab4cb9468e9c8ae4f3ab53f"
- }
- }
- },
- "icons" : {
- "android" : {
- "hdpi" : "unpackage/res/icons/72x72.png",
- "xhdpi" : "unpackage/res/icons/96x96.png",
- "xxhdpi" : "unpackage/res/icons/144x144.png",
- "xxxhdpi" : "unpackage/res/icons/192x192.png"
- },
- "ios" : {
- "appstore" : "unpackage/res/icons/1024x1024.png",
- "ipad" : {
- "app" : "unpackage/res/icons/76x76.png",
- "app@2x" : "unpackage/res/icons/152x152.png",
- "notification" : "unpackage/res/icons/20x20.png",
- "notification@2x" : "unpackage/res/icons/40x40.png",
- "proapp@2x" : "unpackage/res/icons/167x167.png",
- "settings" : "unpackage/res/icons/29x29.png",
- "settings@2x" : "unpackage/res/icons/58x58.png",
- "spotlight" : "unpackage/res/icons/40x40.png",
- "spotlight@2x" : "unpackage/res/icons/80x80.png"
- },
- "iphone" : {
- "app@2x" : "unpackage/res/icons/120x120.png",
- "app@3x" : "unpackage/res/icons/180x180.png",
- "notification@2x" : "unpackage/res/icons/40x40.png",
- "notification@3x" : "unpackage/res/icons/60x60.png",
- "settings@2x" : "unpackage/res/icons/58x58.png",
- "settings@3x" : "unpackage/res/icons/87x87.png",
- "spotlight@2x" : "unpackage/res/icons/80x80.png",
- "spotlight@3x" : "unpackage/res/icons/120x120.png"
- }
- }
- }
+ "name": "淇℃伅绠$悊",
+ "appid": "__UNI__1F1A548",
+ "description": "",
+ "versionName": "1.0.0",
+ "versionCode": 100,
+ "transformPx": false,
+ /* 5+App鐗规湁鐩稿叧 */
+ "app-plus": {
+ "compatible": {
+ "usingComponents": true,
+ "ignoreVersion": true
+ },
+ "usingComponents": true,
+ "nvueStyleCompiler": "uni-app",
+ "compilerVersion": 3,
+ "splashscreen": {
+ "alwaysShowBeforeRender": true,
+ "waiting": true,
+ "autoclose": true,
+ "delay": 0
+ },
+ /* 妯″潡閰嶇疆 */
+ "modules": {
+ "Camera": {},
+ "Barcode": {},
+ "Push": {},
+ "Maps": {}
+ },
+ /* 搴旂敤鍙戝竷淇℃伅 */
+ "distribute": {
+ /* android鎵撳寘閰嶇疆 */
+ "android": {
+ "permissions": [
+ "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+ "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+ "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+ "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+ "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+ "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+ "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+ "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+ "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+ "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+ "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+ "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+ "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+ "<uses-feature android:name=\"android.hardware.camera\"/>",
+ "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
+ "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+ "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+ "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
+ "<uses-feature android:name=\"android.hardware.location\"/>",
+ "<uses-feature android:name=\"android.hardware.location.gps\"/>",
+ "<uses-feature android:name=\"android.hardware.location.network\"/>"
+ ]
+ },
+ /* ios鎵撳寘閰嶇疆 */
+ "ios": {
+ "dSYMs": false,
+ "plist": {
+ "NSLocationWhenInUseUsageDescription": "闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭潵璁板綍瀹㈡埛鎷滆鍦扮偣",
+ "NSLocationAlwaysAndWhenInUseUsageDescription": "闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭潵璁板綍瀹㈡埛鎷滆鍦扮偣"
}
- },
- /* 蹇簲鐢ㄧ壒鏈夌浉鍏� */
- "quickapp" : {},
- /* 灏忕▼搴忕壒鏈夌浉鍏� */
- "mp-weixin" : {
- "appid" : "",
- "setting" : {
- "urlCheck" : false
+ },
+ /* SDK閰嶇疆 */
+ "sdkConfigs": {
+ "push": {
+ "unipush": {
+ "icons": {
+ "small": {
+ "ldpi": "D:/xindao/wenjian/img/logo/app.png"
+ }
+ },
+ "offline": false
+ }
},
- "usingComponents" : true
+ "maps": {
+ "amap": {
+ "name": "amap_18330707920ae9zOwCD",
+ "appkey_ios": "c2b4e3889ab4cb9468e9c8ae4f3ab53f",
+ "appkey_android": "c2b4e3889ab4cb9468e9c8ae4f3ab53f"
+ }
+ }
+ },
+ "icons": {
+ "android": {
+ "hdpi": "unpackage/res/icons/72x72.png",
+ "xhdpi": "unpackage/res/icons/96x96.png",
+ "xxhdpi": "unpackage/res/icons/144x144.png",
+ "xxxhdpi": "unpackage/res/icons/192x192.png"
+ },
+ "ios": {
+ "appstore": "unpackage/res/icons/1024x1024.png",
+ "ipad": {
+ "app": "unpackage/res/icons/76x76.png",
+ "app@2x": "unpackage/res/icons/152x152.png",
+ "notification": "unpackage/res/icons/20x20.png",
+ "notification@2x": "unpackage/res/icons/40x40.png",
+ "proapp@2x": "unpackage/res/icons/167x167.png",
+ "settings": "unpackage/res/icons/29x29.png",
+ "settings@2x": "unpackage/res/icons/58x58.png",
+ "spotlight": "unpackage/res/icons/40x40.png",
+ "spotlight@2x": "unpackage/res/icons/80x80.png"
+ },
+ "iphone": {
+ "app@2x": "unpackage/res/icons/120x120.png",
+ "app@3x": "unpackage/res/icons/180x180.png",
+ "notification@2x": "unpackage/res/icons/40x40.png",
+ "notification@3x": "unpackage/res/icons/60x60.png",
+ "settings@2x": "unpackage/res/icons/58x58.png",
+ "settings@3x": "unpackage/res/icons/87x87.png",
+ "spotlight@2x": "unpackage/res/icons/80x80.png",
+ "spotlight@3x": "unpackage/res/icons/120x120.png"
+ }
+ }
+ }
+ }
+ },
+ /* 蹇簲鐢ㄧ壒鏈夌浉鍏� */
+ "quickapp": {},
+ /* 灏忕▼搴忕壒鏈夌浉鍏� */
+ "mp-weixin": {
+ "appid": "",
+ "setting": {
+ "urlCheck": false
},
- "mp-alipay" : {
- "usingComponents" : true
- },
- "mp-baidu" : {
- "usingComponents" : true
- },
- "mp-toutiao" : {
- "usingComponents" : true
- },
- "uniStatistics" : {
- "enable" : false
- },
- "vueVersion" : "3"
+ "usingComponents": true
+ },
+ "mp-alipay": {
+ "usingComponents": true
+ },
+ "mp-baidu": {
+ "usingComponents": true
+ },
+ "mp-toutiao": {
+ "usingComponents": true
+ },
+ "uniStatistics": {
+ "enable": false
+ },
+ "vueVersion": "3"
}
diff --git a/src/pages/index.vue b/src/pages/index.vue
index 510527d..9ad0a65 100644
--- a/src/pages/index.vue
+++ b/src/pages/index.vue
@@ -202,7 +202,9 @@
<script setup>
import { computed, onMounted, ref } from "vue";
+import { onShow } from "@dcloudio/uni-app";
import { analysisCustomerContractAmounts, getBusiness } from "@/api/viewIndex";
+import { createVersionUpgradeChecker } from "@/utils/versionUpgrade";
const imgNum1 = "/static/images/index/num1.png";
const imgNum2 = "/static/images/index/num2.png";
@@ -240,6 +242,8 @@
const contractSummary = ref({ sum: "0", chain: "0", yny: "0" });
// 瀹㈡埛鍚堝悓閲戦鍒嗘瀽锛氭棤闇�绛涢�夐」锛堟寜鎺ュ彛榛樿杩斿洖灞曠ず锛�
+
+const { triggerVersionCheck } = createVersionUpgradeChecker({ logPrefix: "[version-index]" });
function toggleOverview() {
overviewExpanded.value = !overviewExpanded.value;
@@ -465,8 +469,13 @@
} catch (e) {
isCanvas2d.value = false;
}
+ triggerVersionCheck("onMounted");
loadHome();
});
+
+onShow(() => {
+ triggerVersionCheck("onShow");
+});
</script>
<style scoped lang="scss">
diff --git a/src/pages/login.vue b/src/pages/login.vue
index 806e964..6d93dfb 100644
--- a/src/pages/login.vue
+++ b/src/pages/login.vue
@@ -37,6 +37,9 @@
</up-checkbox>
</view>
</view>
+ <view class="version-wrap">
+ <text class="version-text">鐗堟湰鍙凤細{{ versionName }}</text>
+ </view>
</template>
<script setup>
@@ -59,9 +62,11 @@
import { wxLogin } from "@/api/oauth";
import { setToken } from "@/utils/auth";
import View from "@/pages/procurementManagement/procurementLedger/view.vue";
+ import config from "@/config";
const userStore = useUserStore();
const useWxLogin = ref(false); // 鏄惁浣跨敤寰俊鐧诲綍
const rememberPassword = ref(false); // 璁颁綇瀵嗙爜
+ const versionName = ref(config?.appInfo?.version || "1.0.0");
const loginForm = ref({
userName: "",
password: "",
@@ -243,6 +248,35 @@
}
// 椤甸潰鍔犺浇鏃舵鏌ユ槸鍚︽湁淇濆瓨鐨勫瘑鐮�
onMounted(() => {
+ console.log("[login-version] 寮�濮嬭幏鍙栫櫥褰曢〉鐗堟湰锛岄粯璁ゅ��:", versionName.value);
+ // #ifdef MP-WEIXIN
+ try {
+ const accountInfo = uni.getAccountInfoSync();
+ if (accountInfo?.miniProgram?.version) {
+ versionName.value = accountInfo.miniProgram.version;
+ console.log("[login-version] 褰撳墠鐜=MP-WEIXIN锛岀増鏈�=", versionName.value);
+ }
+ } catch (e) {
+ // 鑾峰彇澶辫触鏃朵娇鐢ㄩ粯璁ゅ��
+ console.log("[login-version] MP-WEIXIN 鑾峰彇鐗堟湰澶辫触:", e);
+ }
+ // #endif
+
+ // #ifdef APP-PLUS
+ try {
+ // @ts-ignore
+ if (plus?.runtime?.version) {
+ // @ts-ignore
+ versionName.value = plus.runtime.version;
+ console.log("[login-version] 褰撳墠鐜=APP-PLUS锛岀増鏈�=", versionName.value);
+ }
+ } catch (e) {
+ // 鑾峰彇澶辫触鏃朵娇鐢ㄩ粯璁ゅ��
+ console.log("[login-version] APP-PLUS 鑾峰彇鐗堟湰澶辫触:", e);
+ }
+ // #endif
+ console.log("[login-version] 鏈�缁堢増鏈彿:", versionName.value);
+
loadPassword();
getUserLoginFacotryList();
});
@@ -346,4 +380,15 @@
}
}
}
+
+ .version-wrap {
+ width: 100%;
+ text-align: center;
+ margin-top: 20px;
+ }
+
+ .version-text {
+ font-size: 12px;
+ color: #999;
+ }
</style>
diff --git a/src/pages/works.vue b/src/pages/works.vue
index 89c8d26..8289a4f 100644
--- a/src/pages/works.vue
+++ b/src/pages/works.vue
@@ -269,12 +269,15 @@
<script setup>
import { ref, onMounted, nextTick, reactive, computed } from "vue";
+ import { onShow } from "@dcloudio/uni-app";
import { userLoginFacotryList } from "@/api/login";
import { getProductWorkOrderById } from "@/api/productionManagement/productionReporting";
+ import { createVersionUpgradeChecker } from "@/utils/versionUpgrade";
import modal from "@/plugins/modal";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
+ const { triggerVersionCheck } = createVersionUpgradeChecker({ logPrefix: "[version-works]" });
const show = ref(false);
const factoryList = ref([]);
const factoryListTem = ref([]);
@@ -1131,6 +1134,7 @@
const hasEquipmentItems = computed(() => equipmentItems.length > 0);
onMounted(() => {
+ triggerVersionCheck("onMounted");
// 姣忔杩涘叆棣栭〉閮藉己鍒跺埛鏂扮敤鎴蜂俊鎭拰璺敱鏉冮檺锛屼笉鍋氭湰鍦扮紦瀛樺垽鏂�
userStore.getInfo().then(() => {
userStore
@@ -1146,6 +1150,10 @@
// 鍚姩閫氱煡鐘舵�佸畾鏃跺櫒
startStatusTimer();
});
+
+ onShow(() => {
+ triggerVersionCheck("onShow");
+ });
</script>
diff --git a/src/utils/versionUpgrade.js b/src/utils/versionUpgrade.js
new file mode 100644
index 0000000..f39a40f
--- /dev/null
+++ b/src/utils/versionUpgrade.js
@@ -0,0 +1,220 @@
+import config from "@/config";
+import { getAllVersion } from "@/api/viewIndex";
+
+function compareVersion(v1, v2) {
+ const s1 = String(v1 || "").replace(/[^\d.]/g, "").split(".").map((n) => Number(n) || 0);
+ const s2 = String(v2 || "").replace(/[^\d.]/g, "").split(".").map((n) => Number(n) || 0);
+ const len = Math.max(s1.length, s2.length);
+ for (let i = 0; i < len; i += 1) {
+ const n1 = s1[i] || 0;
+ const n2 = s2[i] || 0;
+ if (n1 > n2) return 1;
+ if (n1 < n2) return -1;
+ }
+ return 0;
+}
+
+function formatFileSize(fileSize) {
+ const size = Number(fileSize);
+ if (!Number.isFinite(size) || size <= 0) return "";
+ if (size >= 1024 * 1024 * 1024) return `${(size / (1024 * 1024 * 1024)).toFixed(2)}GB`;
+ if (size >= 1024 * 1024) return `${(size / (1024 * 1024)).toFixed(2)}MB`;
+ if (size >= 1024) return `${(size / 1024).toFixed(2)}KB`;
+ return `${size}B`;
+}
+
+function getCurrentVersion(logPrefix) {
+ let currentVersion = config?.appInfo?.version || "1.0.0";
+ console.log(`${logPrefix} 寮�濮嬭幏鍙栧綋鍓嶇増鏈紝榛樿鍊�:`, currentVersion);
+ // #ifdef MP-WEIXIN
+ try {
+ const accountInfo = uni.getAccountInfoSync();
+ if (accountInfo?.miniProgram?.version) {
+ currentVersion = accountInfo.miniProgram.version;
+ console.log(`${logPrefix} 褰撳墠鐜=MP-WEIXIN锛岀増鏈�=`, currentVersion);
+ return currentVersion;
+ }
+ } catch (e) {
+ console.log(`${logPrefix} MP-WEIXIN 鑾峰彇鐗堟湰澶辫触:`, e);
+ }
+ // #endif
+ // #ifdef APP-PLUS
+ try {
+ // @ts-ignore
+ if (plus?.runtime?.version) {
+ // @ts-ignore
+ currentVersion = plus.runtime.version;
+ console.log(`${logPrefix} 褰撳墠鐜=APP-PLUS锛岀増鏈�=`, currentVersion);
+ return currentVersion;
+ }
+ } catch (e) {
+ console.log(`${logPrefix} APP-PLUS 鑾峰彇鐗堟湰澶辫触:`, e);
+ }
+ // #endif
+ console.log(`${logPrefix} 鏈鍙栧埌杩愯鏃剁増鏈紝浣跨敤閰嶇疆鐗堟湰:`, currentVersion);
+ return currentVersion;
+}
+
+function installPackage(tempFilePath, logPrefix) {
+ console.log(`${logPrefix} 寮�濮嬪畨瑁呮洿鏂板寘锛屼复鏃惰矾寰�:`, tempFilePath);
+ // #ifdef APP-PLUS
+ // @ts-ignore
+ plus.runtime.install(
+ tempFilePath,
+ {},
+ () => {
+ console.log(`${logPrefix} 瀹夎鎴愬姛锛岀瓑寰呯敤鎴风‘璁ゆ槸鍚﹂噸鍚痐);
+ uni.showModal({
+ title: "鏇存柊瀹屾垚",
+ content: "瀹夎鍖呬笅杞芥垚鍔燂紝鏄惁绔嬪嵆閲嶅惎搴旂敤鐢熸晥锛�",
+ success: (res) => {
+ if (res.confirm) {
+ // @ts-ignore
+ plus.runtime.restart();
+ }
+ },
+ });
+ },
+ (err) => {
+ console.log(`${logPrefix} 瀹夎澶辫触:`, err);
+ uni.showToast({ title: err?.message || "瀹夎鏇存柊鍖呭け璐�", icon: "none" });
+ }
+ );
+ // #endif
+}
+
+function downloadVersionPackage(url, logPrefix) {
+ console.log(`${logPrefix} 寮�濮嬩笅杞芥洿鏂板寘:`, url);
+ uni.showLoading({ title: "鏇存柊鍖呬笅杞戒腑..." });
+ uni.downloadFile({
+ url,
+ success: (res) => {
+ console.log(`${logPrefix} 涓嬭浇缁撴灉:`, res);
+ uni.hideLoading();
+ if (res.statusCode !== 200 || !res.tempFilePath) {
+ console.log(`${logPrefix} 涓嬭浇澶辫触锛岀姸鎬佺爜鎴栦复鏃惰矾寰勫紓甯竊);
+ uni.showToast({ title: "涓嬭浇澶辫触锛岃绋嶅悗閲嶈瘯", icon: "none" });
+ return;
+ }
+ const lowerUrl = String(url || "").toLowerCase();
+ const isInstallPkg = lowerUrl.endsWith(".wgt") || lowerUrl.endsWith(".wgtu") || lowerUrl.endsWith(".apk");
+ console.log(`${logPrefix} 鏂囦欢绫诲瀷鍒ゆ柇:`, { lowerUrl, isInstallPkg });
+ if (isInstallPkg) {
+ installPackage(res.tempFilePath, logPrefix);
+ return;
+ }
+ uni.openDocument({
+ filePath: res.tempFilePath,
+ showMenu: true,
+ fail: () => {
+ console.log(`${logPrefix} 闈炲畨瑁呭寘锛宱penDocument 澶辫触锛屾彁绀虹敤鎴锋墜鍔ㄦ煡鐪媊);
+ uni.showToast({ title: "涓嬭浇鎴愬姛锛岃鍦ㄦ枃浠剁鐞嗕腑鏌ョ湅", icon: "none" });
+ },
+ });
+ },
+ fail: (err) => {
+ console.log(`${logPrefix} 涓嬭浇璇锋眰澶辫触:`, err);
+ uni.hideLoading();
+ uni.showToast({ title: "涓嬭浇澶辫触锛岃妫�鏌ョ綉缁�", icon: "none" });
+ },
+ });
+}
+
+async function checkAppVersionUpgrade(logPrefix, currentVersion) {
+ try {
+ console.log(`${logPrefix} 寮�濮嬫鏌ョ増鏈崌绾);
+ const params = {
+ records: "",
+ total: 1,
+ size: 1,
+ current: 1,
+ orders: "",
+ optimizeCountSql: true,
+ searchCount: true,
+ optimizeJoinOfCountSql: true,
+ maxLimit: 1,
+ countId: "",
+ id: 1,
+ name: "",
+ version: "",
+ createTime: "2026-04-09 10:10:33",
+ updateTime: "2026-04-09 10:10:33",
+ createUser: 1,
+ updateUser: 1,
+ tenantId: 1,
+ };
+ console.log(`${logPrefix} 鏌ヨ鍙傛暟:`, params);
+ const res = await getAllVersion(params);
+ console.log(`${logPrefix} 鎺ュ彛杩斿洖:`, res);
+ const first = Array.isArray(res?.rows)
+ ? res.rows[0]
+ : Array.isArray(res?.data?.records)
+ ? res.data.records[0]
+ : Array.isArray(res?.data)
+ ? res.data[0]
+ : res?.data;
+ if (!first) {
+ console.log(`${logPrefix} 鏈幏鍙栧埌绗竴鏉$増鏈暟鎹紝缁撴潫妫�鏌);
+ return;
+ }
+ console.log(`${logPrefix} 绗竴鏉$増鏈暟鎹�:`, first);
+ const latestVersion = String(first?.version || "");
+ if (!latestVersion) {
+ console.log(`${logPrefix} 绗竴鏉℃暟鎹棤鐗堟湰鍙凤紝缁撴潫妫�鏌);
+ return;
+ }
+ const compareResult = compareVersion(latestVersion, currentVersion);
+ console.log(`${logPrefix} 鐗堟湰姣旇緝:`, { currentVersion, latestVersion, compareResult });
+ if (compareResult <= 0) {
+ console.log(`${logPrefix} 褰撳墠宸叉槸鏈�鏂扮増鏈紝鏃犻渶鏇存柊`);
+ return;
+ }
+ const firstFile = Array.isArray(first?.commonFileList) ? first.commonFileList[0] : null;
+ const downloadUrl = firstFile?.url || "";
+ const fileSizeText = formatFileSize(firstFile?.fileSize);
+ console.log(`${logPrefix} 鏇存柊闄勪欢淇℃伅:`, {
+ downloadUrl,
+ fileSize: firstFile?.fileSize,
+ fileSizeText,
+ firstFile,
+ });
+ const desc = fileSizeText ? `锛屾洿鏂板寘澶у皬绾� ${fileSizeText}` : "";
+ uni.showModal({
+ title: "鍙戠幇鏂扮増鏈�",
+ content: `褰撳墠鐗堟湰 ${currentVersion}锛屾渶鏂扮増鏈� ${latestVersion}${desc}锛屾槸鍚︾珛鍗充笅杞斤紵`,
+ confirmText: "绔嬪嵆涓嬭浇",
+ success: (modalRes) => {
+ console.log(`${logPrefix} 鏇存柊寮圭獥鎿嶄綔:`, modalRes);
+ if (!modalRes.confirm) return;
+ if (!downloadUrl) {
+ console.log(`${logPrefix} 鐢ㄦ埛纭鏇存柊锛屼絾闄勪欢鍦板潃涓虹┖`);
+ uni.showToast({ title: "鏈壘鍒版洿鏂伴檮浠跺湴鍧�", icon: "none" });
+ return;
+ }
+ downloadVersionPackage(downloadUrl, logPrefix);
+ },
+ });
+ } catch (e) {
+ console.log(`${logPrefix} 鐗堟湰妫�鏌ュけ璐�:`, e);
+ }
+}
+
+export function createVersionUpgradeChecker(options = {}) {
+ const throttleMs = Number(options.throttleMs) > 0 ? Number(options.throttleMs) : 3000;
+ const logPrefix = options.logPrefix || "[version]";
+ let lastVersionCheckAt = 0;
+
+ const triggerVersionCheck = (from = "unknown") => {
+ const now = Date.now();
+ if (now - lastVersionCheckAt < throttleMs) {
+ console.log(`${logPrefix} 璺宠繃閲嶅妫�鏌ワ紝鏉ユ簮=${from}`);
+ return;
+ }
+ lastVersionCheckAt = now;
+ console.log(`${logPrefix} 瑙﹀彂鐗堟湰妫�鏌ワ紝鏉ユ簮=${from}`);
+ const currentVersion = getCurrentVersion(logPrefix);
+ checkAppVersionUpgrade(logPrefix, currentVersion);
+ };
+
+ return { triggerVersionCheck };
+}
--
Gitblit v1.9.3