execution-log.md 18 KB

执行日志:form-first-business-object-designer

updated: 2026-05-31

本轮完成范围

  • 应用中心 /app-center:收敛为套件导航、业务对象、应用入口三层结构,卡片高度、操作区和移动端布局已稳定。
  • CRM 套件 /app-center/suite/CRM:交付验收改为侧栏摘要,阻断项、关键计数、下一步动作更清晰。
  • 对象设计器表单页:修复 fcDesigner 在 1024px 下被空栅格列压缩的问题,设计器画布保持稳定最小宽度,窄屏由画布内部横向滚动承载完整设计器。
  • 表单优先链路:FormDesignerSchema、ViewSchema、LinkageSchema、设计版本快照、发布检查和运行态编译已接入。
  • 对象设计器入口:应用中心、套件页、对象详情页和新建对象后的默认设计入口统一切换到 表单设计
  • 对象设计器壳层:改为全屏浮层式工作台,左侧导航和主画布独立滚动,提升表单画布可用空间。
  • 主子表运行态:子表新增行立即同步到父表单,复杂子表字段复用 AiFormItem 真实运行态组件;后端主子配置生成在编辑区缺少子表 fieldRef 时兜底输出可编辑子表字段。
  • 业务组件预览:fcDesigner 加载和变更后会为字典、用户、组织、行政区划和引用对象拉取真实选项,不再依赖静态假数据。
  • 表单布局一致性:FormDesignerSchema 的 gridColumns、组件 spanlabelPlacementlabelWidth 进入 form-create 设计态和 AiCrudPage 运行态同一套编译链路。

验证命令

2026-05-31 动态运行态表单组件与布局回归修复

source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint \
  src/components/ai-form/AiFormItem.vue \
  src/components/ai-form/AiForm.vue \
  src/views/app-center/components/designer/BusinessFormDesigner.vue

结果:通过。仍存在 AiForm.vue 既有 vue/no-required-prop-with-default 警告。

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

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

修复摘要:

  • AiFormItem 对组织/用户选择组件增加历史别名兼容,避免动态页面退化为普通输入框。
  • AiFormItem 用户选择回填从单一目标字段扩展为候选名称字段集合,并在选择、清空、编辑回填时保持展示文本一致。
  • AiFormItem 组织树选择接入真实组织树选项,并为当前值补齐名称兜底选项。
  • BusinessFormDesigner 保存表单设计时同步生成运行态 fieldSettings,覆盖顺序、span、labelWidth、align、组件类型和 label。
  • LowcodeRuntimeConfigBuilder 运行态编辑字段优先使用设计器覆盖 label/defaultValue,并为组织/用户字段补齐默认回显字段。

2026-05-31 设计器交互回归修复

source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint \
  src/views/app-center/components/designer/BusinessFormCreateDesigner.vue \
  src/views/app-center/components/designer/BusinessListDesigner.vue \
  src/views/app-center/components/designer/BusinessRelationDesigner.vue \
  src/views/app-center/components/designer/BusinessObjectDesignerShell.vue \
  'src/views/app-center/object-designer.[objectCode].vue'

结果:通过。

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

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

修复摘要:

  • BusinessFormCreateDesigner 增加销毁态和加载序号保护,避免左侧菜单切换后异步 hydrate 继续调用空 fcDesigner 实例。
  • BusinessListDesigner 移除查询条件、表格列、工具栏、行操作汇总侧栏。
  • BusinessObjectDesignerShell 降低全屏层级,避免 form-create 预览弹层被遮挡。
  • BusinessRelationDesigner 停止在 prop watcher 中反向 emit linkageSchema,保存级联时不再携带未加载或未修改的空关系数组。
  • object-designer.[objectCode].vue 的通用草稿保存不再携带 relations,避免非关系面板保存误覆盖关系。
  • BusinessObjectDesignerDTOfieldsrelationsdesignerOptions 改为可空,避免部分保存请求被误判为“清空关系”。
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/BusinessFormDesigner.vue src/views/app-center/components/designer/BusinessFormCreateDesigner.vue

结果:通过。

