• 基于若依的ruoyi-nbcio流程管理系统增加流程设计器支持自定义表单的选择与处理


    更多ruoyi-nbcio功能请看演示系统

    gitee源代码地址

    前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

    演示地址:RuoYi-Nbcio后台管理系统

    因为之前不支持在流程设计器进行自定义业务表单的关联选择,所以这部分实现这个。

    1、前端

    对不同应用类型做不同的处理

    1. /** 查询表单列表 */
    2. getFormList() {
    3. if(this.appType[0].id === 'OA' ) {
    4. listForm().then(response => {
    5. this.formOptions = response.rows;
    6. console.log("listForm this.formOptions=",this.formOptions);
    7. });
    8. }
    9. else if(this.appType[0].id === 'ZDYYW') {
    10. listCustomForm().then(response => {
    11. this.formOptions = response.rows;
    12. console.log("listCustomForm this.formOptions=",this.formOptions);
    13. });
    14. }
    15. },

    同时自定义业务表单类型,只能在开始节点进行选择,用户节点不能选择

    2、后端

    发布的时候增加一个自定义业务表单的关联处理

    1. if(StrUtil.equalsAnyIgnoreCase(appType, "OA")) {
    2. return deployFormService.saveInternalDeployForm(deployment.getId(), bpmnModel);
    3. } else if(StrUtil.equalsAnyIgnoreCase(appType, "ZDYYW")) {
    4. return customFormService.saveCustomDeployForm(deployment.getId(), deployment.getName(), bpmnModel);
    5. }

    具体处理实现如下:

    1. @Override
    2. @Transactional(rollbackFor = Exception.class)
    3. public boolean saveCustomDeployForm(String deployId, String deployName, BpmnModel bpmnModel) {
    4. // 获取开始节点
    5. StartEvent startEvent = ModelUtils.getStartEvent(bpmnModel);
    6. if (ObjectUtil.isNull(startEvent)) {
    7. throw new RuntimeException("开始节点不存在,请检查流程设计是否有误!");
    8. }
    9. // 更新开始节点表单信息与流程信息到自定义业务关联表
    10. WfCustomFormBo customFormBo = buildCustomForm(deployId, deployName, startEvent);
    11. if (ObjectUtil.isNotNull(customFormBo)) {
    12. updateByBo(customFormBo);
    13. return true;
    14. }
    15. return false;
    16. }
    17. /**
    18. * 构建部署表单关联信息对象
    19. * @param deployId 部署ID
    20. * @param node 节点信息
    21. * @return 部署表单关联对象。若无表单信息(formKey),则返回null
    22. */
    23. private WfCustomFormBo buildCustomForm(String deployId, String deployName, FlowNode node) {
    24. String formKey = ModelUtils.getFormKey(node);
    25. if (StringUtils.isEmpty(formKey)) {
    26. return null;
    27. }
    28. Long formId = Convert.toLong(StringUtils.substringAfter(formKey, "key_"));
    29. WfCustomFormVo customFormVo = queryById(formId);
    30. if (ObjectUtil.isNull(customFormVo)) {
    31. throw new ServiceException("表单信息查询错误");
    32. }
    33. WfCustomFormBo customFormBo = new WfCustomFormBo();
    34. customFormBo.setId(formId);
    35. customFormBo.setBusinessName(customFormVo.getBusinessName());
    36. customFormBo.setBusinessService(customFormVo.getBusinessService());
    37. customFormBo.setCreateBy(customFormBo.getCreateBy());
    38. customFormBo.setRouteName(customFormVo.getRouteName());
    39. customFormBo.setDeployId(deployId);
    40. customFormBo.setFlowName(deployName);
    41. return customFormBo;
    42. }

    3、效果图如下:

  • 相关阅读:
    分割学习(loss and Evaluation)
    探索 PrimeVue,一个基于 Vue 的 UI 组件库
    HDFS架构
    L1-018 大笨钟 C++解法
    目标检测-小目标检测方法
    在UMG中播放图像序列,出现卡帧怎么办?
    笙默考试管理系统-MyExamTest----codemirror(16)
    辅助驾驶功能开发-功能规范篇(24)-1-影子模式功能触发规范
    虚拟博物馆和纪念馆全景漫游
    个人博客系统
  • 原文地址:https://blog.csdn.net/qq_40032778/article/details/134379850