芋道审批流配置流程表单超详细介绍

简介: 芋道审批流配置流程表单超详细介绍

♥️作者:小宋1021

🤵‍♂️个人主页:小宋1021主页

♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!!

🎈🎈加油! 加油! 加油! 加油

🎈欢迎评论 💬点赞👍🏻 收藏 📂加关注+!


       芋道集成的工作流十分好用,功能十分强大。相信我们在逐渐使用的过程之中就会发现有各种不同的业务需求,单一的提交审批→审核员审核,通过或者拒绝→反馈给用户。这种单一流程不够满足各种业务需求,有些时候我们就需要在审批的时候让审批人填写一些信息然后再审批通过。如下图:

image.gif 编辑

       比如我现在接到一个需求就是宿舍预约审批,在员工提交住宿申请的时候需要宿舍管理员在审批的时候去分配宿舍,这样就需要用到了我们的流程表单功能,下面我来给大家详细介绍一下芋道流程表单如何配置以及使用,劳烦大家给一个小心心,谢谢大家。

       流程表单是在工作流程模块,流程管理菜单里的一个功能。 image.gif 编辑

       点击新增可以新增一个新的流程表单

image.gif 编辑

       左侧就是可以选择的表单控件,可以按照自己的需要去配置审批通过时想要填写的表单,我现在就以一个级联选择器为例子给大家演示一下如何使用。

       我们拖拽一个级联选择器到中间的空白处,就会出现一个选择框,同时右侧也会出现这个级联选择器的配置项。

image.gif 编辑

       下面我来介绍一下几个比较关键的字段:

       1.字段 ID:组件对应的字段名用于与组件的数据进行绑定。字段名需以字母开头,以确保能够正确识别。这个字段是前端传给后端的标志,后端需要通过这个bedId去找到前端传过来的值。

image.gif 编辑

       2.选项数据:选项数据可以选择静态数据和动态数据,静态数据就是在这个页面自己配置好的数据,也就是写死的数据,我们一般不会用到静态数据,而且静态数据偏简单所以我们这里使用动态数据,动态的在后端获取数据。

image.gif 编辑

       选择完动态数据之后点击编辑数据配置动态数据项,我们在请求配置里配置好数据来源的请求地址、请求方法、返回的数据类型,然后我们就可以进行数据处理。

image.gif 编辑

       由于我是选择的级联选择器,所以我后端传过来的是一颗树状结构的数据,需要进行数据处理。

image.gif 编辑

       代码如下:

function parse(res, rule, api) {
  let arrObj = [];
  function transformData(data) {
    return data.map(item => ({
      label: item.placeName,
      value: item.id,
      children: item.children ? transformData(item.children) : null
    }));
  }
  if (res.code === 0) arrObj = transformData(res.data);
  console.log(arrObj, 'aawrawr');
  return arrObj;
}

image.gif

       这个方法是把后端传过来的树状结构进行处理,比如我后端的场所名字是placeName,但是这里就必须转换成label,把id转换成value,需要和这里的字段对应,名字就是label,值是value,子节点是children,而且这串代码还把children里面的数据也转换成label和value的形式。如下图:

image.gif 编辑

image.gif 编辑

       最后再配置一下这个选择框的名字,其余的配置项都可以根据您的需求添加,那些都是锦上添花的功能,配置完以上这些就可以成功拿到数据了,其余的功能并不影响。如果还有问题欢迎大家来一起交流。 image.gif 编辑

       最后我们点击预览看看能否拿到数据:

image.gif 编辑

image.gif 编辑

       非常成功,成功拿到数据,下面我们来看一下后端该如何接受这个字段。

/**
     * NOT_START(-1, "未开始"),
     * RUNNING(1, "审批中"),
     * APPROVE(2, "审批通过"),
     * REJECT(3, "审批不通过"),
     * CANCEL(4, "已取消"),
     * <p>
     * RETURN(5, "已退回"),
     * <p>
     * <p>
     * 使用场景:
     * 1. 任务被向后【加签】时,它在审批通过后,会变成 APPROVING 这个状态,然后等到【加签】出来的任务都被审批后,才会变成 APPROVE 审批通过
     * <p>
     * APPROVING(7,"审批通过中"),
     * <p>
     * 使用场景:
     * 1. 任务被向前【加签】时,它会变成 WAIT 状态,需要等待【加签】出来的任务被审批后,它才能继续变为 RUNNING 继续审批
     * 2. 任务被向后【加签】时,【加签】出来的任务处于 WAIT 状态,它们需要等待该任务被审批后,它们才能继续变为 RUNNING 继续审批
     * WAIT(0,"待审批");
     *
     * @param event 事件
     */
    @Override
    protected void onEvent(BpmProcessInstanceStatusEvent event) {
        DormAllocationDO oldDormAllocation = dormAllocationMapper.selectById(Long.parseLong(event.getBusinessKey()));
        if (CollUtil.isNotEmpty(event.getProcessVariables())) { // 合并前端传递的流程变量,以前端为准
//            //获取宿舍id
            if(event.getProcessVariables().containsKey("bedId")){
                List<Long> bedList = (List<Long>) event.getProcessVariables().get("bedId");
                int size = bedList.size();
                if (size >= 2) {
                    // 2. 取倒数两位
                    String bedId   = String.valueOf(bedList.get(size - 1));   // 床
                    Long roomId  = Long.valueOf(String.valueOf(bedList.get(size - 2)));   // 房
                    // 3. 分别保存
                    oldDormAllocation.setBedNum(Integer.parseInt(bedId));
                    oldDormAllocation.setDormId(roomId);
                }
            }
        }
        switch (event.getStatus()) {
            case -1://未开始
                break;
            case 0://待审批
                break;
            case 1://审批中
                break;
            case 2://审批通过
                oldDormAllocation.setStatusK1("2");
                //人脸信息传给设备
                setUserFace(oldDormAllocation.getUserId(),oldDormAllocation.getDormId());
                //抄送
                BpmTaskCopyReqVO bpmTaskCopyReqVO = new BpmTaskCopyReqVO();
                bpmTaskCopyReqVO.setId(oldDormAllocation.getProcessInstanceId());
                //查询所有岗位为宿舍管理员--7的用户id
                List<Long> dormAdministrators = adminUserMapper.ListUserIdByPost("7");
                bpmTaskCopyReqVO.setCopyUserIds(dormAdministrators);
                bpmTaskCopyReqVO.setReason("");
                bpmTaskService.copyTask(getLoginUserId(),bpmTaskCopyReqVO);
                break;
            case 3://审批不通过
                oldDormAllocation.setStatusK1("3");
                break;
            case 4://已取消
                oldDormAllocation.setStatusK1("4");
                break;
            case 5://已退回
                break;
            case 7://审批通过中
                break;
        }
        dormAllocationMapper.updateById(oldDormAllocation);
    }

image.gif

       这是我的审批通过的全部方法,我们只需要看这一段即可,其余的都是参考:

if (CollUtil.isNotEmpty(event.getProcessVariables())) { // 合并前端传递的流程变量,以前端为准
//            //获取宿舍id
            if(event.getProcessVariables().containsKey("bedId")){
                List<Long> bedList = (List<Long>) event.getProcessVariables().get("bedId");
                int size = bedList.size();
                if (size >= 2) {
                    // 2. 取倒数两位
                    String bedId   = String.valueOf(bedList.get(size - 1));   // 床
                    Long roomId  = Long.valueOf(String.valueOf(bedList.get(size - 2)));   // 房
                    // 3. 分别保存
                    oldDormAllocation.setBedNum(Integer.parseInt(bedId));
                    oldDormAllocation.setDormId(roomId);
                }
            }
        }

image.gif

       这里的bedId就是我们刚刚配置好的字段唯一id,这段代码会找这个bedId是否有值,如果有值的话就转化成一个Long类型的数组,因为是级联选择器所以传过来的包含所有的路径id,我们只需要倒数第一位(床位号),倒数第二位(宿舍号)即可,把这两条数据放入到实体类里即可,这样在审批时需要填写表单的功能就做完了。

       这个功能十分好用,工作流也是十几年的沉淀了,研究审批流、工作流是我们每一个初学者的必经之路,如果大家有什么问题欢迎加我我们一起交流,感谢您的支持。


目录
相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
7235 1
jeecgboot跨表联合查询分页查询
jeecgboot跨表联合查询分页查询
610 0
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
1659 4
|
4月前
|
XML 人工智能 Java
java实现PDF 电子签章
本文介绍了使用Java将Word文档转换为PDF并添加水印、签名和盖章的方法。通过Apache POI读取Word内容,结合OpenPDF生成PDF文件,并利用PdfPageEvent接口实现页面水印与签名功能。代码示例清晰展示了转换流程及关键实现细节。
314 0
|
3月前
|
前端开发 Java
Java实现微信公众号发送通知
Java实现微信公众号发送通知
199 0
|
7月前
|
算法 Java 数据库
软件系统授权方案设计
软件系统授权方案设计
338 60
|
SQL 前端开发 关系型数据库
芋道框架万字详解(前后端分离)、若依框架、yudao-cloud保姆级攻略
芋道框架万字详解(前后端分离)、若依框架、yudao-cloud保姆级攻略
19872 6
|
10月前
|
存储 前端开发 Java
SpringBoot整合Flowable【05】- 使用流程变量传递业务数据
本文介绍了如何使用Flowable的流程变量来管理绩效流程中的自定义数据。首先回顾了之前的简单绩效流程,指出现有流程缺乏分数输入和保存步骤。接着详细解释了流程变量的定义、分类(运行时变量和历史变量)及类型。通过具体代码示例展示了如何在绩效流程中插入全局和局部流程变量,实现各节点打分并维护分数的功能。最后总结了流程变量的使用场景及其在实际业务中的灵活性,并承诺将持续更新Flowable系列文章,帮助读者更好地理解和应用Flowable。 简要来说,本文通过实例讲解了如何利用Flowable的流程变量功能优化绩效评估流程,确保每个环节都能记录和更新分数,同时提供了全局和局部变量的对比和使用方法。
967 0
SpringBoot整合Flowable【05】- 使用流程变量传递业务数据
|
10月前
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
1348 0
SpringBoot整合Flowable【07】- 驳回节点任务
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
966 1