
SpringBootFlowable 流程任务操作全景通过拒绝转办委派加签退回抄送异同与 operation-button 封装落地演示地址http://ruoyioffice.com | 源码1·GitHubruoyi-office | 源码2·GitCoderuoyi-office | 源码3·Giteeruoyi-office | 微信17156169080备注「RuoYi Office」产品说「加个撤回」业务说「先转给财务再委派给外包」研发在详情页堆了十个按钮——然后发现财务节点不该有拒绝发起人节点文案必须是「提交」。任务操作不是按钮列表而是「设计时开关 运行时语义 端上组件」三层契约。本文按 RuoYi OfficeSpring Boot Flowable Vben UniApp把七类操作画清异同并拆开operation-button封装如何落地。▲ 全景七类操作对比卡 buttonsSetting 管道设计器 → BPMN 扩展 → 详情聚合 → 端上组件引言先分清「改结果」和「改责任」类别操作一句话改结果通过 / 拒绝推进或终止本节点乃至整单改责任转办 / 委派 / 加签 / 减签换谁办、临时插人、去掉加签人改路径退回跳到上游节点重办改知情抄送知会不挡待办上一篇《审批任务协作》深挖了加签方向、转办/委派 owner、退回moveActivity本文补齐全景对比 按钮组件封装——解决「模型里关了拒绝前端为什么还显示」这类工程问题。一、七类操作对比图产品 / 测试可用枚举与设计器一致OperationButtonType/BpmTaskOperationButtonTypeEnumAPPROVE1// 通过REJECT2// 拒绝TRANSFER3// 转办DELEGATE4// 委派ADD_SIGN5// 加签RETURN6// 退回COPY7// 抄送操作引擎侧核心动作责任链是否需要选人/节点典型误用通过approveTask完成当前 UserTask当前办理人完成本节点意见可配签名/下一审批人自选和「办理人节点」文案混用拒绝rejectTask按拒绝策略结束或驳回节点常导致实例 REJECT意见必填常见想「退回改单」却点了拒绝转办setAssignee换处理人彻底交给对方选用户想「代批后还要自己看」却用了转办委派delegateTask保留 owner代办完回到原人选用户和转办口头混称加签前后插子任务BEFORE/AFTER临时扩大审批圈选人 方向用加签代替模型会签退回moveActivityIdsToSingleActivityId回到指定历史节点选可退回节点 意见退到不可达节点 / 子流程乱跳抄送写抄送台账通常无 UserTask 完成知会不审批选被抄送人把抄送配成审批人卡流程另外还有运行时衍生能力不在七键枚举里但详情页常出现减签有加签子任务时可删未完成的子任务发起人取消 / 撤回 / 已办取回 / 重提属于实例级「反悔」态见《审批反悔三态》文┌──────── 改结果 ────────┐ │ 通过 ──► 下一节点/结束 │ │ 拒绝 ──► 结束或驳回策略 │ └────────────────────────┘ 当前任务 ──► ┌──────── 改责任 ────────┐ │ 转办assignee 换人 │ │ 委派代办后回 owner │ │ 加签插子任务再汇合 │ └────────────────────────┘ ┌──────── 改路径/知情 ───┐ │ 退回跳上游节点 │ │ 抄送台账知会 │ └────────────────────────┘▲ 待办是所有操作的统一入口点「办理」进详情后底栏按钮由节点 buttonsSetting 决定而不是写死「永远有七个键」二、设计时三种默认按钮包简单流程设计器里不是每个节点同一套开关// 审批人节点默认通过/拒绝/转办/委派/加签/退回 全开抄送可另配DEFAULT_BUTTON_SETTING// 办理人节点通过文案改「办理」拒绝/转办等默认关TRANSACTOR_DEFAULT_BUTTON_SETTING// 发起人节点通过文案改「提交」其它协作键关死START_USER_BUTTON_SETTING产品含义发起人节点点的是「提交/重新提交」不是「审批通过」。办理人节点偏事务闭环填还车里程、确认到货常不需要拒绝/加签。每个审批节点仍可改displayName如「同意付款」与enable。配置写入模型后编译进 FlowableUserTask扩展元素buttonsSettingid / displayName / enable。三、运行时parseButtonsSetting → todoTask// BpmTaskServiceImpl#getTodoTaskBpmnModelbpmnModel...;MapInteger,OperationButtonSettingbuttonsSettingBpmnModelUtils.parseButtonsSetting(bpmnModel,todoTask.getTaskDefinitionKey());returnbuildTodoTask(...).setButtonsSetting(buttonsSetting).setSignEnable(...).setReasonRequire(...);get-approval-detail聚合详情时带上todoTask前端只认这一份开关——PC 与 App 同源避免两端各写一套 if。写入侧SIMPLE 编译addButtonsSetting(node.getButtonsSetting(),userTask);// → UserTask extensionElements.buttonsSetting没有扩展元素时前端isShowButton默认true兼容旧定义有配置则以enable为准。四、PC 封装operation-button.vue做了什么路径apps/web-antd/src/views/bpm/processInstance/detail/modules/operation-button.vue职责可以概括成四件事4.1 显示门禁functionisShowButton(btnType:BpmTaskOperationButtonTypeEnum):boolean{if(runningTask?.buttonsSetting?.[btnType]){returnrunningTask.buttonsSetting[btnType].enable;}returntrue;}functiongetButtonDisplayName(btnType){returnrunningTask?.buttonsSetting?.[btnType]?.displayName??OPERATION_BUTTON_NAME.get(btnType);}4.2 交互容器统一用 Popover通过 / 拒绝 / 转办 / 委派 / 加签 / 退回 / 抄送 / 取消 / 减签每个键打开独立气泡表单意见、选人、选退回节点、签名板避免详情主区被 Modal 堆满。4.3 审批前钩子beforeApproval注入业务表单校验CUSTOM 单据先存再批通过后才调TaskApi.approveTask等接口。4.4 衍生能力签名signEnable意见必填reasonRequire下一节点自选审批人getNextApprovalNodes减签runningTask.children.length 0时出现▲ PC 待办进入详情后底栏即 operation-button主操作 协作操作均受节点配置约束五、移动端封装同一契约不同布局UniApppages-bpm/processInstance/detail/components/operation-button.vue维度PCUniApp布局底栏横向 Button Popover左图标最多 2 右主按钮 「更多」ActionSheet复杂表单气泡内完成拆到独立操作页意见/选人/退回节点开关来源buttonsSetting同源与反悔态详情壳另处理撤回/重提viewType门禁互斥渲染移动端右侧通常固定「拒绝 通过」槽位其余进左侧/更多——小屏优先主路径协作操作降级入口但不丢能力。六、落地清单新增一种操作按钮要改哪若业务要加第八种键示例仅财务节点「挂起」推荐按现有管道扩展而不是详情页写死前后端枚举各加一个 idOPERATION_BUTTON_NAME/ 设计器DEFAULT_BUTTON_SETTINGaddButtonsSetting/parseButtonsSetting已泛化 Map一般不用改结构BpmTaskService增加引擎语义实现 ControllerPCoperation-button增加 Popover APIUniApp 增加图标映射 操作页评论类型 / 消息模板补审计文案禁止只在某一个 Vue 里v-ifnodeName财务——换流程 key 就失效且 App 不同步。七、选型与配置建议给实施节点类型建议开启建议关闭普通审批通过、拒绝、退回按需转办全员加签易变成会签旁路财务付款通过改名、退回签名随意转办到外包账号办理/确认「办理」必要时退回拒绝、加签知会领导用抄送节点或办理中抄送配成审批人法务会审模型会签/或签运行时连环加签代替模型测试矩阵至少覆盖关拒绝后两端都不显示改 displayName 两端一致委派完成后待办回 owner退回后上游可编辑字段权限正确。八、端到端体验打开流程模型 SIMPLE 设计器点开某审批节点「操作按钮」面板关掉拒绝并改通过文案。发布定义发起一单用审批人进待办详情确认底栏变化。分别点转办与委派看时间线评论与后续待办归属差异。手机端同一账号打开确认「更多」里能力与 PC 对齐。在线演示http://ruoyioffice.com源码仓库GitHub | GitCode | Gitee常见问题FAQ转办和委派到底选哪个出差「这单以后你负责」→ 转办。请假「你先代看回来我还要确认」→ 委派。看责任要不要回到自己。为什么设计器关了加签详情还有减签减签依赖「当前是否已有加签子任务」不是buttonsSetting七键之一有子任务才露避免误操作。buttonsSetting 为空时按钮全开安全吗兼容旧流程。新项目建议节点显式落默认包并在关键流程关掉不需要的协作键。拒绝和退回可以合成一个按钮吗不建议。拒绝常走结束/驳回策略退回是路径回跳。合成后审计与业务状态机都会糊。和《任务协作》《反悔三态》《移动审批》怎么分工协作文讲引擎细节反悔文讲撤回/取回/重提移动文讲 viewType 壳本文讲操作全景 按钮组件管道。结语流程任务操作的工程正解不是在详情页堆按钮而是设计器声明 → BPMN 扩展沉淀 → 待办聚合下发 → PC/App 组件按契约渲染与调 API。RuoYi Office 用同一套buttonsSetting把七类操作和端上operation-button拴在一起实施才能按节点裁剪能力研发才能按管道扩展第八键。你们现在是「全公司统一七键」还是已经按财务/法务节点裁过按钮欢迎评论区交流。想要体验 RuoYi Office 的强大功能在线演示http://ruoyioffice.com/web/账号 admin / admin123源码仓库GitHub | GitCode | Gitee技术咨询添加微信17156169080备注「RuoYi Office」⭐如果觉得不错请给个 Star 支持一下