审批接入:业务表单
业务表单是 RuoYi Office 推荐用于正式业务审批的接入方式。它把单据数据保存到独立业务表中,同时接入 Flowable 流程实例,实现“业务数据 + 审批流转 + 状态同步”的闭环。
适用场景
- OA 用印、用车、会议、收发文等协同办公单据。
- HRM 入职、转正、调动、离职、请假、薪资、绩效等人力流程。
- CRM、合同、项目、资产、采购、付款等需要业务台账的审批。
- 需要列表筛选、统计分析、附件管理、明细表、移动端审批。
核心模型
一个业务审批单据通常包含:
| 字段 | 用途 |
|---|---|
id | 业务单据主键 |
bill_code | 单据编号 |
process_instance_id | Flowable 流程实例编号 |
process_status | 草稿、审批中、通过、拒绝、取消等状态 |
tenant_id | 多租户隔离 |
creator / create_time | 创建信息 |
| 业务字段 | 申请事项、金额、时间、人员、明细等 |
不同模块可以保留自己的命名规则,但必须能稳定关联流程实例和业务单据。
后端接入步骤
- 设计业务主表和必要的明细表。
- 创建 DO、Mapper、Service、Controller、SaveReqVO、RespVO、PageReqVO。
- 创建单据时保存草稿或提交审批。
- 提交审批时调用 BPM 流程实例能力,传入流程标识、业务主键和流程变量。
- 保存
processInstanceId,并把processStatus更新为审批中。 - 流程结束、拒绝、取消时,同步回业务单据状态。
业务 Service 应明确支持流程状态回写,避免审批结束后列表仍停留在旧状态。
前端接入步骤
PC 管理端建议使用列表页和表单页分离结构:
text
views/{module}/{feature}/
├── list/
│ ├── index.vue
│ └── data.ts
└── info/
├── index.vue
└── data.ts表单页应支持三类场景:
| 场景 | 行为 |
|---|---|
| 新建 | 填写业务字段,可保存草稿或提交审批 |
| 查看 | 只读展示业务字段、流程状态和附件 |
| 审批 | 展示业务字段和审批操作,按节点权限开放部分字段 |
如果审批节点允许回填字段,表单组件需要在审批前保存可编辑字段,通常通过 beforeApproval 完成。
流程模型配置
新建流程模型时选择“业务表单”,并配置:
| 配置 | 示例 | 说明 |
|---|---|---|
| 表单提交路由 | /oa/seal/sealapply/info | 发起或编辑单据时进入的页面 |
| 表单查看路由 | /oa/seal/sealapply/info | 审批和查看详情时进入的页面 |
| 流程标识 | oa_seal_apply_bill | 必须与业务代码中的流程定义 key 对齐 |
流程标识不要凭目录名猜测,应以数据库流程定义、已有配置和业务模块常量为准。
字段权限
RuoYi Office 对业务表单扩展了节点字段权限。设计流程时,可以按审批节点设置字段:
- 只读:审批人可查看但不能修改。
- 可编辑:审批人可回填或修正。
- 隐藏:审批人不可见。
实现时注意:
- 表单 schema 的字段 key 要与后端字段或前端权限配置稳定对应。
- 审批节点可编辑字段才触发保存。
- 拒绝操作不应被可编辑字段校验阻塞。
移动端接入
移动端业务表单不要放入 pages-bpm,应放在对应业务分包,例如 pages-oa、pages-hrm、pages-crm。业务表单被流程详情内嵌时,需要支持:
embeddededitablegetFormValuesvalidatesubmit
有节点特殊字段时,可增加 beforeApproval(operationType?),并保证拒绝操作能跳过业务字段校验。
验收清单
- 业务单据能保存草稿。
- 提交后生成流程实例并保存
processInstanceId。 - 待办任务能打开业务详情页。
- 审批通过、拒绝、取消后业务状态同步。
- PC 和移动端查看同一单据时数据一致。
- 多租户、权限、数据权限和附件权限符合预期。
相关文档
- 工作流手册:/bpm/
- 表单设计器:/form-designer/designer/
- 流程表单接入:/form-designer/use-bpm-form/
