code-copilot/changes/lowcode-runtime-tab-workspace-unique-validation/变更范围:
AiCrudPage 新增 flat/tabWorkspace 运行态录入方式,低代码运行页和设计器透传 formOpenMode/tabWorkspace,字段属性增加唯一校验开关。执行命令与结果:
git diff --check
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/components/ai-form/AiCrudPage.vue src/components/ai-form/AiCrudPageProps.js src/views/ai/crud-page.vue src/components/lowcode-builder/page/ListPageGridDesigner.vue src/components/lowcode-builder/page/StructuredListPageDesigner.vue src/views/app-center/components/designer/forge-form-designer/ForgePropertyPanel.vue
Now using node v20.19.0。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-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-serverBUILD SUCCESS。编译期间存在既有 deprecation / unchecked 提示,不阻断。source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
built in 53.21s。// 注释 minify 警告,以及 src/store/index.js 同时动态/静态导入导致的 chunk 提示,不阻断本次构建。跳过项:
服务清理:
问题:
flat 初版仍把表单放在列表下方,复杂表单录入空间不足。修正:
flat 改为当前页内单表单视图:新增/编辑后隐藏搜索区和列表,表单独占主内容区,右上角提供“返回列表”。advancedProps,自动字段资产创建和字段同步时会把 advancedProps.unique 写入模型字段,后端动态 CRUD 保存时据此校验重复。执行命令与结果:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/components/ai-form/AiCrudPage.vue src/views/app-center/components/designer/forge-form-designer/ForgePropertyPanel.vue src/views/app-center/components/designer/form-first/formDesignerSchema.js src/views/app-center/components/designer/form-first/autoFieldRegistry.js src/views/app-center/components/designer/BusinessFormDesigner.vue
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
built in 1m 15s。// 注释 minify 警告,以及 src/store/index.js 动静态导入 chunk 提示,不阻断。服务清理:
问题:
修正:
tabWorkspace 改为“列表 + 表单草稿”的同级页签工作区。flat 模式仍保留列表下方单面板,避免改变单面板语义。执行命令与结果:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/components/ai-form/AiCrudPage.vue
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
built in 1m 3s。// 注释 minify 警告,以及 src/store/index.js 动静态导入 chunk 提示,不阻断。服务清理:
问题:
flex: 1 和主区域滚动策略会让表单区域撑开页面,视觉上像覆盖当前页面。n-tab-pane 承载 tab 标题,内容实际在外部面板,样式不符合“同页工作台”预期。修正:
AiCrudPage 主区域在工作区打开时增加 has-inline-workspace 状态,表格和表单工作台改为明确的上下分区。inline-form-panel-body 内部滚动,页签条、头部和底部按钮固定在工作台内,避免撑满整页。执行命令与结果:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/components/ai-form/AiCrudPage.vue
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
built in 1m 4s。// 注释 minify 警告,以及 src/store/index.js 动静态导入 chunk 提示,不阻断。服务清理:
问题:
validateUniqueConstraints,但主子表和关联运行态会在 insertMasterDetailData / insertJoinedData / updateMasterDetailData / updateJoinedData 分支内提前返回,绕过后续单表唯一校验。modelSchema 缺失但 editSchema.advancedProps.unique 已存在,fallback 追加约束时会拿到不可变空列表,存在边界风险。修正:
{ main, children } 请求结构。ArrayList,确保旧配置可从 editSchema fallback 生成唯一约束。执行命令与结果:
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-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-serverBUILD SUCCESS,总耗时 12.434 s。跳过项:
服务清理: