基于jeecgboot-vue3的Flowable流程-流程表单显示控制

news2024/11/24 8:35:11
因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。

       这个部分主要讲流程起始表单的显示控制,因为开始的时候可以进行输入处理,在流程过程中只能只读状态,当然返回到发起人节点也可以进行编辑提交

  1、开始发起流程的时候起始表单的处理

       注意这里需要处理开始发起流程的情况与退回到发起人重新编辑两种不同的处理方式

 else if (res.result.hasOwnProperty('taskFormData')) {
              console.log("flowRecord res.result.taskFormData", res.result.taskFormData);
              taskFormData.value = res.result.taskFormData;
              console.log("flowRecord taskFormData.value", taskFormData.value);
              taskFormOpen.value = true;
              nextTick(async () => {
                taskFormBuilder.value?.setFormJson(taskFormData.value || { formConfig: {}, widgetList: [] });
                console.log("formData startUserForm.isStartUserNode",startUserForm.isStartUserNode)
                if (!startUserForm.isStartUserNode) {
                  taskFormList.value.forEach((item: any, index: any) => {
                      console.log("disableForm item",item);
                      taskFormBuilder.value[index].disableForm();
                  })
                }
              });
            }
          } 

  2、在流程过程中任务节点表单的相关代码处理如下:

这样要对是否是发起人节点做特殊处理,其它情况下只读,在第一个发起人是可以编辑的

//倒序显示,跟流程记录刚好相反
              taskFormList.value.reverse();
              taskFormVal.value.reverse();
              console.log('taskFormList=', taskFormList.value);
              console.log('taskFormVal=', taskFormVal);
              taskFormViewOpen.value = true;
              if (!(res.result.hasOwnProperty('isStartUserNode') && res.result.isStartUserNode)) {
                nextTick(() => {
                  taskFormList.value.forEach((item: any, index: any) => {
                      console.log("disableForm item",item);
                      item.formModel.widgetList.forEach((fieldItem: any, fieldIndex: any) => {
                        console.log("disableForm fieldItem",fieldItem);
                        fieldItem.options.disabled = true;
                      })
                  })
                })  
              }  

3、另外对审批任务做一个逻辑判断,增加有没有节点表单的不同处理方式

  /** 审批任务选择 */
  const handleComplete = () => {
    console.log('taskFormBuilder=', taskFormBuilder);
    const taskFormRef = taskFormBuilder.value;
    console.log('taskFormRef=', taskFormRef);
    const isExistTaskForm = taskFormRef !== null;
    // 若无任务表单,则 isExistTaskForm 为 false,即不需要校验
    if ( isExistTaskForm ) {
      taskFormRef?.validateForm(async (valid: boolean) => {
        console.log("valid",valid)
        if (valid) {
          if (isExistTaskForm) {
            //校验通过
            completeOpen.value = true;
            completeTitle.value = '审批流程';
            getTreeselect();
          }
        }  
      });
    }
    else {
      completeOpen.value = true;
      completeTitle.value = '审批流程';
      getTreeselect();
    }
    
  };

4、效果图如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1830476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring配置那些事

一、引言 配置是一个项目中不那么起眼,但却有非常重要的东西。在工程项目中,我们一般会将可修改、易变、不确定的值作为配置项,在配置文件/配置中心中设置。 比方说,不同环境有不同的数据库地址、不同的线程池大小等&#xff0c…

【NOI题解】1656. 是两位的偶数吗1658. 游乐设施1659. 是否含有数字5 1660. 今天要上课吗1661. 宇航员选拔

文章目录 一、前言二、问题问题:1656. 是两位的偶数吗问题:1658. 游乐设施问题:1659. 是否含有数字5问题:1660. 今天要上课吗问题:1661. 宇航员选拔 三、感谢 一、前言 本章节主要对关于分支结构的中需要进行逻辑运算…

OpenCV目标识别

一 图像轮廓 具有相同颜色或强度的连续点的曲线。 图像轮廓的作用 可以用于图像分析 物体的识别与检测 注意 为了检测的准确性,需要先对图像进行二值化或Canny操作。 画轮廓时会修改输入的图像。 轮廓查找的API findContours(img,mode,ApproximationMode,...)…

GUI Guider(V1.7.2) 设计UI在嵌入式系统上的应用(N32G45XVL-STB)

目录 概述 1 使用GUI Guider 设计UI 1.1 创建页面 1.2 页面切换事件实现 1.3 生成代码和仿真 1.3.1 生成和编译代码 1.3.2 仿真UI 2 GUI Guider生成的代码结构 2.1 代码结构介绍 2.2 Project目录下的文件 3 板卡上移植UI 3.1 加载代码至工程目录 3.2 主函数中调…

新旧torch中傅里叶变换实现(fft)

由泰勒级数我们知道,一个函数可以被分解成无穷个幂函数叠加的形式,于是同样地,一个周期函数也可以被分解成多个周期函数叠加,于是自然而然地,三角函数符合这个需求,由傅里叶级数我们可以将周期函数分解成无…

【车载音视频AI电脑】铁路视频监控系统解决方案

方案简介 铁路视频监控系统解决方案针对铁路行业安全运营保障需求,根据中国铁路总公司的技术规范要求,基于铁路系统的IP网络,采用先进的视频监控技术,构建一套完备的数字化、智能化、分布式铁路综合视频监控系统,实现视…

第二证券A股重要变化!今起实施

A股系列重要指数迎来样本股调整! 此前,深交所及其全资子公司深证信息发布公告,将对深证成指、创业板指、深证100(以下统称“深市中心指数”)施行样本股定时调整。此次调整于6月17日(今日)正式施…

关于电脑文件的规划思考

概述 设置C、D、E、F 四个盘 C盘:系统数据使用,操作系统、其他软件需要用到的系统性资源 D盘:应用软件区 的使用,数据库、navacat、idea、visual studio、浏览器、向日葵、虚拟机…… E盘:工作区:公司资料…

如何移植libwebsockets

libwebsockets是一个高性能的开源C语言库,专为实现WebSocket协议及相关的HTTP协议而设计。它不仅使开发者能够在客户端与服务器端轻松构建WebSocket连接,还可以用作标准HTTP服务器。WebSocket是一种在单个TCP连接上进行全双工通信的协议,可以…

APS为什么是业务、开发、数据和算法的结合体

获取更多资讯,赶快关注上面的公众号吧! 文章目录 一 引言二 业务是灵魂2.1 生产类型2.2 生产模式2.3 生产约束三 开发是支撑3.1 开发语言3.2 技术架构3.3 内存计算3.4 系统集成3.5 系统交互四 数据是基础五 算法是核心5.1 问题建模5.2 算法建模总结APS系统的实施是一个类似阶…

技术心得总结:a 标签实现新标签页打开功能

最近,有用户提出希望在点击菜单项时,能够在新标签页中打开对应的链接功能。这类似于我们常用的右键菜单中的“在新标签页打开链接”功能。经过对需求的分析和代码的查看,我们找到了实现这一功能的方法。 原始实现 最初的跳转实现是通过用户触…

three.js 基础01

1.场景创建 Scene() 2.常用形状集几何体「Geometry」[可设置长宽高等内容,如:new THREE.BoxGeometry(...)] 长方体 BoxGeometry圆柱体 CylinderGeometry 球体SphereGeometry圆锥体ConeGeometry矩形平面 PlaneGeometry 圆面体 CircleGeo…

Linux中文件查找相关命令比较

Linux中与文件定位的命令有find、locate、whereis、which,type。 一、find find命令最强,能搜索各种场景下的文件,需要配合相关参数,搜索速度慢。在文件系统中递归查找文件。 find /path/to/search -name "filename"…

人工智能发展历程了解和Tensorflow基础开发环境构建

目录 人工智能的三次浪潮 开发环境介绍 Anaconda Anaconda的下载和安装 下载说明 安装指导 模块介绍 使用Anaconda Navigator Home界面介绍 Environment界面介绍 使用Jupter Notebook 打开Jupter Notebook 配置默认目录 新建文件 两种输入模式 Conda 虚拟环境 添…

《软件测试52讲》——测试基础知识篇

1 你真的懂测试吗?从“用户登录”测试谈起 从“用户登录”测试谈起,“用户登录”功能作为测试对象 作为测试工程师,你的目标是要保证系统在各种应用场景下的功能是符合设计要求的,所以你需要考虑的测试用例就需要更多、更全面。 …

Java I/O操作

引言 在Java编程中,输入和输出(I/O)操作是必不可少的部分。Java I/O通过一系列流(Stream)类和方法,支持文件操作、控制台输入输出、网络I/O等多种I/O操作。本文将详细介绍Java I/O的基础概念、文件操作、字…

SQL注入攻击

网站是什么工作的? php写的代码电脑不认识,脚本引擎就是做翻译的,把高级代码翻译为机器语言 访问网站的地址,不同的新闻的id是不一样的,就是对应数据库的不同位置 这里面一个ip地址对应三个网站(怎么能对应…

JavaScript领域的五大AI工程利器

五大引领AI工程的JavaScript工具,为欲将LLM融入项目的开发者提供关键资源。 译自Top 5 JavaScript Tools for AI Engineering,作者 Alexander T. Williams。 传统上以在网页开发中扮演角色而闻名的JavaScript,令许多人惊讶的是,它…

CAN测试工具——BUSMASTER

文章目录 推荐理由一、菜单栏Transmit WindowDiagnostics二、Tools推荐理由 BUSMASTER是一个用于设计,监测,分析与模拟CAN网络的开源的开放式总线PC软件. 1) 可以和十几种常用CAN总线硬件兼容。比如:IXXAT、PEAK、Kvaser、CANcase XL等。 2)免费,开源 https://rbei-etas.g…

pandas获取某列最大值的所有数据

第一种方法: 按照某列进行由大到小的排序,然后再进去去重,保留第一个值,最终保留的结果就是最大值的数据 # 由大到小排序 data_frame data_frame.sort_values(bycolumn_a, ascendingFalse)# 按照column_b列去重保留第一条&#…