Skip to content

提升字段分组为ObjectSchema一等公民+规范fieldOrder自愈机制 #1196

Description

@xuyushun441-sys

背景与目标

当前框架(ObjectStack)中,字段分组逻辑存在于 Field.schema 的 group 字段与 Studio 设计器 UI 偏好配置之间。分组本身(组名、顺序、icon、label、描述等)未作为对象元数据结构的独立一等属性持久化,导致:

  • 分组顺序/显示细节在各环境之间不一致,缺少版本化管控
  • 无法原子迁移、回滚或工具化处理
  • 扩展包难以通过 protocol-safe 方式向现有对象扩展新的分组/维护顺序

同时,fieldOrder 字段(用于组内字段排列顺序提示)有可能因新增字段、扩展包���增/删字段、用户在界面添加字段等各种原因变得不完整、过时,需有健壮的“自愈”机制和明确的协议规则避免污染与冲突。


需求汇总

1. 在 ObjectSchema 中引入 fieldGroups 作为一等属性

  • 对象级有序 fieldGroups: FieldGroup[],包含 key/label/desc/icon/expanded/visibleOn/fieldOrder
  • 每组顺序 = 数组顺序(无需显式 order 字段)
  • 每组内支持扩展 fieldOrder 提示字段顺序(但允许缺失、不完整、过期)
  • 组 -> 字段 通过 Field.group key 关联,反向兼容
  • group 支持显示属性、排序、可见性表达式等(参考上文 ObjectFieldGroupSchema 示例)

2. 完善 fieldOrder 归一化逻辑

  • fieldOrder 视为非权威“hint”,缺失/过期成员不报错
  • 新增字段未纳入时按“append/prepend/alphabetical”等策略自动归位,可 per-group 控制
  • 扩展包通过 field.group 舒服扩展分组与组内顺序,无需直接改 fieldOrder(可另加 groupPlacement 设置 before/after/priority)
  • 提供 normalizeFieldGroups(object) 公用归一化方法供 UI/渲染/导出/比对等场景幂等调用

3. 明确编码规则和可扩展性

  • fieldGroupsPolicy 等编解码策略作为协议实现常量或 runtime plugin config,不写进 ObjectSchema
  • Object 层只保留业务流相关的分组定义(fieldGroups),系统规则归 runtime 里集中配置

4. ChangeSet & 迁移感知

  • 新增、重命名、排序分组应有对应 migration 操作类型(add_field_group/reorder_field_groups/modify_field_group/remove_field_group/reorder_group_fields 等)
  • 设计器所有对象字段分组操作、拖拽、归属变更都能“可回滚、可 diff”

5. 兼容与跨包拓展

  • 旧对象无 fieldGroups 时聚合 field.group 自动生成一组
  • 扩展包仅需为新字段声明字段 group,即可安全扩展分组体系

实现清单建议

  1. 新建 data/field-group.zod.ts Schema
  2. ObjectSchema 增加 fieldGroups 属性与��验逻辑
  3. 增加 normalizeFieldGroups(object) helper,供渲染/导出/比对等用
  4. system/migration.zod.ts 新增 atomic ops(add/reorder/modify/remove group and order)
  5. object-designer.zod.ts 标注 FieldGroupSchema @deprecated,迁移至 ObjectFieldGroupSchema
  6. 补全自动测试
  7. 更新 CHANGELOG 和相关文档

详细技术论证与 protocol 案例见本 Issue 历史讨论。

Metadata

Metadata

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions