status: proposed created: 2026-05-31 complexity: 🔴复杂 related:
code-copilot/changes/lowcode-business-object-designer/spec.md
当前 lowcode-business-object-designer 已经把 Forge 低代码从“模型管理/CRUD 配置”推进到“业务对象设计器”,但主体验仍然偏字段和模型:
更符合业务低代码平台的主链路应当是:
创建业务对象 → 设计动态表单 → 自动生成/维护字段注册表 → 派生查询/列表/详情 → 配置关系/权限/流程 → 发布运行应用
本变更提出“表单优先”的业务对象设计器:表单是业务用户的第一入口,字段模型是平台自动维护的技术投影,运行时 CRUD 继续复用现有 Forge 低代码能力。
普通用户默认从“表单设计”开始设计业务对象,而不是从“字段管理”开始。
不推翻现有低代码底座,新增“表单优先设计层”作为业务对象设计器的产品层。
当前继续复用:
ai_business_object 作为业务对象入口。ai_business_object.design_status/config_key/designer_options 作为对象设计状态和扩展配置。ai_business_object_design_version 作为设计版本快照。ai_lowcode_model.model_schema 作为低代码模型事实来源。ai_crud_config 作为运行时 CRUD 配置事实来源。LowcodeRuntimeConfigBuilder 作为运行配置生成器。DynamicCrudController 和 AiCrudPage 作为运行态主能力。/ai/business/object/{objectId}/designer、/fields、/layout/form|list|detail、/publish 等现有业务对象设计器接口。当前系统已经集成 fcDesigner / form-create:
@form-create/designer、@form-create/element-ui。forge-admin-ui/src/components/form-create/FlowFormCreateDesigner.vue。forge-admin-ui/src/components/lowcode-builder/page/FormCreateDesignerAdapter.vue。forge-admin-ui/src/components/form-create/formCreateBridge.js。因此本阶段不建议自研完整表单设计器。更合理的技术路线是:以 fcDesigner 作为可视化画布和交互基础,Forge 自己建设业务组件适配、字段绑定、Schema 编排、级联规则和发布转换。
新增或强化:
fcDesigner 适配层:把 form-create rule/options 转换为统一 Forge FormDesignerSchema,并反向生成可编辑的 form-create 规则。DynamicCrudController。AiCrudPage。ai_lowcode_model 和 ai_crud_config。fcDesigner / form-create JSON 直接作为 Forge 运行时唯一事实来源。关注最终页面:
关注快速交付:
关注底层可控:
业务对象设计器路由继续使用:
/app-center/object/:objectCode/designer
设计器布局:
左侧导航建议:
表单设计:默认入口,设计新增/编辑表单。列表视图:配置表格列、行操作、工具栏。查询条件:配置搜索字段、默认值、折叠、对齐方式。详情视图:配置详情分组、只读字段、关联页签。字段资产:查看表单生成的字段,维护高级字段属性。关系与级联:统一维护对象关系和字段联动规则。权限流程:配置权限摘要、审批绑定、自动化摘要。发布检查:检查字段、表单、表结构、运行配置、权限和关系。高级配置:开发者模式,查看模型、DDL、Schema、configKey。组件分类:
组件拖入画布后默认创建字段绑定。布局组件不创建字段。
画布能力:
画布不应出现技术字段名、undefined、空 label、空组件。
选中字段组件时展示:
选中表单空白处时展示:
表单 Schema 是产品层事实来源,用于表达业务用户看到和配置的表单。
示例结构:
{
"schemaVersion": "form-first-v1",
"formKey": "customer_default_form",
"formName": "客户表单",
"layout": {
"labelPlacement": "left",
"labelWidth": 100,
"gridColumns": 2
},
"components": [
{
"id": "cmp_customer_name",
"componentKey": "input",
"label": "客户名称",
"fieldBinding": {
"mode": "field",
"fieldCode": "customerName",
"createIfMissing": true
},
"props": {
"placeholder": "请输入客户名称",
"clearable": true
},
"layout": {
"span": 2,
"align": "left"
},
"validation": {
"required": true,
"requiredMessage": "请输入客户名称"
},
"visibility": {
"hidden": false,
"readonly": false
}
}
]
}
规则:
id。fieldBinding。fieldBinding.mode=field 表示绑定真实业务字段。fieldBinding.mode=virtual 表示仅展示或辅助输入,不入库。fieldCode 一旦发布,不因 label 改名自动变化。字段注册表是技术层事实来源,用于稳定承载字段编码、数据库列、数据类型和发布状态。
首期不新增独立字段事实表,优先复用 LowcodeModelSchema.fields 和现有业务字段 DTO/VO;后续如需要可再拆表。
字段注册表示例:
{
"fieldCode": "customerName",
"fieldName": "客户名称",
"columnName": "customer_name",
"fieldType": "TEXT",
"dataType": "varchar",
"length": 128,
"precision": 0,
"componentType": "input",
"required": true,
"formVisible": true,
"listVisible": true,
"searchable": true,
"fieldStatus": "ENABLED",
"published": true,
"basicProps": {
"placeholder": "请输入客户名称"
},
"advancedProps": {}
}
规则:
fieldName,不默认改 fieldCode 和 columnName。查询条件、数据列表、详情页都从字段注册表和表单 Schema 派生,但允许视图层覆盖。
查询条件配置项:
列表列配置项:
详情配置项:
级联不再作为某个字典组件的特殊属性,而是统一字段联动规则。
联动规则结构:
{
"ruleId": "cascade_customer_level_status",
"type": "cascade",
"sourceField": "customerLevel",
"targetField": "customerStatus",
"dataSourceType": "dict",
"matchMode": "linkedDict",
"dictConfig": {
"targetDictType": "crm_customer_status",
"linkedDictType": "crm_customer_level"
},
"remoteConfig": {
"api": "",
"method": "get",
"paramName": "parentValue"
},
"emptyStrategy": "empty",
"clearOnSourceChange": true
}
支持模式:
parentDictCode:使用 sys_dict_data.parent_dict_code 匹配上级字典项编码。linkedDict:使用 sys_dict_data.linked_dict_type + linked_dict_value 匹配关联字典。remoteParam:把上级字段值作为接口参数重新加载下级选项。objectReference:根据上级业务对象字段过滤下级业务对象数据。orgScope:根据组织、部门、区域字段过滤下级数据。空值策略:
empty:上级为空时下级选项为空。all:上级为空时显示全部。disabled:上级为空时禁用下级。运行规则:
表单优先设计器的编译链路:
FormDesignerSchema
-> FieldRegistry
-> LowcodeModelSchema
-> LowcodePageSchema
-> LowcodeRuntimeConfigBuilder
-> AiCrudConfig
-> DynamicCrudController + AiCrudPage
保存草稿时:
design_status=CHANGED 或 DESIGNING。发布前:
发布时:
ai_lowcode_model.model_schema。ai_crud_config。ai_business_object_design_version。ai_business_object.config_key/last_publish_time/last_publish_version/design_status。本阶段明确优先复用系统已集成的 fcDesigner,不重新实现完整表单设计器。
fcDesigner 负责:
Forge 负责:
需要建设 fcDesigner 适配层:
Designer Adapter
输入:form-create rule/options
输出:Forge FormDesignerSchema
反向转换:
Forge FormDesignerSchema + FieldRegistry
-> form-create rule/options
-> fcDesigner 可编辑画布
适配层职责:
fcDesigner 中编辑的自定义组件。AiCrudPage / AiForm 可消费的 schema。fcDesigner 中需要注册或包装以下 Forge 业务组件:
DictSelect:字典选择。parent_dict_code 和 linked_dict_type/value。RegionTreeSelect:行政区划。FileUpload。ImageUpload。自定义组件必须支持:
form-create rule 可以作为设计器输入输出,但不能直接替代 Forge 运行时配置,原因:
AiCrudPage 的搜索、列表、编辑、详情、权限、导入导出。因此最终事实来源应是:
Forge FormDesignerSchema + FieldRegistry + ViewSchema + LinkageSchema
form-create rule/options 是设计器适配层的可编辑表示。
如果从零自研一个达到 fcDesigner 可用程度的表单设计器,需要覆盖:
粗略成本判断:
| 方案 | 首版可用成本 | 达到较好体验成本 | 风险 |
|---|---|---|---|
复用 fcDesigner + Forge 适配层 |
2-4 周 | 4-8 周 | 中等,主要风险在业务组件适配和 schema 转换 |
| 完全自研表单设计器 | 8-12 周 | 3-6 个月 | 高,交互细节多,容易长期维护成独立产品 |
| 当前固定表单配置继续增强 | 1-2 周 | 很难达到好体验 | 中高,短期快但用户体验改善有限 |
结论:
fcDesigner 为画布基础,把研发资源投入到业务组件适配、字段自动绑定、级联规则、Schema 编译、发布检查和运行态一致性。虽然本阶段优先使用 fcDesigner,但设计器适配层仍要保持边界清晰,避免未来被单一设计器锁死。
设计器能力必须满足:
短期策略:
FormCreateDesignerAdapter.vue 为基础改造成业务对象表单设计器。fcDesigner 中的设计态和运行态映射。Designer Adapter 边界,避免 form-create rule 渗透到所有业务层。中期策略:
fcDesigner 定制。fcDesigner 无法满足长期体验,再基于适配层替换画布,而不是推翻业务 Schema。重点文件:
forge-admin-ui/src/views/app-center/object-designer.[objectCode].vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vueforge-admin-ui/src/views/app-center/components/designer/BusinessListDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessDetailDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessRelationDesigner.vueforge-admin-ui/src/components/lowcode-builder/page/FormCreateDesignerAdapter.vueforge-admin-ui/src/components/lowcode-builder/page/CanvasFormDesigner.vueforge-admin-ui/src/components/lowcode-builder/page/ComponentPropertyPanel.vueforge-admin-ui/src/components/form-create/formCreateBridge.jsforge-admin-ui/src/components/form-create/FlowFormCreateDesigner.vueforge-admin-ui/src/components/ai-form/AiForm.vueforge-admin-ui/src/components/ai-form/AiFormItem.vueforge-admin-ui/src/components/DictSelect.vue前端要求:
fcDesigner,提供组件库、画布、属性面板和预览。重点文件:
BusinessObjectDesignerController.javaBusinessObjectDesignerService.javaBusinessFieldDesignService.javaBusinessFieldSchemaService.javaBusinessLayoutDesignService.javaBusinessObjectPublishService.javaLowcodeRuntimeConfigBuilder.javaLowcodeFieldSchema.javaBusinessObjectDesignerDTO.javaBusinessLayoutDTO.javaBusinessFieldDTO.javaBusinessObjectDesignerVO.javaBusinessFieldVO.javaBusinessLayoutVO.java后端要求:
getDesigner 返回表单优先设计器所需聚合数据。saveDesigner 能接收完整表单设计草稿。LowcodeRuntimeConfigBuilder 能把视图层配置转换为 searchSchema、columnsSchema、editSchema。优先复用现有表:
ai_business_object.designer_optionsai_business_object_design_versionai_lowcode_model.model_schemaai_crud_configai_business_object_relationai_business_field_template如现有 designer_options 无法承载表单优先 Schema,可新增 Flyway 脚本扩展:
form_schema json:当前草稿表单 Schema。field_registry_schema json:当前字段注册表快照。view_schema json:查询、列表、详情视图配置。linkage_schema json:级联和联动规则配置。脚本要求:
information_schema 防重复。tenant_id 相关内置数据必须为 1。已有字段优先对象进入表单优先设计器时:
FormDesignerSchema。layout/form|list|detail 接口继续可用。已有运行应用不受影响:
ai_crud_config。ai:businessObject:design 才能进入设计器。ai:businessObject:publish。ai:businessObject:advanced。parent_dict_code 或 linked_dict_type/value 过滤。pnpm --dir forge-admin-ui build 通过。mvn -pl forge-admin-server -am compile -DskipTests 通过。getDesigner 能返回表单 Schema、字段注册表、视图配置、级联规则。saveDesigner 能保存表单草稿并同步字段注册表。publish 能从表单优先 Schema 生成运行时配置。AiCrudPage 运行态表单能正确处理字段对齐和级联。fcDesigner 重构前端布局为组件库 + 画布 + 属性面板。FormDesignerSchema。fcDesigner 适配层边界,为后续替换或深度定制保留空间。fcDesigner 内部实现,后续升级和维护成本会升高。fcDesigner 作为表单画布,不推进完整自研画布。ai_business_object.designer_options;确实不足时再新增独立 JSON 列。LowcodeModelSchema.fields 作为事实来源,不新增独立字段表。fcDesigner 设计态可以沿用 Element Plus / form-create 外观,发布运行态必须转换为 Naive UI / Forge 运行组件。AiCrudPage。