现象: 项目设置 -> 归档设置 -> 隐藏的任务自动归档, 选完档位提示「已保存」,
重新打开仍是「永不」, 且不会产生任何归档。
根因 (读写两条路都断了, 缺一不可):
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 条 -> 过滤本身是生效的, 此前不生效的只有自动归档档位。
- 控制台无异常; 验证用的临时钩子已移除。
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user