From 94d56d8210625445a7055baa2eb38b0a0b0376c5 Mon Sep 17 00:00:00 2001 From: qinglong Date: Sat, 13 Jun 2026 21:29:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=89=88=E6=9C=AC=E6=A3=80=E6=9F=A5=20?= =?UTF-8?q?=E2=80=94=20=E5=90=8E=E7=AB=AF=E8=AE=BE=E7=BD=AE=20checked=20?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=20+=20=E5=89=8D=E7=AB=AF=20info=20=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UpdateService.status 增加 checked/current_version/latest_version - _check_version 成功后设置 checked=True - 设置页 update-notes 合并版本信息和时间戳 (替代 innerHTML 覆盖) Co-Authored-By: Claude --- services/update_service.py | 4 +++- static/web_panel/pages/settings.html | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/services/update_service.py b/services/update_service.py index 3bbb2e6..2a197a5 100644 --- a/services/update_service.py +++ b/services/update_service.py @@ -77,7 +77,8 @@ class UpdateService: self._task: Optional[asyncio.Task] = None self._running = False self.status: dict = {"state": "idle", "progress": 0, "error": "", - "last_check": 0, "update_available": False} + "last_check": 0, "checked": False, "update_available": False, + "current_version": "", "latest_version": ""} # 从配置读取分支和仓库地址 try: init = self.sm.get_service("init") @@ -109,6 +110,7 @@ class UpdateService: loop = asyncio.get_event_loop() data = await loop.run_in_executor(None, self._sync_fetch_json, self.version_url) self.status["last_check"] = time.time() + self.status["checked"] = True if not data: return remote_fw = data.get("framework", {}) diff --git a/static/web_panel/pages/settings.html b/static/web_panel/pages/settings.html index 5d72ca1..7ed21c2 100644 --- a/static/web_panel/pages/settings.html +++ b/static/web_panel/pages/settings.html @@ -93,12 +93,13 @@ var r = await fetch("./api/updates"), d = await r.json(); document.getElementById("ver-current").textContent = d.current_version || d.latest_version || "?"; var badge = document.getElementById("ver-badge"); + var notesHtml = ""; if (d.update_available) { badge.textContent = "↻ " + d.latest_version + " 可用"; badge.style.background = "var(--success,#4caf50)"; badge.style.color = "#fff"; document.getElementById("btn-apply").style.display = "inline-block"; - document.getElementById("update-notes").innerHTML = d.latest_version ? "最新版本: "+esc(d.latest_version)+"" : ""; + notesHtml = d.latest_version ? "最新版本: "+esc(d.latest_version)+"" : ""; } else if (d.checked) { badge.textContent = "✓ 已是最新"; badge.style.background = "var(--md-sys-color-surface-container-lowest)"; @@ -108,8 +109,9 @@ badge.textContent = "⏳ 等待检查..."; } if (d.last_check) { - document.getElementById("update-notes").innerHTML += " 上次检查: "+new Date(d.last_check*1000).toLocaleString()+""; + notesHtml += (notesHtml ? " | " : "") + "上次检查: "+new Date(d.last_check*1000).toLocaleString(); } + document.getElementById("update-notes").innerHTML = notesHtml; } catch(e) {} }