status: done created: 2026-05-29 complexity: 🔴复杂
当前 Forge 低代码能力已经具备数据模型、页面搭建、发布、动态 CRUD、代码预览、业务应用中心等底层能力,但产品主链路仍明显偏“技术模型/代码生成器”:
正常低代码平台的主体验应当是:
创建业务对象 → 设计业务字段 → 设计表单/列表/详情 → 配置关系/操作/权限/流程 → 发布应用
用户不需要先理解“数据模型”。用户只需要知道“客户有哪些字段”“客户表单怎么排版”“客户详情里能看到联系人和跟进记录”“谁可以看和改”。平台内部再把这些业务配置转换为低代码模型、物理表、动态 CRUD 配置和运行时页面。
本变更目标是把 Forge 低代码从“模型驱动的代码生成器体验”调整为“字段驱动的业务对象搭建器体验”:
ai_lowcode_model、ai_crud_config、DynamicCrudController、LowcodeRuntimeConfigBuilder 等底层能力。完成后,业务人员应能在“应用中心 → CRM → 客户 → 设计”中完成以下闭环:
model_schema、page_schema、configKey、表名、DDL 等技术信息。forge-admin-ui/src/views/ai/lowcode-models.vue 当前页面标题和导航使用“业务域与数据模型”“数据模型设计”“领域数据模型”等概念。lowcode-models.vue 顶部操作包括“新建模型”“导入数据表”“AI 生成模型”“DDL 预览”“保存并同步表结构”,说明当前主路径仍围绕数据模型和表结构。lowcode-models.vue 在左侧树中使用“域”“模型”作为资产类型,普通业务用户需要先理解业务域与模型层级。forge-admin-ui/src/components/lowcode-builder/model/LowcodeModelDesigner.vue 已有“字段设计”“关联配置”“校验规则”等能力,可复用为业务对象设计器的核心模块。LowcodeModelDesigner.vue 的“模型基础信息”中直接展示“模型编码 / 数据表名”“应用类型”等技术项,适合作为高级配置,不适合作为普通用户首屏。forge-admin-ui/src/components/lowcode-builder/model/ModelFieldTable.vue 已支持字段名称、字段编码、字段说明、数据类型、表单组件、长度、小数位、必填、默认值、关联配置等字段属性。ModelFieldTable.vue 当前以表格方式编辑字段,字段编码、数据类型、长度、小数位等技术属性过于靠前;需要改成业务字段列表 + 右侧属性面板,高级属性折叠。LowcodeModelDesigner.vue 已有“关联配置”页签,支持关系类型、关联对象、本模型字段、关联对象字段、回显字段,但需要用业务对象语言重新包装,并与应用中心对象关系配置统一。forge-admin-ui/src/components/lowcode-builder/page/LowcodePageBuilder.vue 已支持“列表页面”“表单与详情”两个设计区域。LowcodePageBuilder.vue 支持自由布局、结构化模式、标准单表、左树右表、主子表等布局类型。LowcodePageBuilder.vue 通过 syncPageSchemaWithModel 将页面 Schema 与模型字段同步,说明字段驱动页面配置已经具备基础能力。forge/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeRuntimeConfigBuilder.java 已能将 LowcodeModelSchema + LowcodePageSchema 转成 AiCrudPage 运行时配置。LowcodeRuntimeConfigBuilder 已生成 searchSchema、columnsSchema、editSchema、apiConfig、options、字典、脱敏、加密、转换等配置,可作为业务对象发布的内部转换器继续复用。LowcodeModelController 暴露 /ai/lowcode/model/page、/list、/{id}、/validate、/ddl/preview、/preview-db-table、/import-db-table 等接口。LowcodeModelController 的语义是“低代码数据模型接口”,适合开发者模式和内部资产管理,不应作为业务用户主入口。LowcodeModelController 已具备模型保存、状态启停、校验、DDL 预览、数据库表导入能力,可被业务对象设计器服务层复用。LowcodePublishService 已负责发布、版本、回滚和菜单注册。LowcodePublishService.publish 已从模型 Schema 和页面 Schema 生成运行时配置,更新 ai_crud_config 并同步业务运行入口。LowcodePublishService.ensureTableReady 当前要求表存在或在线建表权限,适合作为业务对象发布检查的一部分,但普通用户不应直接看到 DDL 细节。LowcodePublishService.syncBusinessRuntimeEntry 已能把低代码发布结果同步到业务应用入口,说明“业务对象 → 运行入口”的后半段链路已经存在。forge-admin-ui/src/views/app-center/index.vue 已提供应用中心、业务套件、业务对象、应用入口等产品入口。forge-admin-ui/src/views/app-center/object.[objectCode].vue 已有对象详情、运行态提示、配置模型、配置布局、发布应用、关系、能力页签。业务用户不理解也不需要理解数据模型、物理表、Schema、DDL。业务用户关心:
实施人员需要快速把业务语言落成可运行应用:
开发人员继续使用底层低代码和代码生成能力:
ai_lowcode_model 仍作为模型事实来源。ai_crud_config 仍作为动态 CRUD 运行配置事实来源。DynamicCrudController、AiCrudPage、LowcodeRuntimeConfigBuilder、LowcodePublishService 继续复用。undefined 字段、空 label 或脏字段引用。DynamicCrudController。AiCrudPage。ai_lowcode_model、ai_crud_config 事实来源。/app-center/object/:objectCode/designer 或等价路由。LowcodeModelSchema.relations 和 ai_business_object_relation 保持同步或明确映射。ai_crud_config。model_schema、page_schema、configKey、DDL、表名作为主信息。undefined、null、空字段名、空列标题。tenant_id=1。首期优先复用现有事实来源,避免新增一套字段事实表:
ai_business_object:业务对象主资产,承载用户入口和业务语义。ai_lowcode_model:字段、关系、策略等模型 Schema 的事实来源。ai_crud_config:发布后的运行配置事实来源。ai_crud_config_version:发布版本和回滚事实来源。ai_business_object_relation:业务应用中心关系展示和运行入口事实来源。建议补充以下结构:
| 操作 | 表名 | 字段/索引 | 说明 |
|---|---|---|---|
| 扩展 | ai_business_object |
design_status |
设计状态:DRAFT/READY/PUBLISHED/ERROR |
| 扩展 | ai_business_object |
config_key |
当前对象默认运行配置 key,便于从对象进入运行页 |
| 扩展 | ai_business_object |
last_publish_time |
最近发布时间 |
| 扩展 | ai_business_object |
last_publish_version |
最近发布版本号 |
| 扩展 | ai_business_object |
designer_options JSON |
设计器偏好和高级配置开关,不保存敏感信息 |
| 新增 | ai_business_object_design_version |
object_id, version_no, model_schema_snapshot, page_schema_snapshot, relation_schema_snapshot, publish_status |
业务对象维度设计版本,可与 ai_crud_config_version 互相追溯 |
| 新增 | ai_business_field_template |
template_code, template_name, field_schema, suite_code, status |
可选字段模板库,例如客户电话、负责人、地区 |
数据脚本要求:
forge/db/migration/。information_schema。CREATE TABLE IF NOT EXISTS。INSERT ... SELECT ... WHERE NOT EXISTS。tenant_id=1。| 操作 | 接口 | 方法 | 说明 |
|---|---|---|---|
| 新增 | /ai/business/object/{objectId}/designer |
GET | 获取业务对象设计器完整草稿 |
| 新增 | /ai/business/object/{objectId}/designer |
PUT | 保存业务对象设计器完整草稿 |
| 新增 | /ai/business/object/{objectId}/designer/basic |
PUT | 保存对象基础信息 |
| 新增 | /ai/business/object/{objectId}/designer/dirty-check |
GET | 查询是否有未发布变更 |
| 操作 | 接口 | 方法 | 说明 |
|---|---|---|---|
| 新增 | /ai/business/object/{objectId}/fields |
GET | 查询业务字段 |
| 新增 | /ai/business/object/{objectId}/fields |
POST | 新增业务字段 |
| 新增 | /ai/business/object/{objectId}/fields/{fieldCode} |
PUT | 修改业务字段 |
| 新增 | /ai/business/object/{objectId}/fields/{fieldCode} |
DELETE | 删除或停用业务字段 |
| 新增 | /ai/business/object/{objectId}/fields/reorder |
POST | 字段排序 |
| 新增 | /ai/business/field-template/list |
GET | 查询字段模板 |
| 操作 | 接口 | 方法 | 说明 |
|---|---|---|---|
| 新增 | /ai/business/object/{objectId}/layout/form |
PUT | 保存表单布局 |
| 新增 | /ai/business/object/{objectId}/layout/list |
PUT | 保存列表布局 |
| 新增 | /ai/business/object/{objectId}/layout/detail |
PUT | 保存详情布局 |
| 新增 | /ai/business/object/{objectId}/layout/preview |
POST | 预览页面运行配置 |
| 操作 | 接口 | 方法 | 说明 |
|---|---|---|---|
| 增强 | /ai/business/object/{objectId}/relations |
GET/POST | 关系配置与模型关系同步 |
| 新增 | /ai/business/object/{objectId}/actions |
GET/POST/PUT/DELETE | 自定义操作配置 |
| 新增 | /ai/business/object/{objectId}/permission-summary |
GET | 查询对象权限摘要 |
| 新增 | /ai/business/object/{objectId}/publish-check |
GET | 发布检查 |
| 新增 | /ai/business/object/{objectId}/publish |
POST | 从业务对象设计器发布运行配置 |
| 新增 | /ai/business/object/{objectId}/versions |
GET | 查询业务对象设计版本 |
| 新增 | /ai/business/object/{objectId}/versions/{versionId}/rollback |
POST | 回滚业务对象设计版本 |
以下接口保留,供业务对象设计器服务层和开发者模式复用:
| 接口 | 说明 |
|---|---|
/ai/lowcode/model/* |
模型资产管理、校验、DDL 预览、数据库表导入 |
/ai/lowcode/app/* |
低代码应用草稿、预览、发布、版本 |
/ai/crud/{configKey}/* |
动态 CRUD 运行时 |
| 页面/组件 | 变更 |
|---|---|
src/views/app-center/object.[objectCode].vue |
将配置模型、配置布局、发布应用收敛为“设计对象”主入口 |
新增 src/views/app-center/object-designer.[objectCode].vue |
业务对象设计器主页面 |
新增 BusinessObjectDesignerShell.vue |
设计器外壳:左侧导航、顶部工具栏、主体区域 |
新增 BusinessFieldManager.vue |
业务字段管理,普通属性优先,高级属性折叠 |
新增 BusinessFormDesigner.vue |
表单画布,复用/改造 CanvasFormDesigner |
新增 BusinessListDesigner.vue |
列表查询、表格列、工具栏和行操作配置 |
新增 BusinessDetailDesigner.vue |
详情分组、详情页签和关联列表配置 |
新增 BusinessRelationDesigner.vue |
业务语言关系配置,与模型关系同步 |
新增 BusinessActionDesigner.vue |
自定义按钮和操作配置 |
新增 BusinessPublishChecklist.vue |
发布检查和修复入口 |
新增 BusinessAdvancedConfig.vue |
开发者高级配置 |
LowcodeModelDesigner.vue |
拆分可复用字段、关系、规则能力;普通入口不直接使用“数据模型设计”标题 |
ModelFieldTable.vue |
从技术表格编辑逐步改为业务字段列表 + 属性面板;字段编码、列名、长度进入高级区 |
LowcodePageBuilder.vue |
作为内部页面设计能力复用,业务入口包装为表单/列表/详情设计 |
BusinessObjectWizardDrawer.vue |
四种创建方式统一跳转业务对象设计器 |
business-app.js |
增加对象设计器、字段、布局、发布检查等 API |
推荐继续放在 forge-plugin-generator 的 businessapp 和 lowcode 包内,保持边界清晰。
| 类/服务 | 说明 |
|---|---|
BusinessObjectDesignerController |
业务对象设计器聚合接口 |
BusinessObjectDesignerService |
组装业务对象、模型 Schema、页面 Schema、关系、发布状态 |
BusinessFieldDesignService |
字段新增、编辑、删除、排序、引用检查 |
BusinessLayoutDesignService |
表单、列表、详情布局保存和字段引用校验 |
BusinessObjectPublishService |
面向业务对象的发布检查和发布门面 |
BusinessObjectDesignVersionService |
业务对象设计版本记录和回滚 |
BusinessFieldTemplateService |
字段模板管理 |
BusinessObjectRelationService |
增强为业务关系和模型关系同步 |
LowcodeSchemaValidator |
增强字段引用、空 label、重复 field、页面脏引用校验 |
LowcodeRuntimeConfigBuilder |
继续作为业务对象发布的运行配置转换器 |
LowcodePublishService |
继续负责最终发布、版本、菜单和业务入口同步 |
新增或调整权限:
| 权限标识 | 说明 |
|---|---|
ai:businessObject:design |
进入业务对象设计器 |
ai:businessObject:field |
维护业务字段 |
ai:businessObject:layout |
维护表单、列表、详情布局 |
ai:businessObject:relation |
维护对象关系 |
ai:businessObject:action |
维护自定义操作 |
ai:businessObject:publish |
发布业务对象 |
ai:businessObject:advanced |
查看和维护高级技术配置 |
ai:businessFieldTemplate:list |
查看字段模板 |
ai:businessFieldTemplate:edit |
维护字段模板 |
菜单策略:
undefined 字段和脏引用问题。mvn -pl forge-admin-server -am compile -DskipTests。source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui build。undefined。/test 阶段补充端到端验收清单。ai_crud_config 和业务应用入口。undefined、空 label、空字段名。model_schema、page_schema、configKey、DDL、表名作为主信息。/app-center/object/:objectCode/designer,对象详情页只保留“设计对象”主入口。ai_business_field_template 承载通用模板,方便后续按套件扩展。CanvasFormDesigner 和现有低代码页面搭建能力,不引入第二套主设计器。ai_business_object_design_version,并保留 ai_crud_config_version 追溯字段。AiCrudPage 和 DynamicCrudController。LowcodePublishService。ai_lowcode_model.model_schema 和 ai_crud_config.page_schema 承载字段和页面配置。ai_business_object 作为业务资产聚合入口,不直接替代低代码模型表。LowcodeRelationSchema 和 ai_business_object_relation 做双向映射。| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| Task 0 | completed | spec.md, tasks.md |
固化新路由、入口隔离、字段删除、模板、画布、建表权限和版本表结论 |
| Task 1 | completed | forge/db/migration/V1.0.40__add_business_object_designer.sql, AiBusinessObject.java, AiBusinessObjectDesignVersion.java, AiBusinessFieldTemplate.java |
扩展业务对象设计字段,新增设计版本和字段模板结构与内置模板 |
| Task 2 | completed | dto/businessapp/*, vo/businessapp/*, constant/BusinessObjectDesignStatus.java, constant/BusinessPublishCheckLevel.java |
补齐设计器、字段、布局、发布和版本协议 |
| Task 3 | completed | BusinessFieldSchemaService.java, BusinessFieldTemplateService.java, BusinessFieldTemplateMapper.java, BusinessFieldTemplateMapper.xml, LowcodeFieldSchema.java |
支持字段默认 Schema、模板查询和字段业务扩展属性 |
| Task 4 | completed | BusinessPublishCheckItemVO.java, BusinessObjectDesignVersionDTO.java, BusinessObjectDesignVersionService.java, BusinessObjectDesignVersionMapper.java, BusinessObjectDesignVersionMapper.xml |
定义发布检查项和对象设计版本快照协议 |
| Task 5 | completed | BusinessObjectDesignerController.java, BusinessObjectDesignerService.java |
提供对象设计器加载和保存聚合接口,保存草稿时同步业务对象、模型 Schema 和页面 Schema |
| Task 6 | completed | BusinessFieldDesignService.java, BusinessObjectDesignerController.java |
实现字段列表、新增、修改、删除/停用、排序和页面引用检查 |
| Task 7 | completed | BusinessLayoutDesignService.java, BusinessObjectDesignerController.java |
实现表单、列表、详情布局保存和运行配置预览 |
| Task 8 | completed | BusinessObjectRelationController.java, BusinessObjectDesignerService.java |
关系保存/删除后同步 LowcodeModelSchema.relations |
| Task 9 | completed | BusinessObjectActionService.java, BusinessObjectActionVO.java, BusinessObjectActionDTO.java, BusinessObjectDesignerController.java |
自定义操作保存到 designer_options,权限摘要复用能力挂接 |
| Task 10 | completed | BusinessObjectPublishService.java, BusinessObjectDesignerController.java |
发布检查区分 PASS/WARN/BLOCK,发布门面复用低代码发布链路并回写业务对象发布状态 |
| Task 11 | completed | BusinessObjectPublishService.java, BusinessObjectDesignVersionService.java, BusinessObjectDesignerService.java |
发布时记录业务对象设计版本,支持按设计版本回滚草稿和低代码版本 |
| Task 17 | completed | BusinessDetailDesigner.vue, object-designer.[objectCode].vue |
接入详情字段分组、排序、隐藏/只读、详情页签和关联入口保存 |
| Task 18 | completed | BusinessRelationDesigner.vue, BusinessActionDesigner.vue, BusinessPermissionFlowPanel.vue, object-designer.[objectCode].vue |
接入关系配置、自定义操作、权限摘要和能力挂接摘要 |
| Task 19 | completed | BusinessPublishChecklist.vue, object-designer.[objectCode].vue, BusinessObjectDesignerShell.vue |
发布检查按通过/警告/阻断分组,支持修复跳转、发布、打开应用、版本回滚 |
| Task 20 | completed | BusinessAdvancedConfig.vue, object-designer.[objectCode].vue, BusinessObjectDesignerShell.vue |
高级配置按 ai:businessObject:advanced 权限展示,普通模式不显示表名、Schema、DDL、configKey |
| Task 21 | completed | object.[objectCode].vue, ObjectCard.vue, ReadinessPanel.vue, SuiteAcceptancePanel.vue |
应用中心对象详情改为设计对象主入口,普通用户先进入设计器,运行应用入口保留 |
| Task 22 | completed | BusinessObjectWizardDrawer.vue, index.vue, suite.[suiteCode].vue |
四种创建方式统一跳转业务对象设计器,不再落到低代码模型管理 |
| Task 23 | completed | V1.0.41__add_business_object_designer_menu_permissions.sql, object.[objectCode].vue, object-designer.[objectCode].vue |
补齐设计/字段/布局/操作/发布/高级权限与菜单隔离,普通用户隐藏技术细节 |
| Task 24 | completed | BusinessObjectPublishService.java, V1.0.42__fix_crm_business_relation_field_direction.sql |
后端编译通过;发布检查补充目标对象字段校验,CRM 样板关系字段方向修正为当前对象 id → 目标对象外键 |
| Task 25 | completed | BusinessFieldPropertyPanel.vue, object-designer.[objectCode].vue |
修复未选字段时属性面板空指针;对象设计器保留 19 位 objectId 字符串,页面验证无白屏和 fieldName/null 错误 |
| Task 26 | completed | BusinessPublishChecklist.vue, object-designer.[objectCode].vue |
CRM 客户对象发布检查 PASS,发布成功并打开 /ai/crud-page/crm_customer,运行页无 undefined |
| Task 27 | completed | spec.md, tasks.md |
回填 Phase 5 验证结果和已修复问题,任务状态与实际完成情况一致 |
| Task 28 | completed | BusinessObjectWizardDrawer.vue, AppEditorDrawer.vue, AppCard.vue, ObjectCard.vue, BusinessAppService.java, MenuRegisterAdapter.java, MenuRegisterAdapterImpl.java, app-entry.vue |
移除模板创建入口;业务对象和应用入口支持启停/删除;应用入口按管理端菜单、移动应用、外部接口配置挂载位置,管理端入口同步生成系统菜单 |
Phase 2 验证:2026-05-29 使用 JDK 17 执行 mvn -pl forge-admin-server -am compile -DskipTests,结果 BUILD SUCCESS。
Phase 3 Task 17-20 验证:2026-05-29 使用 Node v20.19.0 执行 pnpm --dir forge-admin-ui exec eslint ...,新增和改动前端文件检查通过;使用 NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build,结果构建成功。默认堆内存构建在 chunk 渲染阶段 OOM,增大 Node 堆后通过;构建期间存在项目既有 UnoCSS 图标缺失和 CSS // 注释警告。
Phase 4 Task 21-23 验证:2026-05-29 使用 Node v20.19.0 执行 pnpm --dir forge-admin-ui exec eslint src/views/app-center/index.vue src/views/app-center/suite.[suiteCode].vue src/views/app-center/object.[objectCode].vue src/views/app-center/object-designer.[objectCode].vue src/views/app-center/components/ObjectCard.vue src/views/app-center/components/BusinessObjectWizardDrawer.vue src/views/app-center/components/ReadinessPanel.vue src/views/app-center/components/SuiteAcceptancePanel.vue,检查通过。
Phase 5 Task 24-27 验证:2026-05-29 使用 JDK 17 执行 mvn -pl forge-admin-server -am compile -DskipTests,结果 BUILD SUCCESS;使用 Node v20.19.0 执行 NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build,结果构建成功。构建期间仍存在项目既有 UnoCSS 图标缺失、CSS // 注释和大 chunk 警告;默认 Node 堆内存构建在 chunk 渲染阶段可能 OOM,增大堆内存后通过。
问题修复记录:2026-05-29 修复 BusinessFieldPropertyPanel.vue 在 field=null 时 createFieldForm 读取 fieldName 的空指针;修复 object-designer.[objectCode].vue 将 19 位 route.query.objectId 转为 Number 导致精度丢失的问题;补充 BusinessObjectPublishService.java 对关系目标对象字段的发布校验;新增 V1.0.42__fix_crm_business_relation_field_direction.sql 修正 CRM 样板关系字段方向。
CRM 端到端验收:2026-05-29 使用 Playwright 复用前端登录、密钥交换和加密请求链路,打开 /app-center/object/CUSTOMER/designer?objectId=1910000000000000101&panel=fields,字段列表 18 条,客户等级字段存在,属性面板正常渲染,无页面错误和 fieldName/null 控制台错误。发布检查 overallStatus=PASS、blockCount=0、warnCount=0;发布客户对象成功,生成设计发布版本 2060296120277417985;打开 /ai/crud-page/crm_customer 成功,搜索区和表格列无 undefined。
待 /review lowcode-business-object-designer 执行。