status: done created: 2026-06-13 scope:
forge-admin-ui,forge-server/forge-framework/forge-plugin-parent/forge-plugin-generatorrelated:code-copilot/changes/form-first-business-object-designer/spec.md
低代码应用构建的业务对象设计器已经采用表单优先模式,表单画布负责生成字段资产,字段资产负责高级维护。当前实际使用中存在以下影响设计效率和运行态一致性的问题:
fcDesigner。AiCrudPage;动态 CRUD 仅修正新增字段写入白名单。forgeBusinessComponents.js 中的字段绑定属性规则继续使用 select 类型,但开启可创建输入能力。用户可以:
formCreateToForge.js 已经会从 rule.props.fieldBinding.fieldCode、rule.props.fieldCode、rule.field、rule.name 中解析字段编码;本变更保持该转换链路,只补齐属性规则的输入能力。
表单到字段资产:
BusinessFormDesigner.syncDesignerDraft() 继续通过 buildAutoFieldAssets() 从 FormDesignerSchema 自动生成字段资产。fieldBinding.fieldCode 作为稳定字段编码,自动生成字段资产。字段资产到表单:
BusinessFormCreateDesigner.flushDesigner() 增加结构比较:
modelValue 等价时,只刷新内部快照,不触发 update:modelValue 和 dirtyChange(true)。BusinessFormDesigner.syncDesignerDraft() 增加比较:
dirty: false。BusinessFieldManager.vue 去掉抽屉,改为内嵌工作区:
BusinessFieldPropertyPanel。DynamicCrudService 的新增和更新写入白名单不再只依赖 editSchema:
editSchema 继续作为运行态表单字段白名单。modelSchema 额外补充设计器保存后已存在真实数据库列的新字段。id、租户、创建人、更新时间等不可变系统字段,避免请求体任意字段透传。表单设计器保存草稿时,buildAutoFieldAssets() 只保留当前表单仍绑定的自动创建字段;未绑定的手工字段资产继续保留,避免高级字段资产被误删。
新版画布 schema 规范化时区分“没有 label”和“用户显式清空 label”:字段组件显式传入空字符串时保留空值,不再回退到“字段”。
DDL 同步时,业务字段的 required 主要作为运行态表单校验。只有当字段配置了非空默认值,才把数据库列同步为 NOT NULL DEFAULT ...;未配置默认值时数据库列保持可空。
forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormCreateDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vueforge-admin-ui/src/views/app-center/components/designer/form-first/fieldReferenceUtils.jsforge-admin-ui/src/views/app-center/components/designer/form-first/forgeBusinessComponents.jsforge-admin-ui/src/views/app-center/components/designer/form-first/forgeToFormCreate.jsforge-admin-ui/src/views/app-center/components/designer/form-first/formCreateToForge.jsforge-admin-ui/src/views/app-center/components/designer/form-first/autoFieldRegistry.jsforge-admin-ui/src/views/app-center/components/designer/form-first/formDesignerSchema.jsforge-admin-ui/src/views/app-center/components/designer/form-first/viewSchema.jsforge-admin-ui/src/views/app-center/object-designer.[objectCode].vueforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.javaforge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeDdlService.javacustomerLevel 作为组件字段 ID。customerLevel,字段编码与数据库列名分别为 customerLevel、customer_level。customerLevel 改为 customerGrade 后,表单设计器组件绑定同步为 customerGrade,页面/视图引用不遗留旧字段编码。rule.field = input、select 等设计器内部默认值不能沉淀为业务字段编码或数据库列名;新字段应生成 fieldInput1 等稳定业务字段编码。customerLevel 时标题同步为“客户等级”。NOT NULL 约束;配置默认值后才生成非空默认值约束。