现象(读码 + 真机确认接口形状)
packages/plugin-form/src/deriveMasterDetail.ts 的 fieldTypeToColumnType 把三种字段类型
折叠成同一个网格列类型:
case 'date' :
case 'datetime' :
case 'time' :
return 'date' ;
而 GridField 对 type === 'date' 只会渲染 input[type=date](GridField.tsx:764)。于是
一个 datetime 子表字段在内嵌网格里:
读 :控件只能显示日历日,时间分量在界面上不存在;
写 :onChange 交出的是控件自己的 YYYY-MM-DD,时间被静默丢弃 —— 用户只是碰了一下
日期,记录里的 14:30 就没了;
time 类型同理,被喂进一个日期控件。
真机取证(framework showcase,本地 objectstack dev):date 字段接口回 "2026-08-04",
datetime 字段接口回 "2026-08-07T16:39:20.389Z" —— 即 datetime 列拿到的一定是完整 ISO。
为什么现在才浮出来
#3566 修的是 date 列把 ISO 形状喂进 input[type=date] 导致单元格空白。那条修复顺带让
datetime 列从「空白」变成「显示日历日」,不再更差,但也没变对 —— 真正的缺口是类型折叠本身。
预期
datetime 列应渲染 input[type=datetime-local],读写各用 toDateTimeInputValue /
fromDateTimeInputValue(packages/fields/src/widgets/nativeDateValue.ts,#3127 已落地并配对
使用),与 DateTimeField 的约定一致;time 列同理需要自己的形态,而不是继续借用日期控件。
建议改法(跨两个包,故未并进 #3566 )
packages/fields/src/widgets/GridField.tsx:GridColumn['type'] 联合类型加 'datetime',
单元格按类型选择控件与读写适配器。
packages/plugin-form/src/deriveMasterDetail.ts:fieldTypeToColumnType 停止把 datetime
折叠到 date。
只读展示面同一处缺口:GridField.tsx 的 displayText()(:277 的 String(value) 兜底)和
只读表格 :632 的 String(row[c.field]),对 date/datetime 列都会把原样 ISO 字符串印到界面上
(例如 2026-06-17T00:00:00.000Z)。修 datetime 列时应一并处理 —— 之所以不能在 [fields] GridField 子表 date 列不回显 ISO 形状的值:String(val) 直喂 input[type=date],同 #3127 的同族缺口 #3566 里单独
改,正是因为在类型折叠没解开之前,GridField 无从分辨该显示「日」还是「日 + 时间」,按日渲染
会把 datetime 的时间分量从展示里抹掉。
出处
#3566 (GridField date 列不回显 ISO 值)实施时按范围纪律排除的同族面。
现象(读码 + 真机确认接口形状)
packages/plugin-form/src/deriveMasterDetail.ts的fieldTypeToColumnType把三种字段类型折叠成同一个网格列类型:
而
GridField对type === 'date'只会渲染input[type=date](GridField.tsx:764)。于是一个
datetime子表字段在内嵌网格里:onChange交出的是控件自己的YYYY-MM-DD,时间被静默丢弃 —— 用户只是碰了一下日期,记录里的
14:30就没了;time类型同理,被喂进一个日期控件。真机取证(framework showcase,本地
objectstack dev):date字段接口回"2026-08-04",datetime字段接口回"2026-08-07T16:39:20.389Z"—— 即 datetime 列拿到的一定是完整 ISO。为什么现在才浮出来
#3566 修的是
date列把 ISO 形状喂进input[type=date]导致单元格空白。那条修复顺带让datetime 列从「空白」变成「显示日历日」,不再更差,但也没变对 —— 真正的缺口是类型折叠本身。
预期
datetime列应渲染input[type=datetime-local],读写各用toDateTimeInputValue/fromDateTimeInputValue(packages/fields/src/widgets/nativeDateValue.ts,#3127 已落地并配对使用),与
DateTimeField的约定一致;time列同理需要自己的形态,而不是继续借用日期控件。建议改法(跨两个包,故未并进 #3566)
packages/fields/src/widgets/GridField.tsx:GridColumn['type']联合类型加'datetime',单元格按类型选择控件与读写适配器。
packages/plugin-form/src/deriveMasterDetail.ts:fieldTypeToColumnType停止把datetime折叠到
date。GridField.tsx的displayText()(:277的String(value)兜底)和只读表格
:632的String(row[c.field]),对 date/datetime 列都会把原样 ISO 字符串印到界面上(例如
2026-06-17T00:00:00.000Z)。修 datetime 列时应一并处理 —— 之所以不能在 [fields] GridField 子表 date 列不回显 ISO 形状的值:String(val) 直喂 input[type=date],同 #3127 的同族缺口 #3566 里单独改,正是因为在类型折叠没解开之前,
GridField无从分辨该显示「日」还是「日 + 时间」,按日渲染会把 datetime 的时间分量从展示里抹掉。
出处
#3566(
GridFielddate 列不回显 ISO 值)实施时按范围纪律排除的同族面。