status: propose created: 2026-05-19 complexity: 🔴复杂
当前 AI CRUD 模块已经具备自然语言生成配置、配置管理、动态 CRUD 渲染和代码包下载能力,但主要面向技术人员:用户仍需要理解表名、字段名、JSON Schema、接口配置、菜单注册和建表 SQL。新目标是将这些技术细节封装为业务人员可理解的“业务对象、页面组件、字段属性、发布配置”,形成零代码全链路:
可视化数据模型设计 → 拖拽式页面搭建 → 实时效果预览 → 一键在线部署发布
完成后应达到:
AiCrudPage、动态 CRUD、字典、脱敏、加解密、菜单注册能力,避免重做已成熟链路。forge-admin-ui/src/views/ai/crud-generator.vue:当前 AI CRUD 生成器入口,左侧为对话和历史会话,右侧为配置面板,生成阶段包括元数据、搜索、表格、编辑表单、接口和建表 SQL。forge-admin-ui/src/views/ai/crud-config.vue:CRUD 配置管理页,当前编辑方式仍以基础信息 + 多个 Schema/JSON 面板为主。forge-admin-ui/src/views/ai/crud-page.vue:动态渲染页,根据 configKey 调用 /ai/crud-config/render/{configKey},转换字典、列渲染和模板组件后渲染 AiCrudPage。forge-admin-ui/src/components/ai-form/AiCrudPage.vue:现有通用 CRUD 渲染核心,已支持搜索区、表格、弹窗/抽屉表单、批量删除、导入按钮、导出按钮、自定义查询、列表/卡片模式。forge-admin-ui/src/components/form-designer/FormDesigner.vue:已有 Naive UI 风格拖拽表单设计器雏形,左侧组件面板、中间画布、右侧属性面板均已存在,但尚未接入 CRUD 配置保存和整页搭建。forge-admin-ui/src/catalog/index.js 与 forge-admin-ui/src/components/page-templates/*.vue:当前页面模板注册机制已有 simple-crud 和 tree-crud,可以继续作为低代码页面模板和运行时渲染扩展点。AiCrudConfig 目前持久化 configKey/tableName/tableComment/searchSchema/columnsSchema/editSchema/apiConfig/options/dictConfig/desensitizeConfig/encryptConfig/transConfig/layoutType,缺少业务模型协议、页面布局协议、草稿/发布状态、版本快照。AiCrudConfigService#createConfig 在创建配置时会立即保存并尝试注册菜单,当前没有“草稿”和“发布”分离。AiCrudConfigService#getRenderConfig 运行时强制生成动态 CRUD API,使用 :id 占位符,能规避 AI 生成 {id} 的历史问题。DynamicCrudController 已提供 /ai/crud/{configKey}/page、详情、新增、修改、删除接口,并统一加了 @ApiEncrypt / @ApiDecrypt。DynamicCrudService 和 DynamicCrudRepository 通过配置驱动动态读写表,已有字段白名单、表名校验、列映射、脱敏、字典翻译和字段加解密处理。CrudGeneratorStreamService 已支持 SSE 流式阶段输出,并可注入表结构和页面模板约束。AiCrudConfigGenerateService#buildDescriptionPrompt 原提示词示例使用 {id},与 AiCrudPage :id 占位符规则不一致;本次已修正为 :id。form-create-designer 是开源 Vue 低代码表单设计器,仓库说明为 MIT License,支持拖拽、JSON 表单规则、扩展组件、表单验证、布局和 AI 助手等能力。FormDesigner,抽象 FormDesignerAdapter。后续如确需引入 form-create-designer,通过隔离适配器接入,不让 Element Plus/Antd 依赖污染现有 CRUD 运行时。tenant_id=1,新增迁移脚本必须做 NOT EXISTS 和 information_schema 防重复保护。/apply。modelSchema + pageSchema 转换为 AiCrudPage 所需运行时配置,不要求保存发布即可预览。AiCrudConfig,保存发布版本,必要时执行安全 DDL,注册或更新菜单,启用运行时页面。editSchema 白名单写入,字典字段支持“标签 -> 值”转换。appType=TREE/treeConfig,页面模板支持左树右表,运行时新增 /ai/crud/{configKey}/tree 树接口。configKey 的列配置时,用其覆盖导出顺序、表头和字典类型;动态查询链路仍保持字段白名单、字典翻译和脱敏。modelSchema/pageSchema/options/layoutType,AI 降级时规则引擎同步生成基础低代码协议。configKey 必须小写字母开头,仅允许小写字母、数字、下划线,长度 2-64。id, tenant_id, create_by, create_time, create_dept, update_by, update_time,建议包含 del_flag。AuthImage 或运行时文件 URL 归一化方案。/ai/crud-page/{configKey},组件为 ai/crud-page。ai:lowcode:deploy-ddl,并记录操作日志。MASTER_DETAIL 时返回明确业务异常。AI管理 目录;后续可扩展为管理员选择父菜单。/apply 前需要人工确认。| 操作 | 表名 | 字段/索引 | 说明 |
|---|---|---|---|
| 修改 | ai_crud_config |
app_name, build_mode, model_schema, page_schema, publish_status, draft_version, published_version, publish_time, publish_by |
支持低代码草稿、页面协议和发布状态 |
| 新增 | ai_crud_config_version |
config_id, config_key, version_no, version_type, model_schema, page_schema, search_schema, columns_schema, edit_schema, api_config, options, publish_snapshot, remark |
保存发布/回滚版本快照 |
| 新增/更新 | sys_resource |
低代码搭建器菜单、低代码应用管理菜单、发布权限按钮 | 新增脚本必须 tenant_id=1 且防重复 |
modelSchema 协议{
"appType": "SINGLE",
"tableMode": "EXISTING",
"tableName": "biz_contract",
"businessName": "合同管理",
"treeConfig": {
"sourceModelCode": "",
"sourceTableName": "",
"keyField": "id",
"parentField": "parentId",
"labelField": "name",
"filterField": "parentId",
"targetField": "id",
"childrenField": "children",
"treeTitle": "树形导航"
},
"fields": [
{
"field": "contractName",
"columnName": "contract_name",
"label": "合同名称",
"dataType": "varchar",
"length": 128,
"required": true,
"searchable": true,
"listVisible": true,
"formVisible": true,
"componentType": "input",
"queryType": "like"
}
]
}
pageSchema 协议{
"layoutType": "simple-crud",
"zones": [
{
"zoneKey": "search",
"componentKey": "search-form",
"enabled": true,
"fieldRefs": ["contractName", "status"]
},
{
"zoneKey": "table",
"componentKey": "data-table",
"enabled": true,
"fieldRefs": ["contractName", "amount", "status"],
"props": {
"showImport": true,
"showExport": true,
"hideBatchDelete": false
}
},
{
"zoneKey": "edit",
"componentKey": "edit-form",
"enabled": true,
"fieldRefs": ["contractName", "amount", "status"]
}
]
}
| 操作 | 接口 | 方法 | 变更内容 |
|---|---|---|---|
| 新增 | /ai/lowcode/app/page |
GET | 低代码应用分页,参数使用 pageNum/pageSize |
| 新增 | /ai/lowcode/app/{id} |
GET | 获取应用草稿和发布信息 |
| 新增 | /ai/lowcode/app/draft |
POST | 新建或保存草稿 |
| 新增 | /ai/lowcode/app/{id}/preview |
POST | 根据草稿协议返回运行时预览配置 |
| 新增 | /ai/lowcode/app/{id}/publish |
POST | 发布应用,生成版本、菜单和运行时配置 |
| 新增 | /ai/lowcode/app/{id}/versions |
GET | 查询发布版本 |
| 新增 | /ai/lowcode/app/{id}/rollback/{versionId} |
POST | 回滚到指定版本 |
| 新增 | /ai/lowcode/model/validate |
POST | 校验模型协议 |
| 新增 | /ai/lowcode/model/ddl/preview |
POST | 生成安全 DDL 预览 |
| 新增 | /ai/crud/{configKey}/import |
POST | 动态 CRUD 批量导入 |
| 新增 | /ai/crud/{configKey}/export |
POST | 动态 CRUD 数据导出 |
| 新增 | /ai/crud/{configKey}/import-template |
GET | 动态 CRUD 导入模板下载 |
| 新增 | /ai/crud/{configKey}/tree |
GET | 树形单表左侧树数据 |
| 修改 | /ai/crud-generator/stream-generate |
POST | 支持输出 modelSchema 和 pageSchema 阶段 |
forge-plugin-generator:配置实体、版本表、低代码服务、发布服务、动态 CRUD 导入导出、AI 生成提示词。forge-admin-server:菜单注册适配器可能需要支持发布态菜单更新和低代码权限资源。forge-admin-ui:新增低代码搭建器工作台、模型设计器、页面搭建器、预览和发布入口;现有 crud-generator 和 crud-config 需要调整入口定位。AiCrudPage:需要补齐由低代码协议驱动的导入导出 URL、图片字段、字典字段和布局配置映射。form-create-designer 可能带来第二套 UI 组件库,第一版不直接引入运行时依赖。{id} 占位符、硬编码字典选项、tenant_id=0 初始化数据。/apply 后补充 code-copilot/changes/visual-lowcode-crud-builder/test-spec.md。mvn -pl forge-admin-server -am compile -DskipTestssource ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm buildpnpm dev 后用浏览器验证模型设计、拖拽搭建、预览、发布流程。ai:lowcode:deploy-ddl 权限和二次确认。AI管理 下,先不开放业务人员任意选择父菜单。form-create-designer 及 Element Plus/Antd 相关运行时依赖。form-create-designer 作为运行时依赖。modelSchema 和 pageSchema,运行时由后端转换为现有 searchSchema/columnsSchema/editSchema/options/apiConfig。ai_crud_config 过度膨胀,也便于回滚审计。/ai/crud/{configKey} 动态 CRUD 运行时,避免为每个低代码应用生成 Java/Vue 文件。catalog + ai_page_template 双注册机制。CREATE TABLE IF NOT EXISTS 与受控追加字段。sys_excel_export_config/sys_excel_column_config 面向固定 Service Bean + queryMethod 的导出配置;动态 CRUD 不直接复用固定 Bean 导出引擎,但按 configKey 读取列配置语义,覆盖动态导出列顺序、表头和字典类型。modelSchema.sourceTable,不新增模型主表列;运行时和导入同步通过协议中的 datasourceId/datasourceCode/datasourceName/dbType 保留来源。| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| Spec 确认 | done | code-copilot/changes/visual-lowcode-crud-builder/spec.md, code-copilot/changes/visual-lowcode-crud-builder/tasks.md |
已确认单表、在线建表、Naive UI 自研 |
| Task 1 | done | forge/db/migration/V1.0.4__add_visual_lowcode_crud_builder.sql, AiCrudConfig.java, AiCrudConfigVersion.java, AiCrudConfigDTO.java, AiCrudConfigRenderVO.java, AiCrudConfigVersionMapper.java, AiCrudConfigVersionMapper.xml, AiCrudConfigService.java |
数据库迁移、实体/DTO/VO、版本 Mapper 与基础渲染字段扩展;生成器模块编译通过 |
| Task 2 | done | LowcodeModelSchema.java, LowcodeFieldSchema.java, LowcodePageSchema.java, LowcodePageZone.java, LowcodeRuntimeConfig.java, LowcodeSchemaValidator.java, LowcodeRuntimeConfigBuilder.java, AiCrudConfigService.java |
单表协议 DTO、校验器、运行时转换器和渲染链路接入;生成器模块编译通过 |
| Task 3 | done | LowcodeAppDraftDTO.java, LowcodePublishDTO.java, LowcodeAppDetailVO.java, LowcodeVersionVO.java, LowcodeAppService.java, LowcodePublishService.java, MenuRegisterAdapter.java, MenuRegisterAdapterImpl.java, AiCrudConfigService.java |
草稿/发布分离、菜单注册、版本快照和回滚;正式运行页读取发布态运行时配置 |
| Task 4 | done | LowcodeDdlPreviewDTO.java, LowcodeDdlPreviewVO.java, LowcodeDdlService.java, LowcodeDdlRepository.java, DynamicCrudRepository.java |
受控在线建表和追加字段,发布时需 DDL 权限与二次确认,DDL 后刷新动态表缓存 |
| Task 5 | done | LowcodeAppController.java, LowcodeModelController.java, AiCrudConfigMapper.java, AiCrudConfigMapper.xml |
低代码应用分页、详情、草稿、预览、发布、版本、回滚、模型校验和 DDL 预览接口;admin 聚合编译通过 |
| Task 6 | done | DynamicCrudController.java, DynamicCrudExcelService.java, DynamicCrudService.java, DynamicCrudRepository.java, DynamicQueryGenerator.java, AiCrudPage.vue, http/interceptors.js |
动态 CRUD Excel 模板、导入、导出闭环;字典导入按标签反查值,上传下载走统一请求链路 |
| Task 7 | done | src/api/lowcode-crud.js, src/views/ai/lowcode-apps.vue, src/views/ai/lowcode-builder.vue, src/router/index.js |
低代码应用列表、四步工作台入口和动态搭建器路由;前端构建通过 |
| Task 8 | done | LowcodeModelDesigner.vue, ModelFieldTable.vue, ModelFieldPropertyPanel.vue, model-schema.js, FieldTypeSelect.vue, DictTypeSelect.vue |
Naive UI 自研单表模型设计器,支持字段配置、排序、复制、删除和模型校验 |
| Task 9 | done | LowcodePageBuilder.vue, ComponentPalette.vue, BuilderCanvas.vue, BuilderZone.vue, ComponentPropertyPanel.vue, page-schema.js |
拖拽式页面区域搭建,生成查询区、列表区、表单区和详情区 pageSchema |
| Task 10 | done | LowcodePreviewPane.vue, PublishPanel.vue, VersionTimeline.vue, lowcode-builder.vue, crud-page.vue |
结构预览、DDL 预览、一键发布和版本回滚面板;运行页接入低代码 options;前端构建通过 |
| Task 12 | done | V1.0.4__add_visual_lowcode_crud_builder.sql, crud-config.vue, crud-generator.vue, ApiConfigEditor.vue, provider.vue, model.vue, AiCrudConfigGenerateService.java, SchemaGenerator.java |
低代码菜单和权限初始化,旧入口主路径收敛到低代码工作台,JSON/AI/下载保留为技术入口,API 占位符统一为 :id |
| Task 13 | done | test-spec.md, implementation-summary.md, forge-docs/guide/lowcode-crud-builder.md |
补充测试规格、实现总结和使用说明;AI 协议深度升级后续单独迭代 |
| Task 14 | done | LowcodeTreeConfig.java, LowcodeModelSchema.java, LowcodeRuntimeConfigBuilder.java, LowcodeSchemaValidator.java, DynamicCrudController.java, DynamicCrudService.java, TreeCrudTemplate.vue, LowcodeModelDesigner.vue, LowcodePageBuilder.vue, ComponentPropertyPanel.vue, page-schema.js, model-schema.js |
补齐树形单表协议、左树右表运行时、父级字段隐藏查询/写入、搭建器树形配置入口;主子表协议保留但运行时阻断 |
| Task 15 | done | page-schema.js, ListPageGridDesigner.vue, LowcodePageBuilder.vue, CanvasFormDesigner.vue, BuilderZone.vue, ModelFieldTable.vue, model-schema.js, LowcodeRuntimeConfigBuilder.java, LowcodeSchemaValidator.java, DynamicCrudService.java, TreeCrudTemplate.vue |
左树右表支持引用模型树源、右表过滤字段与树源字段解耦;表单/详情页改用系统业务组件库;运行态树节点名称归一化兜底 |
| Task 16 | done | lowcode-models.vue, LowcodeModelDesigner.vue, AiFormItem.vue, AiSearch.vue, LowcodeRuntimeConfigBuilder.java, LowcodeSourceTableRef.java, page-schema.js, model-schema.js |
模型绑定数据源、ER 图页签、左侧资产导航滚动承载、系统业务选择组件与左树右表表单树形下拉自动配置 |
待实现后审查。