diff --git a/web/src/components/AppFooter.vue b/web/src/components/AppFooter.vue index 60965cf..447023d 100644 --- a/web/src/components/AppFooter.vue +++ b/web/src/components/AppFooter.vue @@ -41,9 +41,9 @@ const statusConfig = { text: "有更新", }, error: { - color: "#909399", - icon: undefined, - text: "", + color: "#d03050", + icon: WarningOutline, + text: "检查失败", }, }; @@ -68,7 +68,10 @@ const checkVersion = async () => { }; const handleVersionClick = () => { - if (versionInfo.value.status === "update-available" && versionInfo.value.releaseUrl) { + if ( + (versionInfo.value.status === "update-available" || versionInfo.value.status === "latest") && + versionInfo.value.releaseUrl + ) { window.open(versionInfo.value.releaseUrl, "_blank", "noopener,noreferrer"); } }; @@ -95,7 +98,8 @@ onMounted(() => {
{ {{ formatVersion(versionInfo.currentVersion) }} - - - +
diff --git a/web/src/services/version.ts b/web/src/services/version.ts index 47dbb9c..2dccf84 100644 --- a/web/src/services/version.ts +++ b/web/src/services/version.ts @@ -45,6 +45,12 @@ class VersionService { return null; } + // 检查缓存中的版本号是否与当前应用版本号一致 + if (versionInfo.currentVersion !== this.currentVersion) { + this.clearCache(); + return null; + } + return versionInfo; } catch (error) { console.warn("Failed to parse cached version info:", error); @@ -144,6 +150,9 @@ class VersionService { versionInfo.isLatest = comparison >= 0; versionInfo.hasUpdate = comparison < 0; versionInfo.status = comparison < 0 ? "update-available" : "latest"; + + // 只在成功时缓存结果 + this.setCachedVersionInfo(versionInfo); } else { versionInfo.status = "error"; } @@ -152,9 +161,6 @@ class VersionService { versionInfo.status = "error"; } - // 缓存结果 - this.setCachedVersionInfo(versionInfo); - return versionInfo; }