Skip to content

ObjectGrid 单元格类型渲染优化 — select Badge / 日期格式化 / Boolean 视觉化 #822

@hotlong

Description

@hotlong

背景

本 issue 为 #820 的遗留工作。#820 的 6 大模块中,第 4️⃣ 模块(ObjectGrid 单元格渲染器)是目前唯一完全未完成的部分,其余模块已在 PR #821#805#817#799 等中基本落地。

现状问题

  • inferColumnType() 自动推断类型后的渲染缺少视觉标识——select/status 类字段显示纯文本
  • 日期字段直接输出 ISO 字符串(如 2026-02-26T03:09:07.458Z),用户无法快速识别时间含义
  • Boolean 字段无视觉渲染,显示 true/false 原始值

涉及文件

  • packages/plugin-grid/src/ObjectGrid.tsxinferColumnType() 和列生成逻辑
  • packages/fields/src/formatters.tsformatDate() 等格式化函数
  • packages/fields/src/widgets/ — 字段级渲染组件
  • packages/fields/src/cell-renderers.tsgetCellRenderer() 函数

具体改进

1. select/status 类型 Badge 渲染

  • field.typeselectstatus 时,getCellRenderer() 返回 <Badge> 组件
  • 支持从 field.options 映射颜色(如 { value: 'In Progress', color: 'blue' }<Badge variant="blue">
  • 未配置颜色时使用默认 muted 样式的 Badge
  • Priority 字段支持语义配色(Critical → red, High → orange, Medium → yellow, Low → gray)

2. 日期类型格式化

  • formatDate()packages/fields/src/formatters.ts 中增加相对时间模式:
    • 今天 → "Today"
    • 昨天 → "Yesterday"
    • 7 天内 → "3 days ago"
    • 逾期 → 红色文字 "Overdue 2d"
    • 超过 7 天 → "Feb 26, 2026" 人类可读格式
  • ObjectGrid inferColumnType() 推断为 date 类型时默认启用人类可读格式
  • 保留 ISO 格式作为 hover tooltip 显示完整时间

3. Boolean 类型视觉渲染

  • Boolean 字段渲染为 <Checkbox disabled checked={value} />✓/— 图标
  • 支持 is_completed 等布尔字段的语义化渲染(绿色圆形指示器)
  • null/undefined 值显示为空白或

4. 表头样式统一(已在 #821 中部分完成,需验证)

  • 确认 ObjectGrid 表头行使用 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70 bg-muted/5
  • 如未完成,补齐表头样式

测试要求

  • getCellRenderer() 的 select/date/boolean 类型新增单元测试
  • formatDate() 相对时间模式新增测试用例(含 edge case:null、未来日期、逾期日期)
  • pnpm test 全量通过

验收标准

  • ObjectGrid 中 select/status 字段显示为带颜色的 Badge
  • 日期字段显示为人类可读格式,逾期用红色标记
  • Boolean 字段显示为 Checkbox 或图标
  • 全部测试通过
  • ROADMAP.md 更新 ObjectUI 平台级界面风格与交互一致性优化 #820 第 4️⃣ 模块为已完成

关联

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions