当前位置: 首页 > news >正文

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

♥️作者:小宋1021
🤵‍♂️个人主页:小宋1021主页
♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!!
🎈🎈加油! 加油! 加油! 加油
🎈欢迎评论 💬点赞👍🏻 收藏 📂加关注+!


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

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

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

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

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

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

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

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

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

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

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

        代码如下:

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;
}

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

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

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

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

 /*** 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 事件*/@Overrideprotected void onEvent(BpmProcessInstanceStatusEvent event) {DormAllocationDO oldDormAllocation = dormAllocationMapper.selectById(Long.parseLong(event.getBusinessKey()));if (CollUtil.isNotEmpty(event.getProcessVariables())) { // 合并前端传递的流程变量,以前端为准
//            //获取宿舍idif(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的用户idList<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);}

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

if (CollUtil.isNotEmpty(event.getProcessVariables())) { // 合并前端传递的流程变量,以前端为准
//            //获取宿舍idif(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);}}}

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

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

http://www.dtcms.com/a/338273.html

相关文章:

  • 15.web api 6
  • Unity 中控开发 多路串口服务器(一)
  • 【Goland】:数组与切片
  • 【25-cv-09352】Maradona 品牌维权,从球衣到周边全品类侵权高危
  • Jupyter 中实现交互式图表:ipywidgets 从入门到部署
  • 【数据集】全球大气监测计划(GAW)简介
  • 用户认证技术与HTTP协议
  • 基于pychrm工具的python读取 USB 摄像头(实时+保存录像+摄像头信息打印+镜像)—— OpenCV库
  • 【React Hooks】封装的艺术:如何编写高质量的 React 自-定义 Hooks
  • 【高等数学】第九章 多元函数微分法及其应用——第七节 方向导数与梯度
  • Localhost和127.0.0.1
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_数据类型表操作(定义、操作和修改)
  • 终极方案!lightRag/graphRag离线使用tiktoken持续报错SSLError,不改源码,彻底解决!
  • MySQL和HiveSQL在查询上的区别
  • 上网行为管理
  • 用户认证与应用控制技术
  • 深入浅出 SQL:数据库操作的核心语言完全指南
  • 【c++】从灵活到规范:自定义消息机制的设计与实践
  • day10(练习题)
  • Three.js 动画循环学习记录
  • 6 webUI中图生图重绘方式--涂鸦、涂鸦重绘、局部重绘、上传蒙版重绘
  • 生成式引擎优化(GEO)AI搜索优化专家竞争力报告
  • 检测手绘图中不规则曲线交点的方法和一般规则线条交点的方法
  • rom定制系列------小米cc9机型 原生安卓15系统 双版线刷root 定制修改功能项
  • 力扣(分发糖果)
  • 【完整源码+数据集+部署教程】海洋垃圾与生物识别系统源码和数据集:改进yolo11-RVB
  • 深度优先遍历dfs(模板)
  • VS Code Copilot 完整使用教程(含图解)
  • 【笔记ing】考试脑科学 脑科学中的高效记忆法
  • 图论:Floyd算法