From d41fd9347b2ec9a40286a7921f4909ac0b0f4ecc Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期三, 16 九月 2026 15:48:02 +0800
Subject: [PATCH] fix: 修复版本检测逻辑,重构激活页面并更新版本至1.1.6
---
components/admin/AdminConfigPanel.vue | 23 +++++++
pages/device-init/index.vue | 110 ++++++++++++++++++++++--------------
manifest.json | 2
pages/home/index.vue | 23 +++++++
4 files changed, 112 insertions(+), 46 deletions(-)
diff --git a/components/admin/AdminConfigPanel.vue b/components/admin/AdminConfigPanel.vue
index 0c71037..db37050 100644
--- a/components/admin/AdminConfigPanel.vue
+++ b/components/admin/AdminConfigPanel.vue
@@ -269,6 +269,27 @@
return String(version || '').trim().replace(/^[vV]/, '');
};
+const compareVersionNumber = (currentVersion = '', targetVersion = '') => {
+ const currentParts = normalizeVersionNumber(currentVersion).split('.');
+ const targetParts = normalizeVersionNumber(targetVersion).split('.');
+ const maxLength = Math.max(currentParts.length, targetParts.length);
+
+ for (let index = 0; index < maxLength; index += 1) {
+ const currentValue = Number(currentParts[index] || 0);
+ const targetValue = Number(targetParts[index] || 0);
+
+ if (targetValue > currentValue) {
+ return -1;
+ }
+
+ if (targetValue < currentValue) {
+ return 1;
+ }
+ }
+
+ return 0;
+};
+
const normalizeIpValue = (value = '') => {
return String(value).trim().replace(/^https?:\/\//, '');
};
@@ -721,7 +742,7 @@
latestVersionInfo.value = versionData;
latestVersion.value = versionStr;
- hasNewVersion.value = Boolean(versionStr && versionStr !== normalizeVersionNumber(currentVersion.value));
+ hasNewVersion.value = Boolean(versionStr && compareVersionNumber(currentVersion.value, versionStr) < 0);
}
} catch (error) {
console.error('获取最新版本失败:', error);
diff --git a/manifest.json b/manifest.json
index a6a7a1e..8232ee7 100644
--- a/manifest.json
+++ b/manifest.json
@@ -2,7 +2,7 @@
"name" : "访客机终端",
"appid" : "__UNI__81507A6",
"description" : "访客机终端静态页面示例",
- "versionName" : "1.0.0",
+ "versionName" : "1.1.6",
"versionCode" : "100",
"transformPx" : false,
"app-plus" : {
diff --git a/pages/device-init/index.vue b/pages/device-init/index.vue
index ebddf32..eec45d4 100644
--- a/pages/device-init/index.vue
+++ b/pages/device-init/index.vue
@@ -62,6 +62,23 @@
formRows[2].value = '';
};
+const restorePreviousServerConfig = (previousServerConfig) => {
+ if (previousServerConfig.ip && previousServerConfig.port) {
+ setRequestServerConfig(previousServerConfig);
+ return;
+ }
+
+ clearRequestServerConfig();
+};
+
+const getErrorMessage = (error, fallbackMessage) => {
+ if (typeof error === 'string' && error) {
+ return error;
+ }
+
+ return error?.msg || error?.message || fallbackMessage;
+};
+
const goHome = async () => {
if (isSubmitting.value) {
return;
@@ -104,57 +121,64 @@
return;
}
- try {
- isSubmitting.value = true;
+ isSubmitting.value = true;
- uni.showLoading({
- title: '激活中...',
- mask: true,
- });
+ uni.setStorageSync('device_id', machineId);
+ uni.setStorageSync('device_fingerprint', deviceFingerprint.value);
- // 先写入公共服务地址,后续所有接口统一复用
- setRequestServerConfig({
- ip,
- port,
- });
+ uni.showLoading({
+ title: '激活中...',
+ mask: true,
+ });
- // 激活接口只关心业务参数,地址由公共请求层统一处理
- await activateVisitMachine({
- machineId,
- fingerprint: deviceFingerprint.value,
- });
+ // 先写入服务地址,后续请求统一走公共请求层。
+ setRequestServerConfig({
+ ip,
+ port,
+ });
- await HardwareAPI.offlineActivateDevice({
- code: deviceFingerprint.value,
- });
+ // 先调平台激活接口,失败时直接提示并回滚地址配置。
+ const activateError = await activateVisitMachine({
+ machineId,
+ fingerprint: deviceFingerprint.value,
+ }).then(() => null).catch((error) => error);
- uni.setStorageSync('device_id', machineId);
- uni.setStorageSync('device_fingerprint', deviceFingerprint.value);
- uni.hideLoading();
-
- setTimeout(() => {
- uni.redirectTo({
- url: '/pages/home/index',
- });
- }, 300);
- } catch (error) {
- console.error('设备激活失败:', error);
- uni.hideLoading();
-
- if (previousServerConfig.ip && previousServerConfig.port) {
- setRequestServerConfig(previousServerConfig);
- } else {
- clearRequestServerConfig();
- }
-
- uni.showToast({
- title: error?.msg || '激活失败,请检查网络或服务地址',
- icon: 'none',
- });
- } finally {
+ if (activateError) {
+ console.error('设备联网激活失败:', activateError);
+ restorePreviousServerConfig(previousServerConfig);
uni.hideLoading();
isSubmitting.value = false;
+ uni.showToast({
+ title: getErrorMessage(activateError, '激活失败,请检查网络或服务地址'),
+ icon: 'none',
+ });
+ return;
}
+
+ // 联网激活成功后,再写入本地离线激活信息。
+ const offlineActivateError = await HardwareAPI.offlineActivateDevice({
+ code: deviceFingerprint.value,
+ }).then(() => null).catch((error) => error);
+
+ if (offlineActivateError) {
+ console.error('设备离线激活失败:', offlineActivateError);
+ restorePreviousServerConfig(previousServerConfig);
+ uni.hideLoading();
+ isSubmitting.value = false;
+ uni.showToast({
+ title: getErrorMessage(offlineActivateError, '本地激活失败,请联系工作人员'),
+ icon: 'none',
+ });
+ return;
+ }
+ uni.hideLoading();
+ isSubmitting.value = false;
+
+ setTimeout(() => {
+ uni.redirectTo({
+ url: '/pages/home/index',
+ });
+ }, 300);
};
</script>
diff --git a/pages/home/index.vue b/pages/home/index.vue
index ca6f45d..79120da 100644
--- a/pages/home/index.vue
+++ b/pages/home/index.vue
@@ -114,6 +114,27 @@
return String(version || '').trim().replace(/^[vV]/, '');
};
+const compareVersionNumber = (currentVersion = '', targetVersion = '') => {
+ const currentParts = normalizeVersionNumber(currentVersion).split('.');
+ const targetParts = normalizeVersionNumber(targetVersion).split('.');
+ const maxLength = Math.max(currentParts.length, targetParts.length);
+
+ for (let index = 0; index < maxLength; index += 1) {
+ const currentValue = Number(currentParts[index] || 0);
+ const targetValue = Number(targetParts[index] || 0);
+
+ if (targetValue > currentValue) {
+ return -1;
+ }
+
+ if (targetValue < currentValue) {
+ return 1;
+ }
+ }
+
+ return 0;
+};
+
const getDismissedUpdateVersion = () => {
return normalizeVersionNumber(uni.getStorageSync(HOME_UPDATE_DIALOG_DISMISSED_VERSION_KEY) || '');
};
@@ -755,7 +776,7 @@
const versionData = typeof res.data === 'object' ? res.data : {};
const latestVersion = normalizeVersionNumber(versionData.versionNo || '');
- const isNewVersion = Boolean(latestVersion && latestVersion !== currentVersion);
+ const isNewVersion = Boolean(latestVersion && compareVersionNumber(currentVersion, latestVersion) < 0);
if (!isNewVersion) {
return;
}
--
Gitblit v1.7.1