3.7 KiB
3.7 KiB
@g3soft/ui
| @g3soft/ui |
|---|
| minor |
G3Table 新增日期编辑器(editor.type: 'date'),并为 G3DatePicker 补上无缝模式与两个对外方法。
editor.type: 'date':点格即弹日历(不必先点输入框),也支持手输;值始终是字符串,不做Date↔ string 的隐式转换。format同时决定面板精度与绑定值格式(默认YYYY-MM-DD;写'YYYY-MM-DD HH:mm'即变成日期时间,选完要点「确定」才提交)。界面格式与存储格式不同时用valueFormat。- 校验 / 失败原因浮层 / 禁用灰底 /
errorStyle与其它编辑器完全一致,没有另开一套。 - 它是**唯一「只给当前格挂编辑器」**的类型:切换格时新格是重新挂载,日历才会跟着弹开。若跟着整行挂载,同行内从别的列切到日期格就不会重新挂载、面板不弹,表现为「有时弹、有时不弹」这种最难解释的不一致。顺带也更省 —— 不激活时是纯展示 span,而 DatePicker 是浮层组件。
G3DatePicker新增seamless:去掉触发器的 32px 下限 / 内边距 / 描边 / 圆角。与G3Select的seamless同因同解 —— 那些盒子在 Popover 内部,从表格侧写后代选择器命中不到(权重相同、顺序不可控),必须在组件自己的样式块里覆盖。不开的话 32 > 30 会把表格行顶高,看着像「格子里浮着一个小卡片」。G3DatePicker新增defineExpose({ openPanel, commitPending }):前者供表格挂载后主动展开面板,后者供表格在编辑器卸载前把没提交的手输文本交掉。- 修一个「手输的日期会静默丢失」的真问题:关闭面板时原先直接清空了内部草稿,而「点到别处」这条路径不会经过
input的blur—— 表格在 mousedown 阶段preventDefault(避免点击干扰单元格选区),焦点压根没离开输入框。于是用户敲完日期点别的格,值就地消失。现在关闭面板时先提交再收尾;Esc 分支已在onKeydown里先把草稿清成 null,所以「按 Esc 取消」依然是取消而非提交(那个顺序不能反)。 - 配套:playground 新增一张独立的小日期表(
table-date-wrap)作为 e2e 宿主(没往table-wrap里加列 —— 那张表的列序被 Tab 跳格用例逐格锁着);erp 的table-test页面把「开航日 / 截单日」两列从text换成date(后者带时间精度)。 - 手输解析不出来时不再静默丢弃:
G3DatePicker新增invalidInput事件(默认无监听者,表单行为不变),表格监听它把原文写进行数据,再由一条内置的日期校验标红并给出原因「日期格式不正确」—— 与「金额输 0」「数量超精度」同一套立场:值不合法不等于要抹掉它。配套导出checkDate(value, format),与组件内置判定是同一个函数,供业务在保存前拦提交。- 判定口径刻意跟随
G3DatePicker手输解析的那个parseDateInput(不是自己写一套):否则会出现「手输时组件接受了、退回展示态又被标红」这种自相矛盾。注意不要换成parseDate—— 它是宽松解析、会退到原生new Date()兜底,把2026-13-45这类越界文本「救活」(parseDateInput里那道DATE_LIKE_TEXT保护正是拦这个的)。 - 顺带记录的既有口径:分隔符会被规范化(
2026/03/15算合法),而配了时间精度的列只给到「日」算不合法。
- 判定口径刻意跟随
- e2e 新增三条:点格弹面板并选日期写回字符串;必填校验 + 手输失焦后写回;手输非法日期时值原样保留、标红、悬停能看到原因。