前端-案例-流程一键流转,点击按钮流转到指定节点

发布于 2026-05-25

场景说明

流程开启指定流转后,点击提交按钮可以选择要提交到的节点

图片1

而某些领导他不想去选择节点,他想点提交时就流转到某个节点

需求说明

“5”节点为分叉开始节点,“审批2”和“审批4”为分叉中间点,在“5”节点点击“一键流转”按钮流转到“审批4”节点,提交时不需要去选择节点,“审批4”节点的操作者提交时固定

图片2

图片3

实现说明

实现思路

1.我们可以通过重写组件参数的方式加上“一键流转”按钮,在该按钮绑定点击事件,点击时提交流程

2.我们要往WfForm.getGlobalStore()添加一些提交参数,这样提交时就会提交到指定节点,这些参数可以从getSelectFlowNodeInfo接口中获取,我们从这个接口中获取节点参数,在点提交弹出选择节点对话框时会调用该接口,该接口返回可选择节点的信息,我们就可以获取到“一键流转”提交到的节点的节点信息

图片4

实现步骤

1.在ecode中重写组件参数,添加“一键流转按钮”

ecodeSDK.overwritePropsFnQueueMapSet('WeaReqTop',{
  fn:(props)=>{
    const url = window.location.href;
    if(url.indexOf('spa/workflow/static4form/index.html') === -1) return;
    if(WfForm === undefined){
      return;
    }
    const info =WfForm.getBaseInfo();
    if(info.workflowid !== 63 && info.nodeid !== 253) return;
    // 这里可以设置一些业务逻辑,判断哪些操作者可以进行一键流转
    if(props.buttons.length !== 0){
      const {Button} = antd;
      const newButton = <Button onClick={()=>yjlzsubmit()}>一键流转</Button>;
      props.buttons.push(newButton);
    }
  }
});

2.编写yjlzsubmit()函数,添加提交参数进行流程提交

const yjlzsubmit = () => {
    var canSubmit ='-4';//是否可提交意见 -4:可提交意见 -3:不可提交意见
    var nodeOperators =89;//下一节点操作者
    //nextNodeInfo可以通过抓请求/api/workflow/reqform/getSelectFlowNodeInfo 查看
    //可根据业务情况,对指定节点一键流转按钮,定义nextNodeInfo,实现流程的自动流转
    var nextNodeInfo = {
        nodeName :"审批4",
        ccsignType:"-4",
        operators: [],
        nodeAttribute: "2",
        operatorGroupstr:"",
        signType: "1",
        nodeAttributeName:"分叉中间点",
        id: "252",
        ccOperators: [],
        nodeType: "1",
        key: "252",
    }
    WfForm.getGlobalStore().commonParam.selectNextFlow= 1;//1是否指定流转
    WfForm.getGlobalStore() .submitParam. SignType_0 = nextNodeInfo.signType;//会签类型 :非会签 1:会签2:依次逐个处理
    WfForm.getGlobalStore().submitParam.ccOperator_0 = nextNodeInfo.ccOperators;
    WfForm.getGlobalStore().submitParam.canSubmit_O=canSubmit;
    WfForm.getGlobalStore().submitParam.selectNodeFlow_nodeId_0=nextNodeInfo.id+'_'+nextNodeInfo.nodeType+'_'+nextNodeInfo.nodeAttribute
    WfForm.getGlobalStore().submitParam.selectNodeFlow_operator_0=nodeOperators;
    WfForm.getGlobalStore().submitParam.selectNodeFlow_canFlowNextNode=1;
    WfForm.getGlobalStore().submitParam.selectNodeFlow_nodeIds=nextNodeInfo.id;
    WfForm.getGlobalStore().submitParam.nodeoperator_0 = nodeOperators;//抄送人
    WfForm.getGlobalStore().submitParam.isSelectNextFlow=1; 
    WfForm.getGlobalStore().submitParam.selectNextFlowMode=1;
    // 体检流程
    WfForm.doSubmit();
}

可能遇到的问题

1.提交失败,提示节点操作者错误

可能提交参数的节点id未设置正确,确认该节点id是否为要提交到的节点的节点id

图片5