fix: 版本检查 — 后端设置 checked 字段 + 前端 info 合并显示
- UpdateService.status 增加 checked/current_version/latest_version - _check_version 成功后设置 checked=True - 设置页 update-notes 合并版本信息和时间戳 (替代 innerHTML 覆盖) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -77,7 +77,8 @@ class UpdateService:
|
|||||||
self._task: Optional[asyncio.Task] = None
|
self._task: Optional[asyncio.Task] = None
|
||||||
self._running = False
|
self._running = False
|
||||||
self.status: dict = {"state": "idle", "progress": 0, "error": "",
|
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:
|
try:
|
||||||
init = self.sm.get_service("init")
|
init = self.sm.get_service("init")
|
||||||
@@ -109,6 +110,7 @@ class UpdateService:
|
|||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
data = await loop.run_in_executor(None, self._sync_fetch_json, self.version_url)
|
data = await loop.run_in_executor(None, self._sync_fetch_json, self.version_url)
|
||||||
self.status["last_check"] = time.time()
|
self.status["last_check"] = time.time()
|
||||||
|
self.status["checked"] = True
|
||||||
if not data:
|
if not data:
|
||||||
return
|
return
|
||||||
remote_fw = data.get("framework", {})
|
remote_fw = data.get("framework", {})
|
||||||
|
|||||||
@@ -93,12 +93,13 @@
|
|||||||
var r = await fetch("./api/updates"), d = await r.json();
|
var r = await fetch("./api/updates"), d = await r.json();
|
||||||
document.getElementById("ver-current").textContent = d.current_version || d.latest_version || "?";
|
document.getElementById("ver-current").textContent = d.current_version || d.latest_version || "?";
|
||||||
var badge = document.getElementById("ver-badge");
|
var badge = document.getElementById("ver-badge");
|
||||||
|
var notesHtml = "";
|
||||||
if (d.update_available) {
|
if (d.update_available) {
|
||||||
badge.textContent = "↻ " + d.latest_version + " 可用";
|
badge.textContent = "↻ " + d.latest_version + " 可用";
|
||||||
badge.style.background = "var(--success,#4caf50)";
|
badge.style.background = "var(--success,#4caf50)";
|
||||||
badge.style.color = "#fff";
|
badge.style.color = "#fff";
|
||||||
document.getElementById("btn-apply").style.display = "inline-block";
|
document.getElementById("btn-apply").style.display = "inline-block";
|
||||||
document.getElementById("update-notes").innerHTML = d.latest_version ? "最新版本: <b>"+esc(d.latest_version)+"</b>" : "";
|
notesHtml = d.latest_version ? "最新版本: <b>"+esc(d.latest_version)+"</b>" : "";
|
||||||
} else if (d.checked) {
|
} else if (d.checked) {
|
||||||
badge.textContent = "✓ 已是最新";
|
badge.textContent = "✓ 已是最新";
|
||||||
badge.style.background = "var(--md-sys-color-surface-container-lowest)";
|
badge.style.background = "var(--md-sys-color-surface-container-lowest)";
|
||||||
@@ -108,8 +109,9 @@
|
|||||||
badge.textContent = "⏳ 等待检查...";
|
badge.textContent = "⏳ 等待检查...";
|
||||||
}
|
}
|
||||||
if (d.last_check) {
|
if (d.last_check) {
|
||||||
document.getElementById("update-notes").innerHTML += " <span style='font-size:.75rem;color:var(--text-dim)'>上次检查: "+new Date(d.last_check*1000).toLocaleString()+"</span>";
|
notesHtml += (notesHtml ? " | " : "") + "上次检查: "+new Date(d.last_check*1000).toLocaleString();
|
||||||
}
|
}
|
||||||
|
document.getElementById("update-notes").innerHTML = notesHtml;
|
||||||
} catch(e) {}
|
} catch(e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user