Skip to content

[fields] GridField 子表 date 列不回显 ISO 形状的值:String(val) 直喂 input[type=date],同 #3127 的同族缺口 #3566

Description

@baozhoutao

现象(读码确认,尚未真机复现)

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 的约定一致。

待办

  • 先真机确认:造一条子表 date 列存 ISO 值的记录,看单元格是否为空(本条目前只有读码依据)
  • 若确认,按上面改法修 + 补单测

出处

排查 #3127 时顺带扫到的同族面,按范围纪律未并进那一单(PR #3565)。同批已排除的干净面:plugin-gantt 内联日期编辑(GanttView.tsx:3559toLocaleDateString('en-CA') 生成 YYYY-MM-DD)、UserFilters / FilterUI / action-param-dialog / RecordPickerDialog(初值本来就是空的,不适用)。

Blocked-by: #3565


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions