tasks.md 11 KB

任务清单:lowcode-designer-field-sync-ux

status: completed created: 2026-06-13 spec: code-copilot/changes/lowcode-designer-field-sync-ux/spec.md

任务总览

Task 名称 状态 优先级
Task 1 允许表单设计器字段 ID 手动输入 completed P0
Task 2 补齐字段资产与表单设计器双向同步 completed P0
Task 3 修复无修改时左侧导航切换未保存提示 completed P0
Task 4 字段配置抽屉改为内嵌属性面板 completed P0
Task 5 前端校验与执行日志回填 completed P0
Task 6 修复默认字段编码 input 与已有字段名称回显 completed P0
Task 7 整合字段资产入口并修复新版画布 field_ 临时字段保存 completed P0
Task 8 修复关联字段引用污染模型 Schema completed P0
Task 9 修复表单设计器未修改也提示未保存 completed P0
Task 10 修复低代码应用 LIST 入口误进静态预览 completed P0
Task 11 修复表单新增字段运行态新增数据未入库 completed P0
Task 12 清理表单删除后的自动字段并优化必填默认值 completed P0

Task 1:允许表单设计器字段 ID 手动输入

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/form-first/forgeBusinessComponents.js

执行要点

  • 调整基础属性和业务组件属性中的“组件字段ID”规则。
  • 下拉保留已有字段选项,同时允许用户输入新字段 ID。
  • 占位提示改为“选择已有字段或输入新字段ID”。

验收标准

  • fcDesigner 属性面板中的字段 ID 可以输入新值。
  • 已有字段仍可搜索选择。

Task 2:补齐字段资产与表单设计器双向同步

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue
  • forge-admin-ui/src/views/app-center/components/designer/form-first/fieldReferenceUtils.js
  • forge-admin-ui/src/views/app-center/components/designer/form-first/viewSchema.js
  • forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue

执行要点

  • 新增前端字段引用重命名工具,支持替换表单设计 Schema 内的 fieldBinding.fieldCodefieldBinding.columnName、组件 props.fieldCodeprops.fieldBinding.fieldCode
  • 新增视图 Schema 字段编码替换工具,覆盖查询、列表、详情字段引用。
  • 字段资产保存后识别旧字段编码和新字段编码;发生变化时向对象设计器上报同步信息。
  • 对象设计器在本地先同步 draft.formDesignerSchemadraft.pageSchemadraft.viewSchemadraft.displayField,随后仍按现有逻辑 reload 服务端设计器。

验收标准

  • 字段资产修改字段编码后,本地表单绑定和视图引用立即使用新字段编码。
  • 保存后重新加载设计器不恢复旧字段编码。

Task 3:修复无修改时左侧导航切换未保存提示

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/BusinessFormCreateDesigner.vue
  • forge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vue

执行要点

  • flushDesigner() 比较转换后的 schema 与当前 modelValue,相同则不触发 dirty。
  • syncDesignerDraft() 比较字段资产、页面 Schema 和表单 Schema;没有实际差异时返回 dirty: false
  • 保留真实拖拽、删除、排序、属性编辑后的 dirty 上报。

验收标准

  • 进入设计器后不做任何修改,切换左侧导航不提示未保存。
  • 修改表单组件后切换导航仍能产生未保存状态。

Task 4:字段配置抽屉改为内嵌属性面板

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue

执行要点

  • 删除 n-drawer 包裹。
  • 增加 field-asset-workbench 左右分栏。
  • 右侧直接渲染 BusinessFieldPropertyPanel,未选中时展示面板内空状态。
  • 小屏幕下分栏改为纵向布局。

验收标准

  • 字段资产页点击字段后不再弹出抽屉。
  • 属性编辑区与字段列表同时可见。

Task 5:前端校验与执行日志回填

涉及文件

  • code-copilot/changes/lowcode-designer-field-sync-ux/execution-log.md
  • code-copilot/rules/automated-testing-standard.md

执行要点

  • 按自动化测试标准读取验证规则。
  • 执行本次前端相关的 lint/build 或可用的等价校验。
  • 记录命令、结果、警告、跳过项和服务清理情况。

验收标准

  • 执行日志包含本次校验命令和结果。
  • 若无法完成全量校验,说明原因和残余风险。

Task 6:修复默认字段编码 input 与已有字段名称回显

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/form-first/formCreateToForge.js
  • forge-admin-ui/src/views/app-center/components/designer/form-first/forgeToFormCreate.js

执行要点

  • 转换 form-create rule 时忽略 inputselectdictSelect 等设计器默认字段名,不再作为业务字段编码或数据库列名。
  • 对设计器默认标题“输入框”等生成 fieldInput1 形式的稳定字段编码,并避免复用 input 作为组件 ID。
  • 绑定已有字段资产时,组件标题优先使用字段资产 fieldName / label
  • 从 Forge Schema 回填到 form-create rule 时,旧组件标题为通用标题或字段编码时使用字段资产名称。

验收标准

  • 拖入默认输入框后保存,不再生成 columnName = input 的新字段。
  • 选择已有字段 customerLevel 后,表单组件标题同步为字段资产名称。

