From 82c4ae8a84c090a0e91383b909ca9449224910d7 Mon Sep 17 00:00:00 2001 From: "jif2.zhang" Date: Wed, 28 Oct 2026 18:32:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E9=A1=B9=E7=9B=AE=E8=AE=BE=E7=BD=AE):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E3=80=8C=E9=9A=90=E8=97=8F=E7=9A=84=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=87=AA=E5=8A=A8=E5=BD=92=E6=A1=A3=E3=80=8D=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=88=90=E5=8A=9F=E4=BD=86=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 现象: 项目设置 -> 归档设置 -> 隐藏的任务自动归档, 选完档位提示「已保存」, 重新打开仍是「永不」, 且不会产生任何归档。 根因 (读写两条路都断了, 缺一不可): 1. 读: projectSummary() 没有回传 autoArchive, 而 ProjectManage 读的是 project.autoArchive -> 永远是 undefined -> 界面恒显示默认值「永不」; 2. 写: projectApi.update() 的字段白名单里没有 autoArchive 分支 (只有 name/code/taskKinds/icon/archived/notes), 传进来直接被忽略, data 为空 -> 一条 SQL 都不执行 -> 但函数正常返回, 调用方照常弹「已保存」。 服务端一直是对的: powersync 上传分支处理了 autoArchive, REST 也有校验, 所以不是同步丢字段。 修复: - projectSummary 增加 autoArchive: p.autoArchive || 'never'; - projectApi.update 增加 autoArchive 分支, 校验取值与 AUTO_ARCHIVE_OPTIONS 同口径。 验证 (真实 Windows 外壳, 临时暴露 API 直调被修改的函数): - update({autoArchive:'3d'}) 返回 3d; 重新 list/detail 仍为 3d (已落库); - 进项目设置, 该行显示「一周后 ›」(设成 1w 后), 不再恒为「永不」; - 还原为 never 后界面同步回「永不」。 - 顺带确认「同样隐藏已完成」的列级设置 retention 读写都正常: Done 列 retention=3d, 服务端 26 条已完成中 9 条超 3 天, App 实际只返回 14 条 -> 过滤本身是生效的, 此前不生效的只有自动归档档位。 - 控制台无异常; 验证用的临时钩子已移除。 --- src/api/task.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/api/task.js b/src/api/task.js index 285ff57..b4190a6 100644 --- a/src/api/task.js +++ b/src/api/task.js @@ -142,6 +142,8 @@ function projectSummary(p, memberCount, taskCount) { updatedAt: p.updatedAt, taskKinds: normTaskKinds(parseJson(p.taskKinds, null)) || DEFAULT_TASK_KINDS, icon: p.icon || null, + // 自动归档档位 (T-ARC-02): 必须回传给前端, 否则该设置在界面上永远显示默认的「永不」 + autoArchive: p.autoArchive || 'never', memberCount, taskCount, } @@ -275,6 +277,11 @@ export const projectApi = { content: String(n?.content ?? '').slice(0, 20000), }))) } + if (body?.autoArchive !== undefined) { + // 自动归档档位 (T-ARC-02): 与服务端 AUTO_ARCHIVE_OPTIONS 同口径 + if (!['3d', '1w', '1m', 'never'].includes(body.autoArchive)) throw new Error('自动归档档位非法') + data.autoArchive = body.autoArchive + } const sets = Object.keys(data).map((k) => `"${k}" = ?`) if (sets.length) { await db().execute(