现象(读码确认,尚未真机复现)
packages/fields/src/widgets/GridField.tsx:763 内嵌子表的单元格输入:
type={c.type === 'date' ? 'date' : isNumeric(c.type) ? 'number' : 'text'}
...
value={val != null ? String(val) : ''}
当列类型是 date 而值是 ISO 形状(2026-06-17T00:00:00.000Z)时,String(val) 原样喂进 <input type="date">。该控件只接受 YYYY-MM-DD,其余形状静默拒收:属性照样落进 DOM,input.value 读回空串,单元格画成空占位。
即 #3127 在子表面上的同一个缺口。#3127 修的是 DateTimeField / DateField 两个独立 widget,GridField 自己手搓 cell input,不走那条路径,所以没被覆盖到。
预期
子表 date 列应与 DateField 一致:显示存量日历日,且不因时区把日期左移一天。
建议改法
复用 #3127 落地的 packages/fields/src/widgets/nativeDateValue.ts:
value={c.type === 'date' ? toDateInputValue(val) : (val != null ? String(val) : '')}
toDateInputValue 对开头是 YYYY-MM-DD 的串原样透传(避免 date-only 被按 UTC 午夜解析后整体差一天),其余形状按本地日历分量渲染。
写回侧这里不需要配对转换 —— onChange 交出的就是控件自己的 YYYY-MM-DD,与 DateField 的约定一致。
待办
出处
排查 #3127 时顺带扫到的同族面,按范围纪律未并进那一单(PR #3565)。同批已排除的干净面:plugin-gantt 内联日期编辑(GanttView.tsx:3559 用 toLocaleDateString('en-CA') 生成 YYYY-MM-DD)、UserFilters / FilterUI / action-param-dialog / RecordPickerDialog(初值本来就是空的,不适用)。
Blocked-by: #3565
Generated by Claude Code
现象(读码确认,尚未真机复现)
packages/fields/src/widgets/GridField.tsx:763内嵌子表的单元格输入:当列类型是
date而值是 ISO 形状(2026-06-17T00:00:00.000Z)时,String(val)原样喂进<input type="date">。该控件只接受YYYY-MM-DD,其余形状静默拒收:属性照样落进 DOM,input.value读回空串,单元格画成空占位。即 #3127 在子表面上的同一个缺口。#3127 修的是
DateTimeField/DateField两个独立 widget,GridField自己手搓 cell input,不走那条路径,所以没被覆盖到。预期
子表 date 列应与
DateField一致:显示存量日历日,且不因时区把日期左移一天。建议改法
复用 #3127 落地的
packages/fields/src/widgets/nativeDateValue.ts:toDateInputValue对开头是YYYY-MM-DD的串原样透传(避免 date-only 被按 UTC 午夜解析后整体差一天),其余形状按本地日历分量渲染。写回侧这里不需要配对转换 ——
onChange交出的就是控件自己的YYYY-MM-DD,与DateField的约定一致。待办
出处
排查 #3127 时顺带扫到的同族面,按范围纪律未并进那一单(PR #3565)。同批已排除的干净面:
plugin-gantt内联日期编辑(GanttView.tsx:3559用toLocaleDateString('en-CA')生成YYYY-MM-DD)、UserFilters/FilterUI/action-param-dialog/RecordPickerDialog(初值本来就是空的,不适用)。Blocked-by: #3565
Generated by Claude Code