适用版本:PIGX 5.10 及以上
流程引擎:Flowable
表单类型:自定义表单(业务表单)
最后更新:2025 年 10 月
项目已经提供如下演示代码,二开请先阅读相关代码逻辑和如下开发规范
| 页面类型 | 文件路径 | 路由路径 | 功能描述 | 操作权限 |
|---|---|---|---|---|
| 列表页 | /flow/oaLeave/index.vue | /flow/oaLeave | 展示请假记录列表,支持管理操作 | 查看、编辑、删除(基于权限) |
| 创建页 | /flow/oaLeave/create.vue | /flow/oaLeave/create | 填写请假表单并发起审批流程 | 仅限创建者 |
| 详情页 | /flow/oaLeave/detail.vue | /flow/oaLeave/detail/:id | 查看流程详情、执行审批操作 | 流程参与者及审批人 |
控制器类:BpmOaLeaveController
负责处理前端请求,包括列表查询、新增、详情获取等接口。
业务逻辑类:BpmOaLeaveServiceImpl
实现请假流程的核心业务逻辑,如数据校验、流程启动、状态更新等。
| 组件 | 职责 | 关键字段 |
|---|---|---|
| 业务表 | 存储业务数据 | process_instance_id |
| create.vue | 表单编辑 | 发起流程入口 |
| detail.vue | 信息展示 | 审批流程查看 |
| 流程定义 | 控制流程逻辑 | LEAVE |
| Service | 业务处理 | IProcessInstanceStatusEventService |
| 字段 | 类型 | 说明 | 约束 |
|---|---|---|---|
id | BIGINT | 主键 | NOT NULL, PK |
process_instance_id | VARCHAR(64) | 流程实例编号(必须) | 必须 |
create_by | VARCHAR(64) | 创建者 | DEFAULT '' |
create_time | DATETIME(6) | 创建时间 | DEFAULT CURRENT_TIMESTAMP(6) |
update_by | VARCHAR(64) | 更新者 | DEFAULT '' |
update_time | DATETIME(6) | 更新时间 | 支持自动更新 |
del_flag | CHAR(1) | 删除标记 | DEFAULT '0' |
tenant_id | BIGINT | 租户编号 | DEFAULT 0 |
根据具体业务需求添加,以请假表单为例:
| 字段 | 类型 | 说明 |
|---|---|---|
username | VARCHAR(255) | 申请人 |
leave_type | SMALLINT | 请假类型 |
leave_reason | VARCHAR(255) | 请假原因 |
start_time | DATETIME(6) | 开始时间 |
end_time | DATETIME(6) | 结束时间 |
leave_day | SMALLINT | 请假天数 |
leave_status | SMALLINT | 请假结果/流程状态 |
| 页面 | 文件路径 | 路由 | 用途 | 操作权限 |
|---|---|---|---|---|
| 列表 | /flow/oaLeave/index.vue | /flow/oaLeave | 数据展示和记录管理 | 查看、编辑、删除 |
| 创建 | /flow/oaLeave/create.vue | /flow/oaLeave/create | 新增表单、发起流程 | 仅创建者 |
| 详情 | /flow/oaLeave/detail.vue | /flow/oaLeave/detail/:id | 流程审批、信息查看 | 参与者、审批人 |
主要功能
关键方法
主要功能
核心逻辑
主要功能
特殊处理
在流程审批过程中,流程引擎会以组件 Props 的方式将流程上下文参数回调给业务表单。开发者可以利用这些参数动态控制表单的显隐、只读状态、数据加载等行为。
审批节点渲染详情页时,流程引擎会注入以下参数:
| 参数 | 类型 | 说明 | 使用场景 |
|---|---|---|---|
id | string | 业务记录主键 | 通过 ID 加载业务数据 |
businessKey | string | 流程业务标识 | 关联流程与业务数据 |
processInstanceId | string | 流程实例编号 | 查询流程状态、加载关联数据 |
readonly | boolean | 是否只读(默认 true) | 控制表单是否可编辑 |
node | Record<string, any> | 当前流程节点信息 | 根据节点类型展示不同操作按钮 |
发起节点或驳回重新提交时,流程引擎会注入以下参数:
| 参数 | 类型 | 说明 | 使用场景 |
|---|---|---|---|
flowHelper | object | 流程辅助对象 | 提供 validate() 校验审批人、getFlowData() 获取流程数据 |
processInstanceId | string | 流程实例编号 | 驳回后重新提交时,用于加载已有数据 |
readonly | boolean | 是否只读 | 控制表单是否可编辑 |
根据 readonly 控制表单可编辑状态
利用 flowHelper 提交流程数据
通过 processInstanceId 加载数据(驳回重新提交)
利用 node 信息控制按钮显隐
| 配置项 | 说明 | 样例 | 重要性 |
|---|---|---|---|
| 流程标识 (Process Key) | 业务代码必须匹配 | LEAVE | ⭐⭐⭐ 必须 |
| 流程名称 | 用户可见的流程名称 | 请假申请流程 | 一般 |
| 版本 | 流程版本号 | v1 | 版本管理 |
| 表单类型 | 选择自定义表单 | 自定义表单 | 必须 |
| 节点 | 表单类型 | 表单路径 | 说明 |
|---|---|---|---|
| 发起节点 | 编辑表单 | /flow/oaLeave/create.vue | 用户填写表单 |
| 审批节点 | 查看表单 | /flow/oaLeave/detail.vue | 审批人查看详情 |
发起节点
create.vue审批节点
detail.vue回调配置
IProcessInstanceStatusEventService 回调| 方法 | 功能 | 调用时机 | 返回值 |
|---|---|---|---|
getFlowId() | 返回流程标识 | 服务启动时注册 | "LEAVE" |
handleStatusEvent() | 处理状态变更 | 流程状态改变时 | void |
saveAndStartProcess() | 保存数据并启动流程 | 用户提交表单时 | 业务实体 |
| HTTP方法 | 端点 | 功能 | 说明 |
|---|---|---|---|
| POST | /api/bpmOaLeave | save() | ⭐ 保存并启动流程 |
| GET | /api/bpmOaLeave | getBpmOaLeavePage() | 分页查询 |
| GET | /api/bpmOaLeave/{id} | getDetails() | 获取详情 |
| PUT | /api/bpmOaLeave | updateById() | 更新记录 |
| DELETE | /api/bpmOaLeave/{id} | removeById() | 删除记录 |
save() - 保存并发起流程
| 步骤 | 操作 | 关键代码 |
|---|---|---|
| 1 | 保存业务数据 | baseMapper.insert(bpmOaLeave) |
| 2 | 构建启动参数 | ProcessInstanceParamDto |
| 3 | 设置流程参数 | 用户信息、自定义参数 |
| 4 | 调用流程引擎 | flowApiFlowService.startProcessInstance() |
| 5 | 获取流程实例 ID | stringR.getData() |
| 6 | 更新业务数据 | baseMapper.updateById() 写入 process_instance_id |
| 事件 | 触发时机 | 处理方法 | 更新字段 |
|---|---|---|---|
| 流程启动 | 用户提交表单 | saveAndStartProcess() | process_instance_id |
| 流程状态变更 | 审批人操作 | handleStatusEvent() | leave_status |
| 流程完成 | 所有审批通过 | handleStatusEvent() | leave_status |
com.pigx.bpm.oaleave.*修改 BpmOaLeaveServiceImpl,实现 IProcessInstanceStatusEventService 接口:
create.vue(表单编辑)detail.vue(信息展示)LEAVEcreate.vuedetail.vue✅ 必做项
业务表必须包含 process_instance_id 字段
Service 必须实现 IProcessInstanceStatusEventService 接口
getFlowId() 方法handleStatusEvent() 方法前端必须区分创建和详情页
create.vue:可编辑表单detail.vue:只读表单流程定义标识 (Process Key) 必须唯一