diff --git a/src/pages/common/PageHome.vue b/src/pages/common/PageHome.vue index aa644d76..82b16360 100644 --- a/src/pages/common/PageHome.vue +++ b/src/pages/common/PageHome.vue @@ -84,6 +84,7 @@ import { invoke } from "@tauri-apps/api/core"; import { openUrl } from "@tauri-apps/plugin-opener"; import getLrv from "@utils/Github.js"; import TGLogger from "@utils/TGLogger.js"; +import { compareVersions } from "@utils/toolFunc.js"; import { storeToRefs } from "pinia"; import { defineComponent, onMounted, ref, shallowRef, watch } from "vue"; @@ -221,11 +222,17 @@ async function checkAppUpdate(): Promise { const versionApp = await getVersion(); const versionCheck = await getLrv(); if (versionCheck === "0") return; - if (versionCheck === versionApp) { + const versionCompare = compareVersions(versionApp, versionCheck); + if (versionCompare === 0) { await TGLogger.Info(`[Home][CheckAppUpdate]版本号一致:${versionCheck}`); lastUcts.value = nowTs; return; } + if (versionCompare > 0) { + await TGLogger.Info(`[Home][CheckAppUpdate]当前版本${versionApp}比远程版本${versionCheck}更新`); + lastUcts.value = nowTs; + return; + } await TGLogger.Info(`[Home][CheckAppUpdate]检测到新版本:${versionCheck}`); const check = await showDialog.checkF({ title: "检测到新版本", diff --git a/src/utils/toolFunc.ts b/src/utils/toolFunc.ts index 0a153576..a410e8de 100644 --- a/src/utils/toolFunc.ts +++ b/src/utils/toolFunc.ts @@ -1,6 +1,6 @@ /** * 一些工具函数 - * @since Beta v0.9.5 + * @since Beta v0.10.2 */ import { tz } from "@date-fns/tz"; @@ -392,6 +392,30 @@ export function validEmail(email: string): boolean { return emailRegex.test(email); } +/** + * 比较两个语义化版本号 + * @since Beta v0.10.2 + * @param v1 - 版本号1(当前应用版本) + * @param v2 - 版本号2(远程最新版本) + * @returns 比较结果:1表示v1更新,-1表示v2更新,0表示相同 + * @example compareVersions("0.10.1", "0.10.0") // 返回 1 + * @example compareVersions("0.9.9", "0.10.0") // 返回 -1 + * @example compareVersions("0.10.0", "0.10.0") // 返回 0 + */ +export function compareVersions(v1: string, v2: string): number { + const parts1 = v1.split(".").map(Number); + const parts2 = v2.split(".").map(Number); + const maxLength = Math.max(parts1.length, parts2.length); + + for (let i = 0; i < maxLength; i++) { + const num1 = parts1[i] || 0; + const num2 = parts2[i] || 0; + if (num1 > num2) return 1; + if (num1 < num2) return -1; + } + return 0; +} + /** * 传入时间字符串跟对应时区,转成utc8时间字符串 * @since Beta v0.9.5