RuoYi Office 工作流前端实现:BPMN 与 SIMPLE 双设计器如何落到 Flowable,业务单据怎样嵌进审批
🌐 演示地址:http://ruoyioffice.com | 📦 源码1·GitHub:ruoyi-office | 📦 源码2·GitCode:ruoyi-office | 📦 源码3·Gitee:ruoyi-office | 💬 微信:17156169080(备注「RuoYi Office」)
很多团队一提工作流就只想到「Flowable 引擎好不好用」,却忽略真正决定交付效率的是前端怎么画、怎么发、怎么嵌业务单。RuoYi Office 在 PC 管理端(Vue3 + Vben Admin)上同时提供 BPMN 标准设计器与 SIMPLE 简单流程设计器,运行时统一落到 Flowable;业务侧再用 CUSTOM 路径 + FlowBill 把用印、请假、资产领用等单据嵌进同一套待办详情。本文按「技术栈 → 双模式差异 → 编译路径 → 单据集成 → 详情运行时」拆开讲。

▲ 全景配色对齐平台架构图:蓝=BPMN、绿=SIMPLE、青=运行时 UI;底层统一 Spring Boot + Flowable
引言:工作流前端要解决三件事
| 谁来配流程? | XML 手写门槛高 | 可视化设计器(业务可配 / 专家可深) |
| 表单从哪来? | 变量 Map 太散 | NORMAL 拖拽表单 / CUSTOM 业务页 |
| 审批页怎么长? | 引擎只给任务 | 详情嵌业务组件 + 操作按钮 + 轨迹图 |
RuoYi Office 的答案不是「二选一设计器」,而是 双模式共存:默认给业务同学用 SIMPLE;需要复杂网关、监听器、标准 BPMN 图元时切 BPMN。
一、技术栈与工程落点
| PC 壳 | Vue3 + Vben Admin + Ant Design Vue | apps/web-antd |
| BPMN 画布 | bpmn-js + diagram-js + properties-panel | views/bpm/components/bpmn-process-designer/ |
| SIMPLE 画布 | 自研钉钉风节点树 + 右侧配置抽屉 | views/bpm/components/simple-process-design/ |
| 模式枚举 | BpmModelType.BPMN=10 / SIMPLE=20 | @vben/constants |
| 运行时引擎 | Flowable 7(后端) | 模型保存进 ACT_RE_* |
| SIMPLE 编译 | SimpleModelUtils.buildBpmnModel | 服务端把 JSON 编成 BpmnModel |
模式切换入口在模型向导「流程设计」步:process-design.vue 按 modelData.type 挂载 BpmModelEditor 或 SimpleModelDesign。
<template v-if="modelData.type === BpmModelType.BPMN">
<BpmModelEditor … @success="handleDesignSuccess" />
</template>
<template v-else>
<SimpleModelDesign … ref="simpleDesign" />
</template>
保存时:BPMN 成功回调写入 bpmnXml;SIMPLE 写入 simpleModel(JSON)。

▲ 流程模型是双设计器的统一入口:创建/修改时选择类型,再进入对应画布
二、BPMN 模式:标准图元,直接出 XML
2.1 能做什么
- 标准 BPMN 2.0 元素:用户任务、网关、事件、子流程等
- Flowable 扩展:候选人、多实例、监听器、表单键等(属性面板二次封装)
- 适合:复杂分支、包容/并行精细控制、与外部 BPMN 工具互通、专家建模
2.2 编译路径
前端画布导出 BPMN XML → 后端 saveModel 写入流程模型仓库 → 部署后成为 ProcessDefinition。 没有「先 JSON 再转」的中间层——所见即 XML。
2.3 代价
学习曲线陡:业务同学容易配错网关方向、漏画连线。属性面板字段多,培训成本高于 SIMPLE。
三、SIMPLE 模式:业务友好,JSON 再编译
3.1 能做什么
节点类型覆盖常见审批场景(枚举 BpmSimpleModelNodeTypeEnum),例如:
- 发起人 / 审批人 / 抄送人 / 办理人
- 条件分支 / 并行 / 包容 / 路由
- 延迟、触发器、子流程
右侧配置抽屉可配:候选人策略、多人审批(依次/会签/或签)、超时、驳回、字段权限等——用业务语言,而不是 BPMN 术语。