source ~/.nvm/nvm.sh && nvm use 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/components/BusinessObjectWizardDrawer.vue \
  'src/views/app-center/object.[objectCode].vue' \
  'src/views/app-center/object-designer.[objectCode].vue' \
  src/views/app-center/components/designer/BusinessObjectDesignerShell.vue \
  src/components/page-templates/ChildTableEditor.vue \
  src/views/app-center/components/designer/BusinessFormCreateDesigner.vue \
  src/views/app-center/components/designer/form-first/forgeBusinessComponents.js \
  src/views/app-center/components/designer/form-first/forgeToFormCreate.js \
  src/views/app-center/components/designer/form-first/formCreateToForge.js \
  src/views/ai/crud-page.vue

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

备注:未加 NODE_OPTIONS 的首次构建在打包阶段因 Node 默认堆内存不足 OOM 退出;加大堆内存后构建成功。

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

结果:通过。

python3 /private/tmp/forge_app_center_visual.py

结果:通过。mock 数据截图覆盖应用中心、CRM 套件页和对象设计器表单页。

接口验证

本地后端健康检查通过:GET /actuator/health

使用已登录令牌验证 CRM 客户对象读取型接口均返回 HTTP 200:

  • GET /ai/business/object/1910000000000000101/designer
  • GET /ai/business/object/1910000000000000101/layout/form
  • GET /ai/business/object/1910000000000000101/fields
  • GET /ai/business/object/1910000000000000101/publish-check

未直接执行写入型接口:

  • PUT /ai/business/object/{objectId}/designer
  • POST /ai/business/object/{objectId}/publish

原因:当前本地后端连接共享数据库,直接保存或发布会改写真实草稿和版本。

截图路径

  • /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
  • /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
  • /private/tmp/forge_app_center_visual/app-center_object_CRM_CUSTOMER_designer?suiteCode=CRM&panel=form_desktop.png
  • /private/tmp/forge_app_center_visual/app-center_object_CRM_CUSTOMER_designer?suiteCode=CRM&panel=form_tablet.png
  • /private/tmp/forge_app_center_visual/app-center_object_CRM_CUSTOMER_designer?suiteCode=CRM&panel=form_mobile.png

剩余风险

  • Task 39 CRM 客户对象真实端到端验收未执行,需要独立本地库或测试租户,避免污染共享环境。
  • 全量 eslint . 仍有项目既有问题,已用本变更触达文件的 targeted lint 和全量 build 控制风险。

2026-05-31 组织数据源、运行态样式和字段 DDL 同步修复

source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/components/ai-form/AiForm.vue src/components/ai-form/AiFormItem.vue src/components/ai-form/AiCrudPage.vue src/components/ai-form/AiCrudPageProps.js src/views/ai/crud-page.vue src/views/app-center/components/designer/BusinessFormDesigner.vue src/views/app-center/components/designer/form-first/formDesignerSchema.js src/views/app-center/components/designer/form-first/forgeToFormCreate.js src/views/app-center/components/designer/form-first/formCreateToForge.js

结果:通过。仍有既有 AiForm.vue vue/no-required-prop-with-default warning。

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

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

修复摘要:

  • AiFormItem 对组织/树选择的远程数据源做有效性判断;空 optionSource 不再挡住默认组织树接口。
  • AiFormItem 远程选项解包支持 RespInfo.data、分页 records/list/rows/items 和嵌套 data,并增强 value/label 字段兜底。
  • 编辑表单运行态新增 labelAligneditXGapeditYGap,表单设计器和后端运行配置同步保存/输出 rowGap、columnGap,2 列表单默认弹窗宽度提升到 1040px
  • 表单设计器保存时携带 syncDdl/confirmSyncDdl,后端通过 LowcodeDdlService 预览并执行缺失列同步,继续走 ai:lowcode:deploy-ddl 权限。

2026-05-31 表单布局组件与保存入口收敛

source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/components/ai-form/AiForm.vue src/components/ai-form/AiFormLayoutNodes.vue src/views/ai/crud-page.vue src/views/app-center/components/designer/BusinessFormDesigner.vue src/views/app-center/components/designer/BusinessFormCreateDesigner.vue src/views/app-center/components/designer/form-first/formDesignerSchema.js src/views/app-center/components/designer/form-first/forgeToFormCreate.js src/views/app-center/components/designer/form-first/formCreateToForge.js

结果:通过。仍有既有 AiForm.vue vue/no-required-prop-with-default warning。

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

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

