status: done created: 2026-06-20 complexity: 🟡中等
流程模型设计器的条件分支目前只能手写 SpEL 表达式,使用门槛高且容易写错字段名。优化后,当流程配置了动态表单时,条件分支可通过表单字段、运算符和值组合生成条件表达式;仍保留高级表达式模式,兼容已有 BPMN XML 和后端 Flowable 条件表达式执行。
forge-admin-ui/src/views/flow/design.vue 已维护 formSchema 和 formFieldCatalog,并通过 refreshFormFieldCatalog() 从已选表单或内嵌表单解析字段目录。forge-admin-ui/src/components/flow-designer/DingFlowDesigner.vue 负责流程画布和节点配置抽屉,目前只传 node/outgoingEdges/nodes 给 NodeConfigDrawer。forge-admin-ui/src/components/flow-designer/panel/NodeConfigDrawer.vue 通过 CONFIG_RENDERER_MAP 调度 ConditionConfig.vue。forge-admin-ui/src/components/flow-designer/panel/ConditionConfig.vue 目前只展示每条出边的 condition 输入框和默认分支单选。condition 字符串中。forge-admin-ui/src/components/flow-designer/converter/json-to-bpmn.js 将非默认分支的 edge.condition 写入 <bpmn:conditionExpression>。forge-admin-ui/src/components/flow-designer/canvas/BranchHeader.vue 直接展示 edge.condition 或默认文案。edge.condition,因此规则配置器必须生成标准表达式字符串,不能依赖额外结构。conditionExpression,导出 BPMN 时必须跳过默认边条件。${...} 格式 SpEL 表达式。&&,按“符合任一”生成 ||。flowable:allowSubmitterWithdraw、flowable:autoApprovalMode。autoApprovalMode=firstOnly 时,同一审批人在流程中已经完成过任一审批,后续再次成为当前任务审批人时自动同意。autoApprovalMode=consecutive 时,仅上一已完成审批任务和当前任务审批人相同才自动同意。autoApprovalMode=none 时,所有节点都需要人工审批。flowable:formFieldPermissions,运行时通过 TaskFormInfo.formFieldPermissions 下发到待办页。| 操作 | 表名 | 字段/索引 | 说明 |
|---|---|---|---|
| 无 | - | - | 审批策略和字段权限存入 BPMN XML 扩展属性,不新增表结构 |
| 操作 | 接口 | 方法 | 变更内容 |
|---|---|---|---|
| 兼容增强 | /flow/task/form/{taskId} |
GET | TaskFormInfo 增加 formFieldPermissions 字段,用于待办动态表单权限渲染 |
| 兼容增强 | /flow/task/withdraw |
POST | 后端按流程级 allowSubmitterWithdraw 和提交人身份进行撤回校验 |
edge.condition。| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| Task 1 | 已完成 | design.vue, DingFlowDesigner.vue, NodeConfigDrawer.vue |
接入动态表单字段目录 |
| Task 2 | 已完成 | ConditionConfig.vue |
实现规则模式和高级表达式模式 |
| Task 3 | 已完成 | ConditionConfig.spec.js, form-field-catalog.spec.js, test-spec.md, execution-log.md |
补测试并完成验证 |
| Task 4 | 已完成 | DingFlowDesigner.vue, NodeConfigDrawer.vue, ConditionConfig.vue, ConditionConfig.spec.js, DingFlowDesigner.spec.js |
修复分支聚焦、规则删除和表达式溢出 |
| Task 5 | 已完成 | ConditionConfig.vue, BranchHeader.vue, EdgePath.vue, json-to-bpmn.js, branch-parser.js |
默认分支可配条件并优化规则行对齐 |
| Task 6 | 已完成 | useFlowDesigner.js, ConditionConfig.vue, NodeConfigDrawer.vue, DingFlowDesigner.vue |
支持配置面板继续添加条件分支,并保持唯一默认分支 |
| Task 7 | 已完成 | BranchAddButton.vue, BranchHeader.vue, EdgePath.vue, DingFlowDesigner.vue, ConditionConfig.vue |
添加分支入口移到画布,边标签摘要化,表单表达式回显规则模式 |
| Task 8 | 已完成 | design.vue, DingFlowDesigner.vue, FormPermissionConfig.vue, FlowFormCreateRenderer.vue, todo.vue, FlowTaskServiceImpl.java, TaskFormInfo.java |
补齐审批策略、表单字段权限和运行时执行 |
自检通过:前端组件测试、目标 ESLint、生产构建和 Playwright 交互验证均通过;构建存在项目既有非阻断告警。