▲ SIMPLE 右侧面板:审批人策略与多人审批方式等,配置后编译进 Flowable 多实例/边界事件
3.2 编译路径
simpleModel (JSON)
→ SimpleModelUtils.buildBpmnModel(…)
→ Flowable BpmnModel
→ 生成 XML + 自动布局
→ 与 BPMN 模式一样部署进引擎
运行时还可基于 SIMPLE 结构做节点预测(simulateProcess 一类能力),时间轴展示更贴近「钉钉审批链」体验。
3.3 默认为什么是 SIMPLE?
模型创建默认 type = SIMPLE:大多数 OA/HRM 单据是「发起 → 若干审批 → 结束」,SIMPLE 交付更快;真要上复杂编排再改类型或重建 BPMN 模型。
四、BPMN vs SIMPLE:一张表说清差异
| 前端技术 | bpmn-js 生态 | 自研 Vue 节点树 |
| 存储形态 | bpmnXml | simpleModel JSON |
| 进引擎方式 | XML 直接部署 | JSON → SimpleModelUtils → BpmnModel |
| 配置体验 | 标准图元 + 属性面板 | 抽屉表单 + 业务枚举 |
| 擅长 | 复杂网关、监听、互通 | 审批链、组织策略、快速上线 |
| 详情预览 | bpm-viewer | simple-bpm-viewer |
| 学习成本 | 高 | 低 |
选型建议:
五、表单双轨:NORMAL 与 CUSTOM
流程模型还要绑「表单从哪来」:
| NORMAL | form-create 流程表单 | 设计器表单渲染 | 同套字段 + 字段权限 |
| CUSTOM | 业务自定义页 | formCustomCreatePath 路由跳转 | formCustomViewPath 动态组件嵌入 |
CUSTOM 是单据集成的关键:用印申请、资产领用等不是在流程表单里拖几百个字段,而是跳到业务 info 页发起,审批时再把同一业务组件嵌进详情。

▲ NORMAL 表单可在「流程表单」里维护;CUSTOM 则指向业务模块路由/组件
六、业务单据如何集成(三角对齐)
把一张业务单接到工作流,通常要对齐三件事:
6.1 processDefinitionKey ↔ 单据类型枚举
例如用印、补卡、资产入库各自有固定 process key(如 hr_card_replacement_bill)。前端发起与后端 FlowBillServiceFactory.getServiceByProcessKey 都靠它找实现。
6.2 FlowBillService 生命周期
业务 Service 实现统一接口,引擎回调时:
- updateProcessStatus:同步审批中/通过/驳回等
- onProcessApproved / 拒绝 / 撤回:写业务副作用(建卡、回写打卡、改库存…)
- 删除实例时清理单据(按模块实现)
前端不直接改业务终态——按钮调的是任务 API,终态靠回调,避免双写不一致。
6.3 发起人自选审批人
当节点候选人策略为「发起人自选」时,发起页收集:
startUserSelectAssignees: Record<nodeId, userId[]>
随 createProcessInstance 变量提交,引擎按节点 id 注入候选人。SIMPLE 与 BPMN 都能配该策略;前端发起页要能按模型解析哪些节点需要自选。

▲ 发起入口:选流程定义后,NORMAL 填表单 / CUSTOM 跳业务创建页
七、审批详情:一套壳,两种图,嵌业务
processInstance/detail/index.vue 是运行时中枢:
待办列表 → todo-detail?id=&taskId=
→ 左/中:业务表单(NORMAL 或 CUSTOM 组件)
→ 右/下:流程图 + 审批记录
→ 底:操作按钮(权限由引擎与模型按钮配置决定)

▲ 待办是员工主入口;点进去才是「业务单 + 流程壳」的完整详情
字段权限(可写/只读/隐藏)在 SIMPLE 审批节点可配 businessFieldsPermission,详情渲染时落到业务表单——这是 CUSTOM 单据「同一套页面、审批态只读部分字段」的前端基础。
八、端到端推荐体验
在线演示:http://ruoyioffice.com/web/(账号 admin / admin123)
源码仓库:GitHub | GitCode | Gitee
常见问题(FAQ)
SIMPLE 和 BPMN 能来回改类型吗?
类型切换意味着设计器数据源切换(simpleModel vs bpmnXml)。实务上视为「换一套图」,不要指望无损互转;重要流程变更应回归测试部署版本。
业务单据必须走 CUSTOM 吗?
字段少、无复杂主子表,可用 NORMAL 快速上线。主子表、附件、领域校验多,CUSTOM + FlowBill 更稳。
前端要直接调 Flowable REST 吗?
不要。统一走本系统 /admin-api/bpm/**,由服务端封装引擎,便于权限、租户、FlowBill 回调一致。
移动端设计器一样吗?
移动端侧重待办办理与轻发起;双设计器在 PC。App/H5 与 PC 共用同一 process key 与任务 API。
和「多人审批 / 超时 / 抄送」文什么关系?
那些是节点能力;本文是承载这些能力的前端骨架(画在哪、存在哪、详情怎么嵌)。
结语
工作流前端的核心不是「再包一层漂亮流程图」,而是:给业务一条低门槛的 SIMPLE 路,给专家一条标准 BPMN 路,两者编译进同一引擎;再用 CUSTOM + FlowBill 把真实单据嵌进发起与审批详情。 配色与三端架构图一致——设计器可以分蓝绿两路,底座始终是那条蓝色的 Spring Boot + Flowable。
你们团队现在是全员 BPMN,还是已经默认 SIMPLE?单据集成卡在「跳转发起」还是「详情嵌组件」?欢迎评论区交流。
💡 想要体验 RuoYi Office 的强大功能?
🌐 在线演示:http://ruoyioffice.com/web/(账号 admin / admin123)
📦 源码仓库:GitHub | GitCode | Gitee
💬 技术咨询:添加微信 17156169080,备注「RuoYi Office」
⭐ 如果觉得不错,请给个 Star 支持一下!






