From e57b7902be9f5791fbcee9591bff928217fef039 Mon Sep 17 00:00:00 2001 From: "jif2.zhang" Date: Sat, 24 Oct 2026 09:53:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=93=E5=8D=A1=E9=A1=B5?= =?UTF-8?q?=E6=89=80=E6=9C=89=E6=89=93=E5=8D=A1/=E5=86=8D=E6=89=93?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E6=8C=89=E9=92=AE=E7=82=B9=E4=B8=8D=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 回归原因: 合并视图引入 doCheck 时加了 `if (!item.canCheck || isFuture) return`. 但 canCheck 字段**只有 /day 接口返回**, 本视图数据取自 /habits, 该接口 不返回 canCheck → item.canCheck === undefined → !undefined === true → 每个按钮点击都在第一行直接 return, 表现为"点不动". 修复: doCheck 只按 isFuture 拦截, 与后端 POST /habits/:id/check 的校验 口径一致 (后端只拒绝未来日期与超过补打窗口的日期). 影响范围: 打卡按钮、再打一次按钮、环形点击 (三处共用 doCheck). --- src/pages/checkin/MergedView.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/checkin/MergedView.jsx b/src/pages/checkin/MergedView.jsx index 758f1f4..884afe3 100644 --- a/src/pages/checkin/MergedView.jsx +++ b/src/pages/checkin/MergedView.jsx @@ -101,7 +101,9 @@ export default function MergedView({ date, onDateChange }) { // ---------- 打卡 / 撤销 (乐观更新) ---------- async function doCheck(item) { - if (!item.canCheck || isFuture) return + // 只按"是否未来日期"拦截. 不能判 item.canCheck —— 该字段仅 /day 接口返回, + // 本视图数据来自 /habits (不含 canCheck), 用它会把所有打卡按钮全部禁用. + if (isFuture) return const before = detail setDetail((d) => ({ ...d,