fix: 恢复成功后整体替换待写队列,修首屏自愈抢跑写空

This commit is contained in:
2026-11-02 23:30:30 +08:00
parent 62f5168dfe
commit ff1abee438
9 changed files with 101 additions and 43 deletions
+8 -5
View File
@@ -1433,7 +1433,9 @@ function WorktableSection(props: any) {
useEffect(() => {
let cancelled = false
void (async () => {
const res = await loadHostState()
let localAt = 0
try { localAt = Number(localStorage.getItem(SAVED_AT_KEY) ?? '0') || 0 } catch {}
const res = await loadHostState(localAt)
if (cancelled) return
if (!res.reachable) {
// 读不到就不写:宁可本次只在本地,也不拿空状态覆盖宿主镜像
@@ -1442,15 +1444,16 @@ function WorktableSection(props: any) {
return
}
const host = res.state
let localAt = 0
try { localAt = Number(localStorage.getItem(SAVED_AT_KEY) ?? '0') || 0 } catch {}
const hostAt = typeof host?.updatedAt === 'number' ? host.updatedAt : 0
if (host && hostAt > localAt) {
if (host.projects) persistProjects(normalizeProjects(host.projects))
if (host.view) persistView(normalizeView(host.view))
// 以宿主为准:作废首屏自愈等早于恢复的待写内容,避免半截空值回写
markHydrated({ projects: host.projects, view: host.view })
} else {
// 本地更新或宿主还没有镜像:什么都不发,等用户真的改动再写
markHydrated(null)
}
markHydrated(host ? { projects: host.projects, view: host.view } : {})
if (hostAt <= localAt) flushHostSave()
})()
const flush = () => flushHostSave()
window.addEventListener('pagehide', flush)