Task 7:整合字段资产入口并修复新版画布 field_ 临时字段保存

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vue
  • forge-admin-ui/src/views/app-center/components/designer/BusinessObjectDesignerShell.vue
  • forge-admin-ui/src/views/app-center/components/designer/forge-form-designer/designerLayoutFactory.js
  • forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue

执行要点

  • 新版画布拖入组件模板时不再生成 field_ + 时间戳随机字段,改为 fieldInputfieldSelect 等可读字段编码并自动去重。
  • 保存表单布局前同步提交字段列表、modelSchemapageSchemaformDesignerSchema,避免布局接口用旧字段资产校验新页面区域。
  • 左侧主导航默认隐藏独立字段资产入口,表单设计器内保留“字段资产”货架,高级字段维护移入右上角更多菜单。
  • 保存前兼容清理已存在的未保存 field_... 模板字段,未落库字段会先规整成稳定字段编码再沉淀为字段资产。

验收标准

  • 新增字段组件后直接保存表单,不再报 页面区域引用了不存在的字段: field_mqn7a19j
  • 普通设计流程从“表单设计”完成字段新增和复用,不再需要单独进入字段资产面板。
  • 高级字段资产维护仍可从右上角更多菜单进入。

Task 8:修复关联字段引用污染模型 Schema

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vue

执行要点

  • 表单保存时拆分主模型保存 Schema 与页面设计态 Schema。
  • 提交给 saveBusinessObjectDesignermodelSchema.fields 只保留主模型系统字段和业务字段。
  • 页面布局同步仍使用包含关联字段引用的设计态 Schema,保证 crm_contact__contactName 这类 fieldRef 可继续用于页面区域。

验收标准

  • 表单设计器保存关联对象字段时,不再报 字段名格式不正确: crm_contact__contactName
  • 关联字段引用仍保留在 pageSchema.modelRefs 和页面区域引用校验范围内。

Task 9:修复表单设计器未修改也提示未保存

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/BusinessFormDesigner.vue

执行要点

  • 将表单设计器草稿构建改为纯计算,不在切换前检查过程中直接写回 localSchema
  • syncDesignerDraft() 使用当前设计器结果与保存态基线比较,避免字段属性自动归一化被当成用户修改。
  • props.modelValueeffectiveModelSchema 和表单 Schema 派生出的页面 Schema 同步使用静默写入;真实用户操作仍通过 replaceZone() 默认标记 dirty。

验收标准

  • 进入表单设计器后不做任何修改,切换到其他面板不再弹出“未保存变更”提示。
  • 拖拽字段、调整关系字段、修改表单属性后仍会触发未保存状态。

Task 10:修复低代码应用 LIST 入口误进静态预览

涉及文件

  • forge-admin-ui/src/views/ai/crud-page.vue

执行要点

  • 标准 pageKey=list 入口不再优先进入 ListPageGridDesigner readonly
  • 让普通 /ai/crud-page/:configKey?runtimeOpenMode=LIST 入口直接渲染业务模板 / AiCrudPage
  • 仅保留非标准自定义页面使用网格运行容器。

验收标准

  • 应用 LIST 入口打开后展示实际可操作的业务列表页,不再展示静态预览画布。
  • 目标文件 ESLint、git diff --check 和前端生产构建通过。

Task 11:修复表单新增字段运行态新增数据未入库

涉及文件

  • forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java

执行要点

  • 新增/更新写入白名单从单纯依赖运行态 editSchema 调整为 editSchema + modelSchema 兜底。
  • 只补充 modelSchema 中启用、非系统、非主键、非自增、非只读、表单可见且数据库真实存在列的字段。
  • 保留 STORED 公式字段写入和不可变系统字段过滤。

验收标准

  • 表单设计器新增字段并同步 DDL 后,即使运行态 editSchema 尚未重建,新增/编辑记录也能保存新字段值。
  • 请求体中的任意字段不会越过 modelSchema 和真实表列校验直接写入。
  • git diff --check 和 generator 插件目标模块 Maven 编译通过。

Task 12:清理表单删除后的自动字段并优化必填默认值

涉及文件

  • forge-admin-ui/src/views/app-center/components/designer/form-first/autoFieldRegistry.js
  • forge-admin-ui/src/views/app-center/components/designer/form-first/formDesignerSchema.js
  • forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeDdlService.java

执行要点

  • 自动字段资产构建时,只保留当前表单仍绑定的自动创建字段;已从表单删除的 source=designer/createIfMissing=true 字段不再回写模型。
  • 非自动创建的手工字段资产继续保留,避免高级字段资产被误删。
  • 新版画布字段组件显式清空 label 时保留空字符串,不再被 schema 规范化立即回填。
  • DDL 同步将 required 视为运行态表单校验;只有配置了非空默认值时才同步数据库 NOT NULL DEFAULT ...

验收标准

  • 删除表单中的自动创建字段并保存后,发布检查不再提示追加该字段列,例如 field_mqn7a19j
  • 字段显示名称可以一次性清空,输入过程中不自动回填。
  • 必填字段没有默认值时,新增列或修改列不生成强制 NOT NULL
  • 目标文件 ESLint、前端生产构建、后端 generator 模块编译和 git diff --check 通过。