laoyang
20ba36ad62
修截止时间时/分保存不上:改为读 AntD 可见框 (#77)
用户 2026-11-05:「截止日期的时间保存有bug,时和分没保存上。」
根因:save-attrs 原来直接读 .dt-hour / .dt-minute 的 value。
那两个 <select> 是 AntD 挂上后**被 CSS 收起**的镜像(.dt-input.is-antd
> .dt-native { display:none }),它们的值依赖 mountAntdSingleDT 的
writeBack() 写回 —— 而 writeBack 走 writeDT(box, str),str 来自 antd
的 onChange 第二参数。
用 Playwright + 站点真实 app.js/antd 实测发现问题:
· 只给 select 放一个 option 时,writeDT 写入不存在的值 → value 变空串;
· 时序上(首屏挂载 / 面板 AJAX 换入 / 受控重渲染)隐藏字段可能滞后于
用户看到的那个值。
⇒ 读隐藏字段本质上是"读镜像",镜像一旦滞后或缺失,时分就丢。
修法:新增 readDue(),按优先级读:
① AntD 的可见输入框 .ant-picker-input > input(用户实际看到/改的那一个,
格式 YYYY-MM-DD HH:mm)—— 这是唯一权威来源;
② 没有 AntD(降级成原生下拉)时才读 .dt-date/.dt-hour/.dt-minute;
③ 都没有 → 空(= 清掉截止时间)。
AntD 的框是只读文本框(用户通过弹层选,不能直接打字),
所以解析它的 text 不会碰到"敲了半截日期"的中间态。
实测(Playwright 复刻完整 mountAntdSingleDT + readDue):
AntD 可见框 = 2026-10-16 20:30
隐藏 hour/min = 20 / 30
readDue 结果 = 2026-10-16 20:30:00 ✅
服务端侧已确认无需改动:Task::dtOrNull 会把
YYYY-MM-DD HH:mm 补秒成 YYYY-MM-DD HH:mm:ss,
YYYY-MM-DD 补成 00:00:00,格式非法才回 null。
2026-11-05 18:12:44 +08:00
..
2026-10-22 22:05:17 +08:00
2026-11-05 12:40:57 +08:00
2026-11-05 17:38:51 +08:00
2026-11-01 09:04:35 +08:00
2026-10-25 14:52:43 +08:00
2026-11-05 18:07:17 +08:00
2026-10-03 19:27:14 +08:00
2026-10-08 14:46:16 +08:00
2026-10-18 11:22:34 +08:00
2026-10-15 23:04:25 +08:00
2026-10-09 07:25:08 +08:00
2026-10-12 00:24:20 +08:00
2026-11-05 13:19:05 +08:00
2026-10-22 12:40:14 +08:00
2026-11-05 18:12:44 +08:00
2026-10-19 17:27:37 +08:00