From 71c03a907dfdfdbcfe571ec3c13682a13f4ed6eb Mon Sep 17 00:00:00 2001 From: root Date: Tue, 18 Aug 2026 20:05:04 +0800 Subject: [PATCH] =?utf8?q?fix:=20=E5=90=8C=E6=AD=A5=E6=8B=89=E5=8F=96?= =?utf8?q?=E6=97=B6=E6=8C=89=E6=97=A5=E6=9C=9FLWW=E8=A6=86=E7=9B=96?= =?utf8?q?=E6=9C=AC=E5=9C=B0=E8=BF=9B=E5=BA=A6=E6=97=B6=E9=97=B4,=20?= =?utf8?q?=E8=AE=A9=E9=A6=96=E9=A1=B5=E8=BF=9B=E5=BA=A6=E4=B8=8E=E4=BA=91?= =?utf8?q?=E7=AB=AF=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit - 之前 pull 仅在本地缺失时才补入, 导致服务端已修正的 log_date(如时区误记) 不会回写本地 IndexedDB, 首页进度页仍显示旧 UTC 日期 - 改为本地已存在(同 group,op)时, 若云端日期更新则覆盖本地 completed_at(只升不降, 按日期比较) - 日期比较避免触碰其他历史记录; 仅云端日期确实更晚的(如本次 8/17->8/18)被更新 --- frontend/src/sync.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/frontend/src/sync.js b/frontend/src/sync.js index f5521fd..a7c30ca 100644 --- a/frontend/src/sync.js +++ b/frontend/src/sync.js @@ -57,13 +57,24 @@ export async function syncNow() { const pullResp = await api.syncPull(); const serverEvents = pullResp.data.events || []; const localAll = await getAllProgress(); - const localKeys = new Set(localAll.map(p => p.key)); for (const ev of serverEvents) { const key = `${ev.group_id}:${ev.op_type}`; - if (!localKeys.has(key)) { + const local = localAll.find(p => p.key === key); + if (!local) { + // 本地缺失: 直接补入(布尔并集) await putProgress(ev.group_id, ev.op_type, ev.completed_at, false); result.pulled++; result.pulledEvents.push(ev); + } else { + // 本地已存在: 若云端日期更新(如服务端修正了时区误记), + // 用云端日期覆盖本地显示时间, 让首页进度与云端一致(LWW, 只升不降, 按日期比较) + const localDate = (local.completed_at || '').slice(0, 10); + const serverDate = (ev.completed_at || '').slice(0, 10); + if (serverDate > localDate) { + await putProgress(ev.group_id, ev.op_type, ev.completed_at, false); + result.pulled++; + result.pulledEvents.push(ev); + } } } -- 2.43.0