spec.md 32 KB

我的工作台 + 节点就地配置 + 渲染引擎收敛

status: applying (2026-06-29 已执行工作台底座,并按用户纠偏修复应用中心/流程配置体验) created: 2026-06-29 complexity: 🔴 复杂(结构性变更,3 个独立子迭代) related:

  • code-copilot/changes/unified-business-flow-app-config/spec.md(第一轮整合:统一配置 Facade)
  • code-copilot/changes/unified-app-flow-experience/spec.md(第二轮整合:7 个具体痛点 + 菜单弱化)
  • 本变更(第三轮整合:产品结构性重组)

1. 背景与目标

unified-business-flow-app-config(第一轮)打通后端契约,unified-app-flow-experience(第二轮)修复用户感知 7 个痛点。两轮做完后仍有 3 个结构性问题 没解,让"业务应用"与"流程管理"无法真正合体:

结构性问题 现状 用户感受
A. 没有"我的工作台"产品概念 待办 / 已办 / 我发起 / 抄送我 仍然挂在 /flow/* 路由下 弱化 /flow/* 后,普通业务用户找不到待办入口;"流程"作为模块名仍然出现在导航
B. 节点配置必须跳出应用中心 应用中心"业务流程"tab → 点按钮 → 跳 /flow/design → 进画布选节点 "两个模块拼在一起",用户始终意识到自己离开了业务应用
C. 双渲染引擎共存 业务侧 AiForm、流程节点动态表单 FlowFormCreateRenderer(form-create) 同一个待办列表里两种样式;独立流程的待办与业务待办视觉割裂

本变更目标:把上述 3 个结构性问题落地为一轮独立变更,但拆成 3 个可独立交付的子迭代(A / B / C),用户可按业务节奏分批发布。

完成后期望效果(采购单审批 + 任意独立审批流程为试金石):

  • 顶部导航应用中心 │ 我的工作台 │ 能力中心(高级)。普通业务用户日常只在前两项之间切换。
  • 应用中心节点就地配置:业务管理员在应用中心"业务流程"tab 选中节点,右侧抽屉直接配审批人 + 字段权限 + 高级设置;只有需要重画 BPMN 拓扑时才进入完整流程设计器。
  • 一套表单渲染引擎:待办 / 已办 / 业务运行时 / 节点动态表单全部走 AiForm,form-create 完成迁移并标记为 deprecated。

非目标(明确不做):

  • 不重写 BPMN 引擎、不替换 Flowable。
  • 不动后端 BusinessFlowAppConfigService / BusinessFlowService 的契约(前两轮已稳定)。
  • 不引入"流程数据看板"等新功能。
  • 不做 i18n(仍以中文为主语种,对英文环境只保证不显示乱码)。

2. 代码现状(Research Findings)

2.1 顶部导航与路由

  1. 顶部导航当前结构

    • forge-admin-ui/src/views/app-center/index.vue:9 顶部按钮"能力中心"跳 /app-center/engines
    • forge-admin-ui/src/router/index.js/app-center/*/flow/* 是平级路由,没有"我的工作台"概念。
    • 顶部布局组件:forge-admin-ui/src/layout/components/AppHeader.vue(待核对路径),承担顶部导航与切换。
  2. 待办相关页面

    • forge-admin-ui/src/views/flow/todo.vue — 我的待办(已在第二轮 spec 改造列表中文名 / 字段权限 / 移除技术标签)。
    • forge-admin-ui/src/views/flow/done.vue — 我的已办。
    • forge-admin-ui/src/views/flow/started.vue — 我发起的。
    • forge-admin-ui/src/views/flow/cc.vue — 抄送我的。
  3. /flow/* 管理类页面(第二轮 spec F5/Task 8 已规划弱化):

    • forge-admin-ui/src/views/flow/model.vue 流程模型库
    • forge-admin-ui/src/views/flow/form.vue 通用表单管理
    • forge-admin-ui/src/views/flow/template.vue 流程模板
    • forge-admin-ui/src/views/flow/monitor.vue 流程监控

2.2 应用中心 → 流程设计器的当前跳转

  1. forge-admin-ui/src/views/app-center/components/designer/BusinessFlowBindingPanel.vue:227 按钮"打开流程设计器",点击触发 openFlowDesigner(同文件 :829-843):router.push({ path: '/flow/design', query: { id: modelId, businessObjectCode, codeApp, source: 'appCenter' } })
  2. forge-admin-ui/src/views/flow/design.vue:686 通过 businessFlowFormAssets API 拿业务侧资产;design.vue:903-922 业务上下文存在时使用业务资产,否则使用通用表单。
  3. 节点抽屉组件(第二轮 spec F4 改造的卡片化目标):

    • forge-admin-ui/src/components/flow-designer/panel/NodeConfigDrawer.vue 抽屉壳
    • forge-admin-ui/src/components/flow-designer/panel/ApproverConfig.vue 审批办理 / 表单权限 tab
    • forge-admin-ui/src/components/flow-designer/panel/FormPermissionConfig.vue 字段权限矩阵
    • forge-admin-ui/src/components/flow-designer/DingFlowDesigner.vue 钉钉式画布壳
  4. 应用中心"业务流程"tab 当前结构

    • forge-admin-ui/src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vue 子 tab:document(单据)+ flow(绑定)。
    • BusinessFlowBindingPanel.vue 内容:流程模型选择 / 业务记录绑定 / 变量映射 / 节点列表(只展示,不可编辑)/ "打开流程设计器"按钮。
    • 节点列表数据来源:businessFlowFormAssets + 流程模型节点结构。

2.3 双渲染引擎链路

  1. 业务侧渲染(AiForm)

    • forge-admin-ui/src/components/ai-form/AiForm.vue —— 自研引擎,支持 schema 驱动、双列布局、字段插槽。
    • forge-admin-ui/src/components/ai-form/AiCrudPage.vue —— 业务运行时列表 + 详情 + 表单一体。
    • 即将(第二轮)增加 field-permissions prop。
  2. 流程节点动态表单(form-create)

    • forge-admin-ui/src/components/flow-form-create/FlowFormCreateRenderer.vue:46,64,115,144-147 —— form-create 引擎,消费 formJson schema 与 fieldPermissions
    • 待办分支(todo.vue:297-302):业务托管表单走 AiForm,节点动态表单走 FlowFormCreateRenderer。
    • 流程独立设计:/flow/design 节点 formJson 由 BPMN 节点属性承载,与业务对象解耦。
  3. 流程通用表单管理

    • forge-admin-ui/src/views/flow/form.vue —— 通用表单 CRUD,schema 也是 form-create 格式。
    • forge-admin-ui/src/views/flow/template.vue —— 模板含表单字段。
  4. AiForm 与 form-create schema 差异

    • AiForm schema:[{code, label, type, required, options, ...}] 扁平字段数组。
    • form-create schema:嵌套 JSON(含 layout、rule、validate)。
    • 迁移核心:需要一层 schema 适配器 / 或重新建模 form-create 资产。

2.4 现有实现的合理部分

  • 第二轮已经把"绑定业务对象"的待办切到 AiForm,AiForm 字段权限消费已就绪 —— 本轮可以直接复用作为底座。
  • 应用中心"业务流程"tab 节点列表的数据流(businessFlowFormAssets + 模型节点)已经存在,本轮只需把"只展示"升级为"就地编辑"。
  • NodeConfigDrawer / ApproverConfig / FormPermissionConfig 三个组件本身已经做了流程设计器侧的节点配置,本轮可以把它们封装成独立组件,供应用中心嵌入。

2.5 发现与风险

  • 导航重组牵动顶部布局 + 路由表 + 菜单数据 + 权限角色,影响面比"加按钮"大;需要先冻结 IA(信息架构)再动代码。
  • 应用中心嵌入节点抽屉会导致两处入口同时编辑同一个 BPMN 节点配置(应用中心 + 流程设计器),保存契约必须收敛到一份(建议都通过 BusinessFlowAppConfigService / Flow API 写 BPMN 节点属性)。
  • 画布预览:应用中心嵌入是否需要画布缩略图?如果用户在应用中心不看画布只配节点,需要一种"节点拓扑列表 / 步骤条"替代品。
  • form-create 下线影响面:流程独立设计器的节点 formJson 全部基于 form-create;下线需要写 schema 迁移脚本 + 兼容期共存;存量流程模型的 formJson 不能丢。
  • schema 迁移精度:form-create 支持 layout、grid、自定义组件,AiForm schema 不一定 1:1 对齐;迁移期可能出现"老流程渲染不一致"。
  • 快捷动作(同意/驳回)批量操作当前依赖 todo.vue 的实现;导航重组后路由保留兼容是关键。
  • 节点配置在应用中心就地完成后/flow/design 入口仍然存在,必须明确"两个入口都能配,且最后一次保存为准"。否则会产生数据竞态。

3. 功能点

按子迭代分组(A/B/C);每个子迭代结束都可独立发布。

3.A 子迭代 A — "我的工作台"产品概念

  • A1 顶部导航重组:顶部从"应用中心 / 能力中心"二项扩展为"应用中心 / 我的工作台 / 能力中心"三项。我的工作台为新顶级菜单,进入后默认指向"我的待办"。
  • A2 工作台子菜单:左侧子菜单含"我的待办 / 我的已办 / 我发起的 / 抄送我",并预留"我的草稿(待定)"占位。
  • A3 待办列表搬家/flow/todo /flow/done /flow/started /flow/cc 在路由层保留兼容(直接访问仍可用),同时新增 /workspace/todo 等路由,菜单只显示新路由。
  • A4 应用中心 → 工作台跳转:用户在应用中心提交一单后,顶部出现"已提交 · 查看流转"toast,点击直达 /workspace/started
  • A5 工作台聚合首页/workspace 默认页展示"今日待办数 / 本周已办数 / 我发起的进行中数 / 抄送我的数"四个卡片,点击进入子页。
  • A6 应用中心顶部状态徽标:顶部"我的工作台"按钮显示未读待办数(红点 + 数字),让用户在应用中心也能感知待办。

3.B 子迭代 B — 应用中心节点就地配置

  • B1 抽取共享节点配置抽屉组件:把 NodeConfigDrawer / ApproverConfig / FormPermissionConfig 抽成无 BPMN 画布依赖的独立组件 FlowNodeInlineConfig.vue,输入 modelKey + nodeId + businessObjectCode,输出节点配置变更事件。
  • B2 应用中心节点列表升级BusinessFlowBindingPanel.vue 中的节点列表从"只展示"升级为可点击;选中节点后右侧抽屉就地打开 FlowNodeInlineConfig,编辑审批办理 / 表单权限 / 高级设置。
  • B3 节点拓扑步骤条:应用中心节点列表替换为"步骤条"或"垂直时间线"样式,展示节点顺序、节点类型(人工 / 自动 / 网关)、当前绑定的表单资产摘要。网关节点显式渲染为菱形节点,与人工节点视觉区分。
  • B4 流程设计器入口保留:应用中心"业务流程"tab 顶部仍保留"打开完整流程设计器"按钮,跳 /flow/design?source=appCenter;用户需要画 BPMN / 编辑条件线时使用。
  • B5 保存契约收敛:应用中心就地编辑节点保存调用与流程设计器相同的 Flow API(直接修改 BPMN 节点属性),避免数据双写。
  • B6 并发编辑保护:同一节点同时被多端编辑时,最后保存方提示"该节点已被他人修改,是否覆盖";通过版本号 / updateTime 比较。
  • B7 应用中心"业务流程"tab 重排:上方步骤"基本配置 → 节点配置 → 变量映射 → 发布检查"作为视觉骨架,让业务管理员明确流程配置的完成度。
  • B8 网关节点业务化就地配置(高频条件分支专项):
    • 步骤条同时展示人工任务节点 + 网关节点(exclusiveGateway / inclusiveGateway 优先;parallelGateway 仅展示不可编辑)。
    • 网关节点抽屉提供"业务化条件配置":选择来源字段、运算符、目标值、流转目标节点;隐藏 BPMN 表达式(${approvalResult == 'reject'} 等)到"高级设置"折叠区。
    • 内置"快捷预设":同意路由 / 驳回路由 / 退回上一步 / 终止流程 四个常用模式一键应用。
    • 网关节点配置保存到 BPMN 条件线(<sequenceFlow><conditionExpression>),与完整流程设计器保存契约一致。
    • 复杂网关(含多分支、复合表达式)显示"该网关结构复杂,请在完整流程设计器中编辑"并禁用就地配置;判定逻辑由后端 BusinessFlowService.isInlineEditable(gatewayNode) 给出。

3.C 子迭代 C — 渲染引擎收敛到 AiForm

  • C1 AiForm 兼容 form-create schema:新增 schema 适配层 formCreateToAiSchema(formJson),把 form-create 嵌套 JSON 转为 AiForm 扁平 schema;不支持转换的字段(自定义组件)保留 raw JSON,AiForm 通过"未知字段插槽"兜底。
  • C2 流程节点动态表单切换 AiFormtodo.vueFlowFormCreateRenderer 替换为 AiForm + 适配层;保留 FlowFormCreateRenderer 作为兼容路径(feature flag 控制),仅在 C7 之前过渡使用。
  • C3 流程独立设计器的表单编辑/flow/form.vue / /flow/template.vue 表单编辑器从 form-create 改为 AiForm 表单设计器(复用业务对象设计器的 form 面板)。
  • C4 schema 迁移工具:提供后端工具 FormCreateSchemaMigrationJob(一次性 / 可重入 / 支持 dry-run / 分批离线),把存量 ai_flow_model_node.form_json 转换为 AiForm schema 并落库到新列 form_schema;旧列保留作为兜底,直至 C7 清理后才能删除。
  • C5 form-create 标记 deprecated(过渡步骤):保留代码但加 @deprecated 注释 + 编译期警告;新流程不允许选择 form-create 模式;为 C7 清理做准备。
  • C6 渲染一致性回归:业务待办 / 独立流程待办 / 业务运行时表单 / 流程节点动态表单四处视觉一致(用相同的 AiForm 主题)。
  • C7 form-create 代码完全清理(用户确认本轮完成):
    • 前置条件:C4 迁移工具在生产环境跑完,所有租户 form_schema 列填充完毕,feature flag flow.form.engine=ai 全量打开 24h 无回滚。
    • 删除 forge-admin-ui/src/components/flow-form-create/FlowFormCreateRenderer.vue 与相关 form-create 组件目录。
    • 移除 form-create-designer 依赖(如有):forge-admin-ui/package.json 卸载 form-create 相关包。
    • 删除 feature flag flow.form.engine(不再需要双引擎切换)。
    • 后端 ai_flow_model_node.form_json 字段保留一个大版本作为最终降级兜底,下下轮变更再 DROP COLUMN。
    • 提供数据回滚预案:若清理后发现历史数据问题,从 form_json 列即时重建 form_schema
    • 此 Task 必须在 C1-C6 全部稳定运行且生产无回滚后才能执行;建议作为子迭代 C 的最后一个 Task 单独发布。

4. 业务规则

通用

  1. 顶部三级导航顺序固定为:应用中心 / 我的工作台 / 能力中心。其中"能力中心"对普通业务用户不显示(requireRole=['superadmin'],沿用第二轮决策)。
  2. 待办未读徽标数 = 我的待办列表条数(状态 pending),点击徽标进入 /workspace/todo
  3. 路由兼容:所有旧 /flow/todo /flow/done /flow/started /flow/cc 仍可直接访问,路由表保留但菜单不显示。

节点就地配置

  1. 应用中心就地编辑保存与流程设计器保存共享同一份 BPMN 节点配置;以最后保存时间为准。
  2. 应用中心步骤条展示节点类型:人工任务节点(可编辑)+ 网关节点(受限可编辑,见规则 12-14);子流程 / 调用活动 / 脚本任务等高级节点仅展示,必须在完整流程设计器中编辑。
  3. 应用中心节点列表 / 步骤条对"人工任务节点"展示就地配置抽屉;自动节点(脚本任务 / 服务任务)显示只读说明并提示"请在完整流程设计器中编辑"。
  4. 并发编辑提示:抽屉打开时 fetch 节点 updateTime;保存时 server 校验 updateTime 不匹配则返回 409 + 提示。
  5. "打开完整流程设计器"按钮位于应用中心"业务流程"tab 顶部右侧,附文案"高级编辑 / 调整拓扑"。
  6. 网关节点就地编辑范围:仅 exclusiveGateway(排他网关)与 inclusiveGateway(包容网关)支持就地编辑;parallelGateway(并行网关)只展示不可编辑(没有条件可配);事件网关 / 复杂网关在完整设计器中编辑。
  7. 网关就地编辑 UI 契约:业务化条件配置(来源字段 / 运算符 / 目标值 / 流转目标节点)作为主表单;BPMN 表达式作为"高级设置"折叠区可选编辑;保存时优先生成业务化条件对应的 <conditionExpression xsi:type="tFormalExpression"> 写回 BPMN。
  8. 网关复杂度判定:后端 isInlineEditable(gatewayNode) 判定规则 = "出向条件全部由 (字段 + 简单运算符 + 字面值) 构成 且 分支数 ≤ 5";超出范围则就地编辑禁用,引导跳完整设计器。

渲染引擎收敛(注:受网关规则插入,本节编号顺延为 12 起)

  1. AiForm 适配层 formCreateToAiSchema 必须支持以下 form-create 字段类型:input / textarea / number / select / radio / checkbox / date / datetime / switch / upload;不支持的类型保留 raw JSON,渲染时显示"该字段需要在流程独立设计器中编辑"。
  2. 切换 AiForm 渲染的优先级:AiForm + 适配层 (默认) > FlowFormCreateRenderer (feature flag 兜底);feature flag 名:flow.form.engine=ai|formCreate,默认 aiC7 完成后 feature flag 被移除
  3. 迁移工具 FormCreateSchemaMigrationJob 必须可重入 + 幂等 + 支持 dry-run + 分批离线模式;迁移失败的节点保留原状态并记录到 ai_flow_schema_migration_log
  4. 业务对象设计器"表单设计"面板(AiForm 表单设计器)和 /flow/form 表单设计器复用同一组件,避免双重表单设计器。
  5. form-create 清理前置条件:必须满足 (a) 全量租户 form_schema 列已填充 (b) feature flag flow.form.engine=ai 在生产全量开启至少 24 小时 (c) 监控指标(待办表单渲染错误率、字段权限失效率)无异常。任一条件不满足时,C7 不得执行。
  6. 数据兜底保留期:C7 清理代码后,ai_flow_model_node.form_json 列保留一个大版本作为最终兜底,期间若需回滚,从该列重建 form_schema;下下轮变更再 DROP COLUMN。

5. 数据变更

操作 表名 字段/索引 说明
新增 ai_flow_model_node 增列 form_schema TEXT NULL AiForm schema 落库列,旧 form_json 保留兜底;C7 清理后保留一个大版本作为最终兜底。
新增 ai_flow_schema_migration_log (id, model_key, node_id, status, message, migrated_at, dry_run) 迁移工具日志表,支持 dry_run 标志区分演练与实际。
可选 ai_flow_model_node 增列 update_time 索引 支持并发编辑校验。
新增 ai_user_setting key=workspace.default_page (value=summary todo)
新增(B8) ai_flow_model_node 增列 gateway_inline_config TEXT NULL 网关业务化条件配置缓存(避免每次解析 BPMN 表达式);不强制使用,BPMN <conditionExpression> 仍是权威源。

首期 Flyway 脚本:

  • V1.0.85__add_flow_model_node_form_schema.sql
  • V1.0.86__create_flow_schema_migration_log.sql
  • V1.0.87__add_user_setting_workspace_default_page.sql
  • V1.0.88__add_flow_model_node_gateway_inline_config.sql

6. 接口变更

操作 接口 方法 变更内容
新增 /ai/workspace/summary GET 工作台首页四个聚合数(待办 / 已办本周 / 我发起的进行中 / 抄送我未读)。
新增 /ai/workspace/todo-count GET 顶部徽标轮询接口(轻量,仅返回数字)。
新增 /ai/user/setting/workspace-default-page GET/PUT 用户偏好:进入 /workspace 时默认页(summary / todo),存于 ai_user_setting
新增 /ai/business/flow/node/{modelKey}/{nodeId}/config GET 节点配置详情(应用中心就地配置抽屉用,含 nodeType 标记是否网关)。
新增 /ai/business/flow/node/{modelKey}/{nodeId}/config PUT 保存节点配置(含 expectedUpdateTime 用于并发校验)。
新增 /ai/business/flow/model/{modelKey}/inline-nodes GET 应用中心步骤条数据(人工任务节点 + 网关节点摘要,含 inlineEditable 标志)。
新增 /ai/business/flow/gateway/{modelKey}/{nodeId}/config GET 网关节点业务化条件配置详情(出向条件列表 + 流转目标 + isInlineEditable)。
新增 /ai/business/flow/gateway/{modelKey}/{nodeId}/config PUT 保存网关业务化条件(含 expectedUpdateTime)。
新增 /ai/business/flow/gateway/presets GET 网关条件预设列表(同意/驳回/退回/终止)。
新增 /ai/business/flow/schema/migration/{modelKey} POST 触发单个流程模型的 schema 迁移(管理员,支持 dryRun 参数)。
新增 /ai/business/flow/schema/migration POST 批量触发全部模型 schema 迁移(运维,支持 dryRun 与 batchSize)。
删除(C7) /ai/flow/form-create/preview form-create 相关接口若存在,C7 阶段删除。

7. 影响范围

  • 后端:

    • forge-plugin-generatorBusinessFlowService 新增节点就地配置 API、迁移服务、工作台聚合服务。
    • forge-plugin-flowFlowModelNodeMapper 增列 form_schema;并发编辑校验。
    • 新增 WorkspaceController / WorkspaceService
    • 迁移工具:FormCreateSchemaMigrationJob
  • 前端:

    • 新建 forge-admin-ui/src/views/workspace/ 目录(index、todo、done、started、cc、summary)。
    • 顶部导航组件改造(AppHeader.vue 待核对路径)。
    • forge-admin-ui/src/router/index.js 增加 /workspace/* 路由组。
    • 新建 forge-admin-ui/src/components/flow-inline/FlowNodeInlineConfig.vue(节点就地配置抽屉壳)+ FlowNodeStepList.vue(步骤条)。
    • BusinessFlowBindingPanel.vue 嵌入步骤条 + 就地抽屉。
    • AiForm.vue 增加 form-create schema 适配层。
    • todo.vue 渲染分支替换。
    • flow/form.vue flow/template.vue 表单设计器替换。
  • 数据库:新增 2 张表结构变更 + 1 个索引。

8. 风险与关注点

⚠️ 本变更涉及流程节点配置数据写入路径、表单 schema 迁移、form-create 代码清理,必须重点验证。

  • 导航重组兼容性:所有现有 /flow/todo 等链接(包括邮件通知、消息中心、移动端)必须可访问;后端 redirect 兜底。
  • 节点配置双写竞态:应用中心 + 流程设计器同时编辑同一节点时必须有版本校验,否则覆盖丢失。
  • 网关配置语义一致(B8 重点):业务化条件 → BPMN <conditionExpression> 的双向转换必须语义等价;保存后立即回读对比,发现偏差立即报错。
  • 网关复杂度判定边界isInlineEditable 误判会让用户在就地配置看不到复杂网关;建议给出"看不到的网关"列表,而非完全隐藏。
  • schema 迁移精度:form-create 自定义组件(如手写签名、附件上传插件)AiForm 可能无对应实现,迁移期"未知字段"必须明确提示,不能静默丢字段。
  • feature flag 灰度flow.form.engine 切换必须支持租户级灰度,先 1 个租户验证再全量。
  • 迁移可重入FormCreateSchemaMigrationJob 必须支持重复执行不副作用、dry-run 模式、批次大小可调;迁移失败可重试。
  • C7 清理前置硬条件:必须确认全量迁移完成 + feature flag 全量开启 24h 无回滚 + 监控指标正常,三者任一不满足都不得执行 C7;建议自动化前置检查脚本。
  • C7 数据回滚预案:清理代码后,form_json 保留一个大版本作兜底;必须演练"从 form_json 即时重建 form_schema"路径。
  • 节点就地配置 UX:步骤条对长流程(>20 节点)必须有滚动 + 搜索能力,否则不可用。
  • 应用中心嵌入抽屉的弹层层级:与原有抽屉、Modal 的 z-index 冲突需要全局规划。
  • 工作台首页轮询:徽标数轮询频率不能过高(建议 30s),避免压库;页面隐藏时暂停。
  • 菜单权限边界:第二轮已确认"复用 superadmin",本轮工作台仅普通用户可见即可,能力中心继续 superadmin。
  • 用户偏好默认页:偏好读取失败时回退到 summary;不能因偏好接口异常导致工作台白屏。

8.5 测试策略

  • 测试范围

    • 后端单元/集成:工作台聚合服务、节点就地保存(含并发校验)、schema 迁移工具。
    • 前端静态和构建:工作台路由、节点就地抽屉、AiForm 适配层 unit、步骤条交互。
    • 端到端:以采购单审批 + 任意独立审批流程作为试金石跑通完整链路。
  • 覆盖率目标

    • 工作台聚合首页:4 个聚合数各覆盖一次。
    • 用户偏好默认页:summary / todo 两值各覆盖一次 + 偏好接口异常回退覆盖。
    • 节点就地配置:保存成功 / 并发冲突 409 / 自动节点不可编辑 三档。
    • 网关就地配置(B8):同意/驳回/退回/终止 4 个快捷预设各一档 + 自定义条件一档 + 复杂网关引导跳完整设计器一档 + 业务化 ↔ BPMN 表达式双向转换一档。
    • schema 迁移:input / select / 日期 三种基础控件迁移;未知组件保留 raw;迁移幂等;迁移失败可重试;dry-run 模式不写库。
    • C7 清理前置检查:自动化前置检查脚本覆盖三个硬条件;缺一不可。
    • C7 回滚预案演练:在测试环境执行"从 form_json 即时重建 form_schema"一次。
    • 渲染一致性回归:业务待办 / 独立流程待办 / 业务运行时 视觉对比(截图回归)。
  • 独立 Test Spec:是,见 test-spec.md

9. 待澄清

  • 顶部导航是否合并某些入口保持并列(应用中心 = 配置 / 工作台 = 日常),不合并。(2026-06-29 用户确认)
  • 节点就地配置是否支持网关编辑支持。新增 B8 网关业务化就地配置(exclusiveGateway / inclusiveGateway)+ 快捷预设(同意/驳回/退回/终止)+ 复杂网关引导跳完整设计器。(2026-06-29 用户确认)
  • schema 迁移落地策略分批离线迁移 + feature flag(C4 工具支持 dry-run / 批次大小 / 重入;feature flag flow.form.engine)。(2026-06-29 用户确认)
  • form-create 完全下线时机本轮清理。新增 C7 代码清理 Task,必须满足前置条件(全量迁移完成 + feature flag 全量开启 24h 无回滚 + 监控指标正常)后才能执行;form_json 列保留一个大版本作为最终兜底。(2026-06-29 用户确认)
  • 聚合首页是否替代待办列表作为默认页先到 summary,用户偏好可记忆。新增 /ai/user/setting/workspace-default-page 接口与 ai_user_setting key=workspace.default_page。(2026-06-29 用户确认)
  • 工作台是否承载我发起 / 抄送我之外的对象本轮仅 4 项 + summary,我的草稿 / 我的消息推到下一轮变更。(2026-06-29 用户确认)

HARD-GATE 已通过。

10. 技术决策

  1. 三个子迭代独立交付:A / B / C 任一可单独发布;用户可按业务节奏分批,技术上不强耦合。
  2. AiForm 作为统一渲染引擎:不引入第三方表单引擎(如 vue-form-builder),自研 AiForm 已经能满足扁平 schema 90% 场景;嵌套 / 自定义组件用插槽兜底。
  3. schema 迁移用新列而非原地改写form_schema 新列保存 AiForm schema,form_json 保留作 form-create 兜底;切换通过 feature flag。
  4. 节点就地配置复用 BPMN 数据:不新建"应用中心节点配置表",避免数据所有权混乱;统一写 BPMN 节点属性。
  5. 并发编辑使用乐观锁updateTime / version 字段在保存时校验;冲突时由用户决定覆盖或合并。
  6. 顶部导航重组而非新增 Tab:直接改顶级 IA 结构,不在某个二级页面里塞工作台 Tab。
  7. 工作台首页采用聚合卡片:避免在首页放大量数据列表(性能 + 决策成本)。
  8. 路由兼容期保留 2 个大版本/flow/todo 等旧路由保留 2 个大版本周期后移除,给老链接 / 通知充分迁移时间。

11. 执行日志

Task 状态 实际改动文件 备注
Task 0 propose spec.md, tasks.md, test-spec.md, execution-log.md SDD 提案,未涉及业务代码。
子迭代 A partial WorkspaceController.java, WorkspaceService.java, WorkspaceSummaryVO.java, FlowTaskMapper.xml, FlowCcMapper.xml, workspace/*, BusinessTopNav.vue, router/index.js A1/A2/A3 核心完成;用户偏好默认页、A4 toast、A5 菜单迁移待后续。
子迭代 B pending 应用中心节点就地配置(含网关 B8)。
子迭代 C pending 渲染引擎收敛到 AiForm(含 C7 form-create 完全清理)。

12. 审查结论

尚未进入 /review

13. 确认记录(HARD-GATE)

  • 确认时间:2026-06-29
  • 确认人:用户
  • 确认内容
    • §9 六个待澄清项:5 项按默认结论 accept;其中 2 项调整:
    • 节点就地配置支持网关编辑(新增 B8 + 业务规则 9-11 + 网关接口)。
    • form-create 本轮清理(新增 C7 + 业务规则 16-17 + 数据兜底保留期)。
    • 子迭代发布顺序:A → B → C(含 C7 清理);A 单独发布,B/C 视上线后反馈再决定是否并行。
    • 保留 /flow/* 旧路由 2 个大版本兼容期,不删除。
    • 本轮仅完成 SDD 提案,暂不进入编码(/apply 待后续指令)。

14. 2026-06-29 用户纠偏后的执行结论

本节覆盖 §3.B 中“应用中心节点就地配置”和 §9 中“工作台保持并列”的早期计划。以用户本轮 6 条反馈为准。

用户反馈 执行结论 落地方式
应用设计不要再出现“表单字段”配置 代码应用设计入口不展示独立表单字段面板 object-designer.[objectCode].vue 的代码应用导航只保留 flow-app
点击节点配置应弹出流程设计页面,不要跳页 应用中心打开完整流程设计器弹窗,用户在真实流程图节点抽屉中配置 BusinessFlowBindingPanel.vue 内嵌 flow/design.vue,设计器 embedded 模式关闭弹窗
流程认识业务字段不需要人工配置 前端保存时自动按业务字段生成同名变量映射;后端启动流程时兜底注入全部业务字段变量 BusinessFlowBindingPanel.vue 自动生成 variableMappingBusinessFlowService.buildFlowVariables() 注入 camel/snake 变体
审批动态表单样式乱,字段权限不好使 待办/已办动态表单统一切到 AiForm 渲染,复用字段权限解析 新增 formCreateToAiSchema()todo.vue / done.vue 使用 AiForm
低代码应用保存后字段权限被覆盖 应用中心不再保存新的 nodeForms 副本,避免覆盖流程设计器节点配置 BusinessFlowBindingPanel.vue 保存 payload 中 nodeForms: [],运行时以 BPMN 节点配置为准
应用中心工作台入口重复 应用中心顶部暂时隐藏“我的工作台”,保留外部菜单入口 BusinessTopNav.vue 只展示应用中心/能力中心,并停用 todo-count 轮询

补充修复:http://localhost:3000/dev-api/api/workspace/todo-count 404 的直接原因是 Vite 3000 开发服务缺少 /dev-api/api/workspace 代理规则。本轮在 vite.config.js 中新增 workspace 专用代理,必须重启 3000 端口 Vite 后生效。