修复摘要:

  • 布局/辅助组件在 FormDesignerSchema 中作为虚拟节点保存,保留 form-create 原始类型和布局元数据,避免 fcRow/col/elTabs 等回显成普通输入框。
  • 表单设计保存同步生成 formLayout 树和继承后的字段 span,后端发布运行态下发 options.editFormLayout
  • AiForm 改为支持递归布局节点,编辑页可以渲染 row/col/card/tabs/collapse/divider,并保留原字段组件、校验和回填逻辑。
  • 表单设计内部保存入口已收敛,只保留对象设计器顶部全局“保存”。

2026-05-31 应用入口、设计器弹层和多列表单回归修复

source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/router/index.js src/router/guards/tab-guard.js src/store/modules/tab.js src/layouts/components/tab/index.vue src/components/ai-form/AiForm.vue 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/designer/BusinessFormDesigner.vue

结果:通过。仍有既有 AiForm.vue vue/no-required-prop-with-default warning。

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

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

修复摘要:

  • 应用入口桥接页和业务对象设计器路由标记为 skipTab,tab guard 跳过登记并清理遗留桥接 tab。
  • 动态 CRUD 页面 tab 增加强制可关闭能力,顶部 tab 支持按单个 tab 判断是否可关闭。
  • 应用总览、套件详情、对象详情里的对象设计入口改为直接挂载全屏设计器弹层,不再通过路由新开设计器页签;设计器路由仍保留直达兼容。
  • 搜索区操作按钮改为跨整行右对齐,避免按钮落在搜索 grid 第一列。
  • 表单设计器新增单列/两列/三列控制,运行态三列表单默认弹窗宽度提升到 1180px

2026-06-01 fcDesigner 画布列数和布局组件中文化修复

source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/BusinessFormDesigner.vue src/views/app-center/components/designer/BusinessFormCreateDesigner.vue src/views/app-center/components/designer/form-first/formDesignerSchema.js src/views/app-center/components/designer/form-first/forgeToFormCreate.js src/views/app-center/components/designer/form-first/formCreateToForge.js

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

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

结果:通过。

修复摘要:

  • BusinessFormDesigner 的单列/两列/三列切换不再只写 layout.gridColumns,会同步重算每个组件的 form-create col.span
  • BusinessFormCreateDesigner 引入 fcDesigner 官方中文 locale,字段重置和字段追加保留当前画布列数。
  • FormDesignerSchema 增加布局组件中文默认名和英文/原始名称归一化,row/col/card/tabs/collapse/divider 等布局节点回显为中文。
  • formCreateToForge 读回设计器规则时按当前业务列数重新归一化,避免把 form-create 24 栅格的 col.props.span=12 误当成 Forge 两列跨度。
  • BusinessObjectDesignerService 修复空栅格布局保存时 inheritedSpan 被 Java 三元表达式自动拆箱导致的 NPE。

2026-06-01 删除字典组件后残留字段校验修复

source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/BusinessFormDesigner.vue

结果:通过。

git diff --check

结果:通过。

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

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

修复摘要:

  • BusinessFormDesigner 保存前不再只看字段是否在字段资产里,而是按当前画布组件映射归一化字段;删除字典/引用组件后,未配置的残留字段会自动降为普通文本字段。
  • 如果字段原来是字典/引用,但当前画布上已改成普通输入,也会同步降级并清理 dictType/referenceObjectCode/referenceDisplayField
  • BusinessObjectDesignerService.saveDesigner 在后端重建模型字段前做同样兜底,防止旧前端缓存或其它入口绕过前端处理后仍触发“字典字段必须配置字典类型”。

2026-06-01 fcDesigner 栅格布局临时 ref 展示修复

source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/form-first/formDesignerSchema.js src/views/app-center/components/designer/form-first/forgeToFormCreate.js src/views/app-center/components/designer/form-first/formCreateToForge.js

结果:通过。

git diff --check

结果:通过。

source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build

结果:通过。仍存在既有 UnoCSS 图标加载、CSS // 注释、动态/静态 import chunk 和大 chunk 警告。

修复摘要:

  • FormDesignerSchema 增加 ref_... 临时引用识别,布局标题归一化会剥离 fcDesigner 生成的临时 ref。
  • 旧 schema 里已保存的布局临时 id 会被替换为稳定的 cmp_<componentKey>_<index>
  • formCreateToForge 不再把 ref_... 当作布局标题、组件 id 或字段编码来源。
  • forgeToFormCreate 回写布局 rule 时不再给非字段组件写 name,避免 fcDesigner 把布局 id 当展示前缀。