spec.md 3.8 KB

流程模型双设计器模式改造

status: done created: 2026-06-21 complexity: 🟡中等

1. 背景与目标

当前流程模型设计页已替换为钉钉式审批流程设计器,适合人员审批、条件分支、抄送和表单权限等低门槛审批场景。但用户反馈该模式会限制通用业务工作流,旧 BPMN.js 专业设计器能力不应被移除。

本次改造目标:

  • 保留现有钉钉式审批流程设计器。
  • 参考提交 9a2049b5^ 恢复原 components/bpmn BPMN.js 专业设计器。
  • 新增流程模型设计器类型,让用户创建模型时选择“审批流程”或“业务流程”。
  • 设计页按模型类型加载不同设计器,避免用审批流能力限制复杂 BPMN 工作流。

2. 命名决策

  • 审批流程:面向业务人员配置人员审批、条件分支、抄送、表单权限和审批策略。
  • 业务流程:面向实施/开发人员配置完整 BPMN 工作流,支持服务任务、事件、子流程、复杂网关等。

避免使用“专业 BPMN”作为主要入口文案,减少技术化;在说明文字中保留 BPMN 作为能力说明。

3. 功能点

  • sys_flow_model 增加 designer_type 字段,默认 approval,兼容历史模型。
  • FlowModel 实体增加 designerType
  • 流程模型新建弹窗增加设计器类型选择。
  • 流程模型卡片展示设计器类型。
  • 流程设计页根据 designerType 渲染:
    • approval:现有 DingFlowDesigner
    • business:恢复的 BPMN.js FlowModeler + NodePropertiesPanel
  • 编辑已有模型时允许识别并加载对应设计器;已发布模型仍遵循现有只读/保存约束。

4. 业务规则

  • 设计器类型是模型创建时的流程建模方式,不复用 flow_type,避免与请假、报销、采购等业务类型冲突。
  • 历史数据无 designer_type 时默认按 approval 处理,保证已有审批流程不受影响。
  • 本轮不做“审批流程 ↔ 业务流程”的无损互转。创建后可编辑元数据,但不提供随意切换,以免复杂 BPMN 无法还原成审批树。
  • 两套设计器最终都保存 bpmnXml,部署链路继续复用现有 Flowable 部署逻辑。

5. 数据变更

操作 表名 字段 说明
新增列 sys_flow_model designer_type varchar(32) NOT NULL DEFAULT 'approval' approval 审批流程,business 业务流程

6. 接口变更

接口 方法 变更内容
/api/flow/model POST/PUT 请求体和响应体透传 designerType
/api/flow/model/page GET 列表记录返回 designerType
/api/flow/model/{id} GET 详情返回 designerType

7. 影响范围

  • 流程模型列表与新建模型弹窗。
  • 流程模型设计页。
  • 前端依赖恢复 bpmn-js 相关包。
  • Flow 插件模型实体和 Flyway 迁移。

8. 风险与关注点

  • 旧 BPMN.js 组件来自历史提交,恢复后需通过前端构建验证其依赖和 API 兼容性。
  • BPMN.js 属性面板与当前审批流程表单权限增强不是同一套交互,本轮只恢复专业模式,不强行合并审批流新功能。
  • 若本地依赖缓存不完整,恢复 bpmn-js 依赖可能需要执行 pnpm 安装。

9. 测试策略

  • 前端 ESLint 覆盖新增/恢复入口文件。
  • 前端构建验证 BPMN.js 依赖可解析。
  • 后端 flow 插件编译验证实体和迁移无编译影响。
  • git diff --check 检查空白错误。

归档记录(HARD-GATE)

  • 状态:done
  • 归档时间:2026-06-27
  • 归档人:yaomd(批量归档)
  • 归档路径:code-copilot/changes/archive/2026-06-27-flow-designer-dual-mode/
  • 判定依据:任务清单全部完成,execution-log 验证通过(编译/构建/lint 闭环)。