审批、任务与协作
审批协作覆盖用户处理任务时的全部动作,包括通过、驳回、转办、委派、协办、加签、减签、退回、撤回已办、催办和动态抄送。入口主要是「待我审批」「我已办」「抄送我的」「我的申请」和实例详情。
待办列表
「待我审批」按任务组织:同一实例的多条并行待办(如并行会签、加签)各占一行,可独立勾选和处理;列表总数与行数同口径。批量勾选以任务为粒度,提交前会拉取最新列表做陈旧检查,状态已变化的任务被剔除并提示刷新。
新待办通过 WS 实时推送并刷新列表缓存(见下文)。
待办处理
| 操作 | 说明 |
|---|---|
| 通过 | 当前任务通过;按审批方式判断是否推进节点 |
| 驳回 | 当前任务驳回;按按钮跳转配置或节点驳回策略处理 |
| 转办 | 把当前任务转给目标用户,当前处理人退出任务 |
| 委派 | 目标用户先给出建议,再回到最早委派人最终确认 |
| 加签 | 临时增加审批人,可前加签、后加签或并加签 |
| 减签 | 移除由加签产生且仍可处理的任务 |
| 退回 | 退回前序审批/办理节点 |
| 催办 | 对待处理任务发送提醒 |
| 协办 | 邀请其他用户提供意见,不代替审批 |
| 撤回已办 | 审批人撤回自己刚完成的处理,流程回到对应节点重审。原任务行保留原始意见与签名并标记「已撤回」,其后续产生的任务作废为 skipped(注释 [撤回作废] 上游审批撤回重审),系统新建同轮重审任务承接后续审批 |
| 修改可编辑字段 | 节点表单权限含「可编辑」字段时,处理人可在详情中修改并随「通过」提交(formUpdates),服务端按节点权限白名单过滤后写回实例表单 |
审批接口使用幂等防重复提交,批量审批与转办额外通过 Redis 动作去重,避免重复点击造成多次推进。通过、拒绝、转办、委派、加签、减签、退回七类动作在服务端按节点「操作按钮」配置强制校验启用态,未启用的动作即使绕过前端也会被拒绝。
重复处理人预检
转办、委派、加签、管理员改派和离职交接在写入前统一校验目标处理人:目标用户已在同节点同激活轮次持有 pending/waiting 任务时,返回 409 并附带姓名(如「赵六·财务主管 已是本节点待办处理人,无需重复指派」)。离职交接逐条改派时命中冲突的条目自动跳过、不阻断其余条目。数据库层的活动任务部分唯一索引作为最后防线(见实例生命周期)。
委派回执场景下,若最早委派人已在同节点同轮持有活动任务,回执不再重建新任务,由既有任务直接承接最终确认。
实时提醒与列表刷新
管理后台在 AdminLayout 挂载统一的 WS 消费 hook,按事件类型失效对应的 TanStack Query 缓存:
- 新待办推送
workflow:taskCreated:右上角弹出可点击提醒(直达「待我审批」并自动展开该任务),并刷新待办列表缓存。 - 自己的任务被超时自动通过 / 自动拒绝时推送
workflow:taskFinished(decision: approved | rejected),刷新待办列表。 - 流程结束(通过 / 驳回 / 撤回)向发起人推送
workflow:instanceFinished,刷新「我的申请」、待办与流程监控缓存;刻意不做全域失效,避免设计器编辑中的画布被 refetch 覆盖。
移动审批(approval.html)不走 WS,底部 TabBar 的待办 / 抄送未读角标由 30 秒轮询 GET /api/workflows/instances/pending-mine/count 与 GET /api/workflows/instances/cc-mine/unread-count 维持。
审批方式
| 方式 | 运行效果 |
|---|---|
| 或签 | 一人通过后节点通过,其余同节点待办标记为 skipped(注释 [或签联动] 本节点已有审批人通过,其余待办作废) |
| 会签 | 全部待办通过后节点通过 |
| 依次审批 | 只放出当前顺序处理人,前一人通过后下一人变为 pending |
| 比例会签 | 同意比例达到阈值即通过,剩余待办跳过(注释 [比例会签联动] 已达通过比例,其余待办作废) |
| 随机一人 | 从候选人中选一人处理 |
| 自动通过 | 节点不产生人工待办,自动推进 |
同一次进入节点创建的一批任务共享一个激活轮次(activationId);节点因驳回回退、退回或撤回重审被再次进入时生成新一轮。会签、比例会签的完成判定只统计当前轮任务,历史轮的驳回/跳过记录不参与阈值计算,也不会卡死节点。加签、委派回执产生的任务继承同轮参与判定。
任一审批人拒绝时,同节点其余活动待办联动作废(注释 [同节点联动] 本节点已有审批人拒绝,其余待办作废),随后按驳回策略处理。
驳回与退回
驳回用于表达不同意,退回用于让前序节点补充处理。
| 能力 | 说明 |
|---|---|
| 终止流程 | 实例进入 rejected,全量清场(任务/Token/推进作业) |
| 退回上一节点 | 找到上一个审批/办理节点重新生成任务 |
| 退回发起人 | 全量清场后实例进入 returned,发起人修改后在原实例重新提交(见实例生命周期) |
| 退回指定节点 | 按节点 key 回到目标节点 |
| 按钮跳转 | 拒绝/退回按钮可配置跳转目标,优先于节点默认策略 |
| 回到原节点 | 被退回节点完成后直接回到发起退回的节点 |
被清场的待办都带来源注释,处理人在「我已办」和时间线中能看到任务因何作废。
转办与委派
转办、委派、管理员改派、离职交接、超时升级转交统一写入 workflow_task_transfers 明细表(移出方、接收方、操作人、原因、时间),完整回答"谁在何时因何把任务交给了谁":
| 字段 | 说明 |
|---|---|
originalAssigneeId | 任务最初处理人 |
transfers | 任务的转办明细列表(详情场景返回,时间线逐条展示) |
delegatedFromId | 委派期间指向最早委派人 |
系统禁止把任务转回曾经经手的人(基于转办明细的 from/to 并集判定),避免 A → B → A 的循环;转给同节点已有活动待办的人则被预检拦截(409 带姓名)。委派多次时,最终回执仍回到最早委派人。
加签与减签
| 加签位置 | 说明 |
|---|---|
| 前加签 | 原任务进入 waiting,加签人先处理,完成后原任务恢复 |
| 后加签 | 原审批人先完成,再交给加签人接力 |
| 并加签 | 加签人与原处理人并行处理,按选择的会签/或签汇总 |
加签目标同样经过重复处理人预检;减签只能移除由加签产生的待办。加签和减签分别触发 task.addSigned、task.reduceSigned 事件。
协办
协办用于收集意见,不改变任务处理人。审批人发起协办后,协办人在「我的协办」中回复意见,审批人在任务详情中查看并自行决定通过或驳回。
审批代理
审批代理(离岗委托)用于出差、休假等场景:委托人把自己的待审批任务在一段时间内自动转交给代理人。入口为 工作流引擎 → 审批代理。
| 配置 | 说明 |
|---|---|
| 委托人 / 代理人 | 待办从委托人自动转交给代理人 |
| 适用流程 | 可限定单个流程定义;留空对全部流程生效 |
| 生效时间 | 开始 / 结束时间;留空表示立即生效 / 长期有效 |
| 原因 | 备注委托原因 |
| 启用状态 | 规则可随时停用 |
代理在任务生成时生效:引擎解析出的处理人命中启用中的代理规则时,待办直接指派给代理人,任务上保留 delegatedFromId 指向原处理人,时间线可见转交痕迹。已生成的历史待办不受新增规则影响。管理员执行离职交接时可一并停用离职人的代理规则。
催办
发起人和管理员可对运行中实例的 pending 任务催办。单个任务 5 分钟内只允许催办一次;实例级催办会对所有待办尝试提醒,并跳过命中节流的任务。节点开启超时「自动提醒」时,系统也会在每次到期提醒时向处理人自动发送催办通知。
催办记录写入 workflow_task_urges,并触发 task.urged 事件(系统超时提醒仅发事件,不写催办记录)。
抄送
抄送节点解析接收人后写入抄送任务,送达即完成,不阻塞流程:
- 「抄送我的」列表的抄送时间为 CC 任务的送达时间(运行中补加的抄送按补加时刻计),与实例发起时间无关;未读/已读状态独立维护,支持标记已读与转发。
- 所有运行态视图(节点列表、流程图卡片、审批时间线、监控任务明细)对已送达的抄送统一显示「已抄送」(成功色);流程尚未到达的抄送节点显示「待抄送」。
运行中的实例支持动态补加抄送:
POST /api/workflows/instances/{id}/cc/add调用者必须是发起人或管理员,目标节点必须是 ccNode,系统会自动去重已抄送过的用户。
常用语、附件与签名
| 能力 | 说明 |
|---|---|
| 常用语 | 用户维护自己的审批常用语,在审批弹窗中快速填入 |
| 附件 | 每个操作按钮(通过/拒绝/转办/委派/加签/退回)可独立配置附件策略:不显示 / 选填 / 必填,必填时未上传附件无法提交。审批与发起表单的附件统一走 POST /api/workflows/attachments(按工作流身份放行,见权限与范围控制) |
| 手写签名 | 节点启用签名后,通过时必须提交签名 |
| 意见必填 | 节点启用后,通过或驳回必须填写意见 |
沟通与通知深链
实例详情「沟通」页签支持:
| 能力 | 说明 |
|---|---|
| 自由评论 | 参与人(发起人/处理人/超管)可留言 |
| @提及 | 提及参与人并发送站内信 + WS 实时提醒(带实例详情深链) |
| 评论附件 | 每条评论最多 5 个附件,随评论展示 |
| 回复引用 | 对某条评论回复,展示被引用评论的作者与内容摘要(父评论删除后引用置空,本条保留) |
工作流站内信均带深链(link 字段):待办/催办/转交提醒跳「待我审批」并自动弹出对应任务详情;抄送提醒跳「抄送我的」;审批结果与 @提及跳「我的申请」实例详情。顶栏消息点击直达,WS 实时弹窗点击文案同样跳转。
批量处理
| 操作 | 说明 |
|---|---|
| 批量通过 | 对多个待办任务逐条审批通过,返回每条成功/失败结果 |
| 批量驳回 | 对多个待办任务逐条驳回,返回每条成功/失败结果 |
| 批量撤回 | 对多个自己发起的运行实例撤回 |
| 批量催办 | 对多个实例的待办批量催办 |
批量操作以任务为粒度(勾选的每行即一个任务),提交前做陈旧检查,遇 409 并发冲突自动刷新列表引导重选。
保存视图
「我的申请」「待我审批」「我已办」「抄送我的」和「流程监控」列表支持把当前筛选条件保存为个人视图,一键切换常用筛选组合;可设默认视图(进入页面自动套用)并调整排序。视图按用户隔离存储。