status: proposed created: 2026-05-31 spec:
code-copilot/changes/form-first-business-object-designer/spec.md拆分顺序:产品决策冻结 → 表单优先协议 → fcDesigner 适配层 → Forge 业务组件 → 对象设计器体验 → 视图投影 → 级联联动 → 发布迁移 → 应用中心体验收尾 → 验证归档 原则:表单设计是普通用户第一入口;优先复用fcDesigner;不自研完整表单画布;form-create rule/options 不是 Forge 运行时唯一事实来源;字段编码和数据库列稳定;普通模式不展示 DDL、表名、Schema、configKey。
fcDesigner 作为表单设计画布,不推进完整自研画布。FormCreateDesignerAdapter.vue 是低代码表单设计适配基础。LowcodeModelSchema.fields 首期继续作为字段注册表事实来源。ai_business_object.designer_options 优先承载表单优先扩展配置;确实不足时再新增 JSON 列。AiCrudPage、AiForm、DynamicCrudController 和 LowcodeRuntimeConfigBuilder。| 阶段 | 目标 | 包含任务 | 交付结果 |
|---|---|---|---|
| Phase 0 | 决策冻结 | Task 0-1 | 明确 fcDesigner 复用边界、字段事实来源、Schema 存储策略 |
| Phase 1 | 协议与 Schema | Task 2-5 | FormDesignerSchema、FieldRegistry、ViewSchema、LinkageSchema 协议 |
| Phase 2 | fcDesigner 适配层 | Task 6-10 | form-create rule/options 与 Forge Schema 双向转换 |
| Phase 3 | Forge 业务组件 | Task 11-16 | 字典、地区、组织、用户、文件、图片、引用对象设计态/运行态组件 |
| Phase 4 | 表单优先对象设计器 | Task 17-21 | 默认表单设计入口、字段自动绑定、字段资产降级、高级属性隔离 |
| Phase 5 | 视图投影 | Task 22-25 | 查询、列表、详情从表单和字段派生,并支持视图层覆盖 |
| Phase 6 | 级联联动 | Task 26-29 | 统一级联规则,支持字典父子、关联字典、远程参数、组织/对象过滤 |
| Phase 7 | 发布与兼容 | Task 30-33 | 发布检查、旧对象迁移、运行配置生成、版本回滚 |
| Phase 8 | 应用中心体验收尾与验证归档 | Task 34-40 | 应用总览、CRM 交付验收、构建、接口、页面、CRM 端到端验收和文档回填 |
| Task | 阶段 | 名称 | 状态 | 优先级 |
|---|---|---|---|---|
| Task 0 | Phase 0 | 产品和技术决策冻结 | completed | P0 |
| Task 1 | Phase 0 | 现有 fcDesigner 集成能力盘点 | completed | P0 |
| Task 2 | Phase 1 | FormDesignerSchema 协议定义 | completed | P0 |
| Task 3 | Phase 1 | 字段注册表和字段绑定协议 | completed | P0 |
| Task 4 | Phase 1 | ViewSchema 视图投影协议 | completed | P0 |
| Task 5 | Phase 1 | LinkageSchema 级联联动协议 | completed | P0 |
| Task 6 | Phase 2 | form-create 到 Forge Schema 转换器 | completed | P0 |
| Task 7 | Phase 2 | Forge Schema 到 form-create 转换器 | completed | P0 |
| Task 8 | Phase 2 | 字段引用提取和脏引用修复 | completed | P0 |
| Task 9 | Phase 2 | fcDesigner 设计器适配组件重构 | completed | P0 |
| Task 10 | Phase 2 | 设计器预览与保存事件标准化 | completed | P1 |
| Task 11 | Phase 3 | 字典组件设计态和运行态适配 | completed | P0 |
| Task 12 | Phase 3 | 地区、组织、用户组件适配 | completed | P0 |
| Task 13 | Phase 3 | 文件、图片上传组件适配 | completed | P1 |
| Task 14 | Phase 3 | 引用对象选择组件适配 | completed | P1 |
| Task 15 | Phase 3 | 子表/明细表组件适配 | completed | P1 |
| Task 16 | Phase 3 | 组件属性面板业务化 | completed | P0 |
| Task 17 | Phase 4 | 对象设计器默认入口切换为表单设计 | completed | P0 |
| Task 18 | Phase 4 | 表单拖入组件自动创建字段 | completed | P0 |
| Task 19 | Phase 4 | 字段资产面板重构 | completed | P0 |
| Task 20 | Phase 4 | 普通属性和高级属性隔离 | completed | P0 |
| Task 21 | Phase 4 | 表单设计保存和未保存变更提示 | completed | P0 |
| Task 22 | Phase 5 | 查询条件视图投影 | completed | P0 |
| Task 23 | Phase 5 | 数据列表视图投影 | completed | P0 |
| Task 24 | Phase 5 | 详情视图投影 | completed | P1 |
| Task 25 | Phase 5 | 视图层对齐、宽度、排序覆盖 | completed | P0 |
| Task 26 | Phase 6 | 级联规则编辑模型 | completed | P0 |
| Task 27 | Phase 6 | 字典父子和关联字典运行态过滤 | completed | P0 |
| Task 28 | Phase 6 | 远程参数、组织和对象引用过滤 | completed | P1 |
| Task 29 | Phase 6 | 级联发布检查和脏规则修复 | completed | P0 |
| Task 30 | Phase 7 | 发布检查支持表单优先 Schema | completed | P0 |
| Task 31 | Phase 7 | 发布编译链路接入 FormDesignerSchema | completed | P0 |
| Task 32 | Phase 7 | 旧字段优先对象迁移 | completed | P0 |
| Task 33 | Phase 7 | 设计版本和回滚兼容 | completed | P1 |
| Task 34 | Phase 8 | 应用总览和应用列表布局收敛 | completed | P0 |
| Task 35 | Phase 8 | CRM 套件交付验收区域收敛 | completed | P0 |
| Task 36 | Phase 8 | 前端构建和 lint 验证 | completed | P0 |
| Task 37 | Phase 8 | 后端编译和接口验证 | completed | P0 |
| Task 38 | Phase 8 | Playwright 页面冒烟验证 | completed | P0 |
| Task 39 | Phase 8 | CRM 客户对象端到端验收 | pending | P0 |
| Task 40 | Phase 8 | Spec、任务、执行日志回填 | completed | P1 |
| Task 41 | Phase 8 | 设计器交互回归修复 | completed | P0 |
| Task 42 | Phase 8 | 动态运行态表单组件与布局回归修复 | completed | P0 |
| Task 43 | Phase 8 | 组织数据源、运行态样式和字段 DDL 同步修复 | completed | P0 |
| Task 44 | Phase 8 | 表单布局组件与保存入口收敛 | completed | P0 |
| Task 45 | Phase 8 | 应用入口、设计器弹层和多列表单回归修复 | completed | P0 |
| Task 46 | Phase 8 | fcDesigner 画布列数和布局组件中文化修复 | completed | P0 |
目标: 在编码前冻结表单优先主链路,避免继续在固定字段配置和自研画布上消耗成本。
涉及文件:
code-copilot/changes/form-first-business-object-designer/spec.mdcode-copilot/changes/form-first-business-object-designer/tasks.mdcode-copilot/memory/decisions.md执行要点:
fcDesigner 是首期表单画布基础。验收标准:
spec.md 第 24 章待确认问题中与首期路线相关的问题已给出结论。tasks.md 前置条件全部有明确确认。code-copilot/memory/decisions.md 记录“fcDesigner 优先,不自研完整画布”的项目决策。目标: 明确当前 fcDesigner 能力边界,避免重复实现已有功能。
涉及文件:
forge-admin-ui/package.jsonforge-admin-ui/src/components/form-create/FlowFormCreateDesigner.vueforge-admin-ui/src/components/form-create/FlowFormCreateRenderer.vueforge-admin-ui/src/components/form-create/formCreateBridge.jsforge-admin-ui/src/components/lowcode-builder/page/FormCreateDesignerAdapter.vueforge-admin-ui/src/components/lowcode-builder/page/page-schema.jsforge-admin-ui/src/components/lowcode-builder/preview/LowcodePreviewPane.vue执行要点:
@form-create/designer、@form-create/element-ui 版本和使用位置。FormCreateDesignerAdapter.vue 当前已经支持的字段映射、保存、预览能力。page-schema.js 已有 formCreateRule/formCreateOptions 字段引用解析逻辑。验收标准:
code-copilot/changes/form-first-business-object-designer/research.md。research.md 明确哪些能力复用、哪些能力补齐、哪些能力不做。目标: 定义 Forge 自有表单设计 Schema,作为表单优先设计器的产品层事实来源。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/form-first/formDesignerSchema.jsforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/FormDesignerSchemaDTO.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessObjectDesignerDTO.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessObjectDesignerVO.java协议字段:
schemaVersionformKeyformNamelayoutcomponentscomponent.idcomponent.componentKeycomponent.labelcomponent.fieldBindingcomponent.propscomponent.layoutcomponent.validationcomponent.visibility执行要点:
Map<String, Object> 承载可扩展 JSON,避免频繁改 Java 类型。BusinessObjectDesignerVO 返回当前表单设计草稿。BusinessObjectDesignerDTO 支持保存当前表单设计草稿。验收标准:
FormDesignerSchema。id、缺少 componentKey、字段组件未绑定字段等问题。目标: 建立表单组件与业务字段的稳定绑定规则。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/form-first/formDesignerSchema.jsforge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vueforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessFieldDTO.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessFieldVO.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFieldSchemaService.java协议字段:
fieldBinding.mode: field、virtualfieldBinding.fieldCodefieldBinding.createIfMissingfieldBinding.source: designer、field_asset、migrationfieldBinding.locked执行要点:
fieldBinding。验收标准:
customerName/customer_name。fieldCode 和 columnName。目标: 统一查询条件、数据列表、详情视图的派生配置和覆盖配置。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/form-first/viewSchema.jsforge-admin-ui/src/views/app-center/components/designer/BusinessListDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessDetailDesigner.vueforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessLayoutDTO.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessLayoutVO.java协议字段:
search.fields[]list.columns[]detail.sections[]alignwidthfixedsortablevisibleorderformatter执行要点:
验收标准:
目标: 统一描述字段联动,不把级联能力散落到单个组件属性中。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/form-first/linkageSchema.jsforge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vueforge-admin-ui/src/views/app-center/components/designer/BusinessRelationDesigner.vueforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessObjectDesignerDTO.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessObjectDesignerVO.java协议字段:
ruleIdtypesourceFieldtargetFielddataSourceTypematchModedictConfigremoteConfigemptyStrategyclearOnSourceChange执行要点:
parentDictCode、linkedDict、remoteParam、objectReference、orgScope。验收标准:
目标: 将 fcDesigner 输出的 form-create rule/options 转换为 Forge FormDesignerSchema。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/form-first/formCreateToForge.jsforge-admin-ui/src/components/form-create/formCreateBridge.jsforge-admin-ui/src/components/lowcode-builder/page/FormCreateDesignerAdapter.vue执行要点:
field/title/type/props/validate/value/children。component.id。type 到 componentKey。验收标准:
children 可转换。目标: 将 Forge FormDesignerSchema 反向生成 form-create rule/options,使 fcDesigner 可编辑。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/form-first/forgeToFormCreate.jsforge-admin-ui/src/components/lowcode-builder/page/FormCreateDesignerAdapter.vue执行要点:
type。field/title/name。_forge 字段,避免编辑后丢失业务信息。验收标准:
fcDesigner 后可正常显示、编辑、保存。fieldBinding。fcDesigner 不显示 undefined 或空字段标题。目标: 防止表单引用已删除字段或重复字段。
涉及文件:
forge-admin-ui/src/components/lowcode-builder/page/page-schema.jsforge-admin-ui/src/views/app-center/components/designer/form-first/formDesignerSchema.jsforge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vueforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectPublishService.java执行要点:
验收标准:
目标: 将现有低代码 FormCreateDesignerAdapter.vue 改造为业务对象表单设计器核心画布。
涉及文件:
forge-admin-ui/src/components/lowcode-builder/page/FormCreateDesignerAdapter.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormCreateDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vue执行要点:
FcDesigner 作为画布。验收标准:
fcDesigner。目标: 统一表单设计器保存、预览、应用配置、重置等动作。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessFormCreateDesigner.vueforge-admin-ui/src/components/form-create/FlowFormCreateRenderer.vueforge-admin-ui/src/components/lowcode-builder/preview/LowcodePreviewPane.vue执行要点:
save 保存 Forge Schema。preview 展示设计态表单预览。resetFromFields 根据字段注册表重建表单。repairRefs 修复失效字段引用。applyDesignerConfig 只做本地应用,不自动发布。验收标准:
目标: 在 fcDesigner 中支持 Forge 字典选择,并映射到运行态 DictSelect。
涉及文件:
forge-admin-ui/src/components/DictSelect.vueforge-admin-ui/src/composables/useDict.jsforge-admin-ui/src/views/app-center/components/designer/form-first/forgeBusinessComponents.jsforge-admin-ui/src/components/ai-form/AiFormItem.vue执行要点:
dictType。DictSelect 和 useDict。parentDictCode、linkedDictType、linkedDictValue。验收标准:
目标: 支持 Forge 常用组织类组件在 fcDesigner 中设计和运行。
涉及文件:
forge-admin-ui/src/components/RegionTreeSelect.vueforge-admin-ui/src/components/common/UserSelectPicker.vueforge-admin-ui/src/components/ai-form/AiFormItem.vueforge-admin-ui/src/views/app-center/components/designer/form-first/forgeBusinessComponents.js执行要点:
RegionTreeSelect。UserSelectPicker。ALL 查询语义。验收标准:
目标: 支持文件和图片上传组件设计态、运行态和鉴权展示。
涉及文件:
forge-admin-ui/src/components/file-upload/index.vueforge-admin-ui/src/components/image-upload/index.vueforge-admin-ui/src/components/common/AuthImage.vueforge-admin-ui/src/components/ai-form/AiFormItem.vueforge-admin-ui/src/views/app-center/components/designer/form-first/forgeBusinessComponents.js执行要点:
AuthImage。验收标准:
目标: 支持业务对象引用字段,例如联系人引用客户。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessRelationDesigner.vueforge-admin-ui/src/components/ai-form/AiFormItem.vueforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFieldSchemaService.java执行要点:
验收标准:
目标: 支持主子表/明细字段设计和运行。
涉及文件:
forge-admin-ui/src/components/lowcode-builder/page/FormCreateDesignerAdapter.vueforge-admin-ui/src/views/app-center/components/designer/BusinessRelationDesigner.vueforge-admin-ui/src/views/app-center/components/designer/form-first/forgeBusinessComponents.jsforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java执行要点:
验收标准:
执行状态: completed
forgeBusinessComponents 已提供“明细表”业务组件,字段绑定为 virtual,避免误生成主对象字段。ChildTableEditor 新增行后立即提交到父表单,提交时可进入主子表 payload。AiFormItem 运行态组件,支持字典、组织、地区、引用对象、上传等真实控件。LowcodeRuntimeConfigBuilder 在编辑区缺少子表 fieldRef 时兜底输出子表可编辑字段,避免 form-first 保存后子表配置为空。目标: 让业务用户在属性面板里只看到高频业务配置,高级技术项默认折叠。
涉及文件:
forge-admin-ui/src/components/lowcode-builder/page/ComponentPropertyPanel.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormCreateDesigner.vue执行要点:
验收标准:
目标: 业务用户进入对象设计器时默认看到表单画布。
涉及文件:
forge-admin-ui/src/views/app-center/object-designer.[objectCode].vueforge-admin-ui/src/views/app-center/components/designer/BusinessObjectDesignerShell.vueforge-admin-ui/src/router/index.js执行要点:
fields 改为 form。panel=fields 仍兼容。验收标准:
panel=fields 仍能打开字段资产。执行状态: completed
panel=form。panel=fields 老链接仍保留字段资产入口。目标: 用户拖入字段组件后无需先去字段管理创建字段。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessFormCreateDesigner.vueforge-admin-ui/src/views/app-center/components/designer/form-first/formDesignerSchema.jsforge-admin-ui/src/api/business-app.jsforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFieldDesignService.java执行要点:
验收标准:
customerName 字段。执行状态: completed
formCreateToForge 已将 fcDesigner 临时 field_... 转为稳定字段编码,冲突时自动追加数字后缀。BusinessFormDesigner.saveLayout 保存表单前会根据 FormDesignerSchema 补齐缺失字段资产,并先保存字段注册表再保存布局。目标: 字段资产服务于查看和高级维护,不再是主工作台。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessFieldList.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vue执行要点:
验收标准:
执行状态: completed
目标: 降低业务用户认知负担。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vueforge-admin-ui/src/views/app-center/components/designer/BusinessAdvancedConfig.vueforge-admin-ui/src/stores 或现有权限/用户 store执行要点:
验收标准:
执行状态: completed
目标: 保证设计器编辑体验可靠。
涉及文件:
forge-admin-ui/src/views/app-center/object-designer.[objectCode].vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormCreateDesigner.vueforge-admin-ui/src/api/business-app.js执行要点:
验收标准:
执行状态: completed
目标: 从表单/字段派生查询条件,并允许用户覆盖。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessListDesigner.vueforge-admin-ui/src/views/app-center/components/designer/form-first/viewSchema.jsforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java执行要点:
searchable=true 字段生成查询条件。验收标准:
执行状态: completed
viewSchema.js 已支持从 pageSchema 的 search zone 投影查询字段、查询方式、组件类型、默认值和对齐方式。BusinessListDesigner 在查询配置变化时同步更新 draft.viewSchema,保存列表时同步持久化 ViewSchema。目标: 从字段派生列表列,并支持表格视图配置。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessListDesigner.vueforge-admin-ui/src/components/ai-form/AiTable.vueforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java执行要点:
listVisible=true 字段生成列。DictTag。AuthImage。验收标准:
执行状态: completed
viewSchema.js 已支持从 table zone 投影列表列顺序、渲染方式、对齐、列宽、固定列和排序配置。StructuredListPageDesigner 补齐列宽和固定列配置,运行态继续复用已有字典、组织、用户、地区、文件和图片渲染逻辑。目标: 从表单分组和字段生成详情视图。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessDetailDesigner.vueforge-admin-ui/src/views/app-center/components/designer/form-first/viewSchema.jsforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java执行要点:
验收标准:
执行状态: completed
BusinessDetailDesigner 保存详情时同步生成 ViewSchema.detail.sections。目标: 把对齐、宽度、排序明确放在视图层,而不是污染模型字段。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessListDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFormCreateDesigner.vueforge-admin-ui/src/components/ai-form/AiFormItem.vueforge-admin-ui/src/components/ai-form/AiTable.vueforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java执行要点:
LowcodeRuntimeConfigBuilder 输出 align/width/fixed/sortable。验收标准:
执行状态: completed
_forge.layout.align。fieldSettings 并投影到 ViewSchema。LowcodeRuntimeConfigBuilder 已输出表格列 align/width/fixed/sorter,视图层配置优先于模型字段默认宽度。目标: 提供统一的级联规则配置入口。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/BusinessRelationDesigner.vueforge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vueforge-admin-ui/src/views/app-center/components/designer/form-first/linkageSchema.js执行要点:
验收标准:
执行状态: completed
linkageSchema.js 已支持从字段 basicProps.cascade 汇总规则、规范化 LinkageSchema、校验规则和将规则回写目标字段。BusinessRelationDesigner 已扩展为“对象关系 / 级联规则”统一页签,支持新增、编辑、停用、删除级联规则。linkageSchema,并把规则回写到字段运行属性,避免级联配置散落且不可见。目标: 支持用户提出的 sys_dict_data 三字段级联。
涉及文件:
forge-admin-ui/src/composables/useDict.jsforge-admin-ui/src/components/DictSelect.vueforge-admin-ui/src/components/ai-form/AiFormItem.vueforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java执行要点:
useDict 保留 parentDictCode、linkedDictType、linkedDictValue。DictSelect 支持 parentDictCode 过滤。DictSelect 支持 linkedDictType/linkedDictValue 过滤。验收标准:
parent_dict_code 过滤。linked_dict_type/value 过滤。执行状态: completed
useDict 保留 parentDictCode、linkedDictType、linkedDictValue 元数据。DictSelect 和 AiFormItem 已按 parentDictCode、linkedDict 两种模式过滤字典选项,并支持上级变化清空下级。basicProps.cascade,发布运行态继续复用现有字典组件过滤能力。目标: 支持非字典级联,例如组织关联某类业务数据。
涉及文件:
forge-admin-ui/src/components/ai-form/AiFormItem.vueforge-admin-ui/src/views/app-center/components/designer/form-first/linkageSchema.jsforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java执行要点:
remoteParam 将上级字段值作为 API 参数。orgScope 将组织/部门/地区值作为过滤参数。objectReference 支持业务对象引用级联。验收标准:
执行状态: completed
remoteParam、orgScope、objectReference 类型,并统一生成运行态 remoteParam cascade 配置。AiFormItem 已在远程 optionSource 中注入上级字段参数。emptyStrategy=disabled 时运行态目标控件会在上级为空时禁用。目标: 防止发布后出现失效联动。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectPublishService.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessPublishCheckVO.javaforge-admin-ui/src/views/app-center/components/designer/BusinessPublishChecklist.vue执行要点:
验收标准:
执行状态: completed
BusinessObjectPublishService 新增 Linkage 发布检查,覆盖 LinkageSchema 和字段快捷级联配置。LINKAGE 类问题会跳转到“关系与级联”面板修复。目标: 发布检查覆盖表单 Schema、字段注册表、视图投影和级联规则。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectPublishService.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessPublishCheckVO.javaforge-admin-ui/src/views/app-center/components/designer/BusinessPublishChecklist.vue执行要点:
验收标准:
执行状态: completed
BusinessObjectPublishService 已将发布检查扩展到 FormDesignerSchema、ViewSchema 和 LinkageSchema。目标: 将表单优先 Schema 编译到现有运行态配置。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectDesignerService.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectPublishService.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java执行要点:
验收标准:
AiCrudPage 能正常新增、编辑、查询、列表展示。执行状态: completed
BusinessObjectDesignerService.saveDraft 已在保存草稿和发布前编译表单优先 Schema,输出统一的 LowcodeModelSchema 与 LowcodePageSchema。FormDesignerSchema 会同步字段 label、必填、只读、默认值、控件类型、表单顺序和 edit 区域字段设置。ViewSchema 会同步查询、列表、详情区域的字段顺序、对齐、宽度、固定列、排序和分组设置。LinkageSchema 会写回目标字段 basicProps.cascade,运行态组件可继续使用统一级联配置。BusinessObjectPublishService.publishCheck 会基于编译后的页面和字段配置执行运行配置生成检查。目标: 兼容已有业务对象,不要求用户重建表单。
涉及文件:
forge-admin-ui/src/views/app-center/components/designer/form-first/formDesignerSchema.jsforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectDesignerService.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessLayoutDesignService.java执行要点:
验收标准:
执行状态: completed
BusinessObjectDesignerService 在没有保存 FormDesignerSchema 时,会优先从旧 edit 区 formCreateRule 迁移出表单优先 Schema。formCreateRule 但存在旧 LowcodePageSchema.edit.fieldRefs 时,会按旧表单字段顺序和 fieldSettings 生成可编辑表单。designer_options,不直接改动旧运行态草稿。目标: 让设计版本能保存表单优先相关快照。
涉及文件:
forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessObjectDesignVersion.javaforge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectDesignVersionService.javaforge-admin-ui/src/views/app-center/components/designer/BusinessVersionPanel.vue执行要点:
验收标准:
执行状态: completed
ai_business_object_design_version.designer_options_snapshot JSON 快照列,用于保存 FormDesignerSchema/ViewSchema/LinkageSchema 等设计器扩展配置。designerOptionsSnapshot。designer_options 快照。目标: 解决 /app-center 应用总览和应用列表信息密度混乱的问题,让业务对象、应用入口、套件导航的层级更清楚。
涉及文件:
forge-admin-ui/src/views/app-center/index.vueforge-admin-ui/src/views/app-center/shared-center.cssforge-admin-ui/src/views/app-center/components/AppCard.vueforge-admin-ui/src/views/app-center/components/ObjectCard.vueforge-admin-ui/src/views/app-center/components/AppFilterBar.vue执行要点:
验收标准:
/app-center 首屏能清楚区分套件导航、业务对象、应用入口。执行状态: completed
/app-center 改为左侧套件导航 + 主工作区结构,主工作区用指标条、筛选条和对象/入口 tabs 区分信息层级。n-spin-content flex 导致卡片网格在桌面收缩成单列的问题,桌面恢复 3 列、1024px 恢复 2 列、移动端单列。top-menu / top-side-menu 在窄屏隐藏长标题、搜索入口和次要工具按钮,避免应用中心移动端横向溢出。/private/tmp/forge_app_center_visual/app-center_desktop.png、/private/tmp/forge_app_center_visual/app-center_tablet.png、/private/tmp/forge_app_center_visual/app-center_mobile.png。目标: 解决 /app-center/suite/CRM 交付验收区域信息堆叠和视觉拥挤的问题,让验收状态、阻断项和下一步动作更容易判断。
涉及文件:
forge-admin-ui/src/views/app-center/suite.[suiteCode].vueforge-admin-ui/src/views/app-center/components/SuiteAcceptancePanel.vueforge-admin-ui/src/views/app-center/shared-center.css执行要点:
SuiteAcceptancePanel 区分完整模式和 compact 模式,CRM 套件侧栏默认使用 compact。验收标准:
/app-center/suite/CRM 右侧交付验收区域不超过一屏主要高度。执行状态: completed
/app-center/suite/CRM 保留主栏业务对象和场景入口,交付验收固定为侧栏摘要,不再挤占主工作区。SuiteAcceptancePanel compact 模式强化结论卡、关键步骤、核心对象、引擎能力和渠道接入的视觉层级。n-spin-content 宽度收缩问题,侧栏与平板宽容器均按实际容器宽度排布。/private/tmp/forge_app_center_visual/app-center_suite_CRM_desktop.png、/private/tmp/forge_app_center_visual/app-center_suite_CRM_tablet.png、/private/tmp/forge_app_center_visual/app-center_suite_CRM_mobile.png。目标: 确保前端改造可构建。
命令:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
验收标准:
执行状态: completed
NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。// 注释、动态/静态 import chunk 和大 chunk 警告,未出现 Vue 模板编译错误。目标: 确保后端 DTO、Service、发布链路编译通过。
命令:
cd forge && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-admin-server -am compile -DskipTests
接口验证:
GET /ai/business/object/{objectId}/designerPUT /ai/business/object/{objectId}/designerPUT /ai/business/object/{objectId}/layout/formGET /ai/business/object/{objectId}/publish/checkPOST /ai/business/object/{objectId}/publish验收标准:
RespInfo。执行状态: completed
mvn -pl forge-admin-server -am compile -DskipTests。designer、layout/form、fields、publish-check。PUT /designer 和 POST /publish,避免改写真实设计草稿或发布版本。目标: 验证对象设计器基础交互无运行时错误。
涉及页面:
/app-center/app-center/suite/CRM/app-center/object/:objectCode/designer验证点:
fcDesigner 画布正常渲染。验收标准:
执行状态: completed
/app-center、/app-center/suite/CRM、/app-center/object/CRM_CUSTOMER/designer?suiteCode=CRM&panel=form。fcDesigner 中间画布被压缩导致字段竖排的问题;窄屏下由画布内部横向滚动承载完整设计器。/private/tmp/forge_app_center_visual/app-center_desktop.png、/private/tmp/forge_app_center_visual/app-center_suite_CRM_desktop.png、/private/tmp/forge_app_center_visual/app-center_object_CRM_CUSTOMER_designer?suiteCode=CRM&panel=form_desktop.png、对应 tablet/mobile 截图同目录。目标: 以 CRM 客户对象验证完整业务闭环。
验收脚本:
验收标准:
执行状态: pending
目标: 让变更记录可追溯。
涉及文件:
code-copilot/changes/form-first-business-object-designer/spec.mdcode-copilot/changes/form-first-business-object-designer/tasks.mdcode-copilot/changes/form-first-business-object-designer/execution-log.mdcode-copilot/memory/pitfalls.mdcode-copilot/memory/decisions.md执行要点:
验收标准:
tasks.md 状态与实际一致。execution-log.md 记录关键命令、结果、截图路径。执行状态: completed
execution-log.md,记录实现范围、验证命令、截图路径和剩余风险。fcDesigner 窄屏布局踩坑到 code-copilot/memory/pitfalls.md。目标: 修复表单优先对象设计器在真实使用中的交互回归。
问题清单:
BusinessFormCreateDesigner 异步回写已销毁的 fcDesigner 实例,导致 setRule 空引用并卡住。fcDesigner 内置预览弹层被对象设计器全屏层级遮挡。linkageSchema prop 变更重新 emit 给父组件,触发递归更新。relations 时,后端 DTO 默认空列表导致已有关系被误清空。执行状态: completed
BusinessFormCreateDesigner 增加销毁态和加载序号保护,所有异步 hydrate 完成后都会重新确认设计器实例存在。BusinessListDesigner 移除查询条件、表格列、工具栏、行操作汇总侧栏,列表设计区域改为单列工作区。BusinessObjectDesignerShell 降低全屏层级,让 form-create / Element Plus 预览弹层可以正常浮在设计器之上。BusinessRelationDesigner 拆分关系脏状态和级联同步,外部 schema 重置不再反向 emit,保存级联时不会携带未加载或未修改的空关系数组。object-designer.[objectCode].vue 的通用草稿保存不再携带 relations,关系只由关系面板专门保存。BusinessObjectDesignerDTO 的 fields、relations、designerOptions 改为可空,后端可以区分“未传字段”和“明确传空数组”。mvn -pl forge-admin-server -am compile -DskipTests、NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。目标: 修复运行态动态页面中组织选择、用户选择回显以及编辑表单布局与设计态不一致的问题。
问题清单:
orgTreeSelect、userSelect 类型,历史别名或设计器中间类型会退化为普通输入框。targetField,遇到 ownerUserIdName、ownerUserName、ownerName 等不同翻译字段时展示不稳定。formCreateRule/formCreateOptions,运行态直接消费的 fieldSettings 没同步,导致顺序、span、labelWidth、align、label 不一致。执行状态: completed
AiFormItem 增加组织/用户组件别名识别,组织树默认读取 /system/org/tree,并在选择或编辑回填时通过候选名称字段补齐展示文本。AiFormItem 用户选择回填支持 labelValueField、targetField、${field}Name、*UserName、*Name 等候选字段,选择和清空都会同步显示字段。AiForm 必填校验把组织/用户别名按选择类组件处理。BusinessFormDesigner 保存表单设计时同步编译 fieldSettings、fieldRefs、editGridCols、labelPlacement、labelWidth,并保留关系字段配置。LowcodeRuntimeConfigBuilder 运行态编辑字段优先使用设计器 label/defaultValue,规范组织/用户历史别名,并为组织/用户字段补齐默认 labelValueField/targetField。mvn -pl forge-admin-server -am compile -DskipTests、NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。目标: 继续修复真实使用中暴露的组织列表不渲染、编辑页样式与设计器不一致、表单新增字段未同步数据库列的问题。
问题清单:
optionSource,运行态会跳过默认 /system/org/tree 数据源。res.data,对 RespInfo、分页 records/list/rows、嵌套 data 等响应形态不够健壮。执行状态: completed
AiFormItem 对空/无效 optionSource 增加回退逻辑,组织选择默认走 /system/org/tree,并增强远程响应解包和 tree option 字段兜底。AiForm / AiCrudPage / 动态 CRUD 页面支持编辑表单 labelAlign、editXGap、editYGap,运行态默认标签右对齐、行列间距 16。FormDesignerSchema、form-create 双向转换、前后端编译链路保存 rowGap/columnGap,后端运行配置输出更接近设计器布局;2 列编辑表单默认弹窗宽度提升到 1040px。BusinessObjectDesignerDTO 新增 syncDdl/confirmSyncDdl,BusinessObjectDesignerService.saveDesigner 在表单保存后使用 LowcodeDdlService 预览并执行缺失表结构同步,继续校验 ai:lowcode:deploy-ddl 权限。BusinessFormDesigner 保存表单时请求同步 DDL,新增字段保存后会同步缺失数据库列。mvn -pl forge-admin-server -am compile -DskipTests、NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。目标: 修复 fcDesigner 布局组件保存/回显异常、运行态编辑表单未按设计布局渲染、表单设计页保存按钮过多的问题。
问题清单:
fcRow/col/elCard/elTabs/elCollapse/elDivider 等布局节点会被转换成普通字段,重新进入设计器后布局退化。editSchema,卡片、标签页、折叠面板、栅格行列等设计布局无法还原。执行状态: completed
FormDesignerSchema 将布局/辅助组件归一为虚拟节点,form-create 双向转换保留原始类型、children、style/native/wrap 等元数据,不再生成伪字段。BusinessFormDesigner 和后端编译链路生成 formLayout 树,并把 row/col 继承 span 编译到 fieldSettings;表单优先编译会清理旧 canvas。LowcodeRuntimeConfigBuilder 下发 options.editFormLayout,动态 CRUD 页面把布局树与字段 schema 合并。AiForm 新增递归布局渲染,支持 row/col/card/tabs/collapse/divider,同时继续复用原有 AiFormItem 字段渲染和校验。mvn -pl forge-admin-server -am compile -DskipTests、NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。目标: 修复应用入口挂载菜单后的重复 tab、对象设计器新开页面污染 tab、动态搜索区按钮错位,并补齐表单两列/三列配置到运行态适配。
问题清单:
/app-center/app/:appId 作为应用入口桥接页会先登记“应用入口”tab,再 replace 到实际动态页面,形成重复 tab。AiForm 搜索操作区独立开 grid 后落到第一列,导致“搜索/重置/展开”按钮靠左。执行状态: completed
BusinessAppEntry 和 BusinessObjectDesigner 路由增加 skipTab,tab guard 会跳过桥接/设计器路由并清理遗留桥接 tab。forceClosable,顶部 tab 组件改为按 tab 计算关闭能力,客户动态页即使是唯一业务 tab 也可以关闭。object-designer.[objectCode].vue 全屏弹层,不再通过路由新开 tab;设计器直接 URL 访问仍保持兼容。AiForm 搜索操作区跨整行右对齐,折叠按钮判断改为基于可见字段。BusinessFormDesigner 增加“表单列数”控制,保存到 FormDesignerSchema.layout.gridColumns,发布运行态继续映射到 editGridCols/formLayout;三列表单默认弹窗宽度提升到 1180px。mvn -pl forge-admin-server -am compile -DskipTests、NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。目标: 修复表单设计器中“单列/两列/三列”只影响运行态、不影响 fcDesigner 画布的问题,并让布局组件拖入后显示中文业务化名称。
问题清单:
FormDesignerSchema.layout.gridColumns 只保存了业务列数,但 fcDesigner 画布实际按 form-create rule 的 col.span 渲染,导致画布一直看起来像单列。fcRow/col/elCard/elTabs/elCollapse/elDivider 等布局组件后,部分节点标题或回显名称保留英文/原始组件名。col.props.span=12 属于 form-create 24 栅格,转换成 Forge schema 时不能直接当成业务列跨度,否则两列布局回显会被撑成整行。null inheritedSpan 误拆箱,导致 PUT /ai/business/object/{objectId}/designer 空指针。执行状态: completed
BusinessFormDesigner 切换表单列数时,立即把当前 schema 组件重算为对应的 form-create col.span:单列 24、两列 12、三列 8。BusinessFormCreateDesigner 重置字段和追加字段时保留当前列数,并向 fcDesigner 显式传入中文 locale。FormDesignerSchema 增加布局组件中文默认名称和英文/原始名称归一化,保存、回显和拖入后的布局节点统一显示中文。formCreateToForge 读回 fcDesigner 规则时也会按当前列数重算布局,避免 col.props.span 被误解释成业务列跨度。BusinessObjectDesignerService 修复 collectRuntimeFormFields 中 inheritedSpan 三元表达式拆箱问题,空布局容器不再触发 NPE。mvn -pl forge-admin-server -am compile -DskipTests、NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。目标: 修复 fcDesigner 删除字典/引用组件后,保存仍提示“字典字段必须配置字典类型”或引用字段配置不完整的问题。
问题清单:
FormDesignerSchema.components,不会自动删除字段资产注册表中的历史字段。DICT/SELECT/RADIO/CHECKBOX/CASCADER/REFERENCE 字段如果已经不在当前画布或已改成普通输入,仍可能触发字段类型必填校验。执行状态: completed
BusinessFormDesigner 保存前按当前 FormDesignerSchema 建立字段到画布组件的映射;字段已移出画布且未配置字典/引用,或字段在画布上已切回普通组件时,自动降级为普通文本字段。dictType、referenceObjectCode、referenceDisplayField,并把 componentType/queryType 调整为 input/like。BusinessObjectDesignerService.saveDesigner 在重建模型字段前增加后端兜底,对提交字段和当前表单 schema 做同样归一化,避免残留字段资产再次触发后端校验。BusinessFormDesigner.vue ESLint、git diff --check、mvn -pl forge-admin-server -am compile -DskipTests、NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。目标: 修复栅格布局、栅格列等布局组件前显示 ref_Fs5x... 这类 fcDesigner 临时引用串的问题。
问题清单:
ref_... 临时 id/name/title。name=component.id,导致画布上再次显示临时 ref。执行状态: completed
FormDesignerSchema 增加 ref_... 临时引用识别,布局标题归一化时会剥离临时 ref,旧 schema 中保存的临时布局 id 也会被替换为稳定 cmp_<componentKey>_<index>。formCreateToForge 转换布局组件时跳过临时 ref_... 作为标题/id,字段编码生成也不再把 ref_... 当作有效字段名。forgeToFormCreate 回写布局 rule 时不再给非字段组件写 name,避免 fcDesigner 把布局 id 当作展示前缀。git diff --check、NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build。