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

基于若依的ruoyi-nbcio流程管理系统增加仿钉钉流程设计(六)

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

gitee源代码地址

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

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

      这节主要讲条件节点与并发节点的有效性检查,主要是增加这两个节点的子节点检查,因为这两个节点需要增加审批人的子节点才能有效,否则检查通不过。

   1、首先增加一个子节点的有效性检查函数

/*** 校验子节点必填项完整性,目前主要是针对条件节点与并发节点* @param {Node} node - 节点数据*/static checkChildNode ( node, parent ) {let valid = falseif ( this.isConditionNode( node ) ) {if (!isEmpty(node.childNode)) {valid = true}}if ( this.isConcurrentNode( node ) ) {if (!isEmpty(node.childNode)) {valid = true}}return valid}

2、检查所有节点的时候也增加并发节点检查过程

/*** 判断所有节点是否信息完整* @param {Node} processData - 整个流程图数据* @returns {Boolean}*/static checkAllNode ( processData ) {let valid = trueconst loop = ( node, callback, parent ) => {!this.checkNode( node, parent ) && callback()if ( node.childNode ) loop( node.childNode, callback, parent )if ( !isEmptyArray( node.conditionNodes ) ) {node.conditionNodes.forEach( n => loop( n, callback, node ) )}if ( !isEmptyArray( node.concurrentNodes ) ) {console.log("node.concurrentNodes ", node.concurrentNodes)node.concurrentNodes.forEach( n => loop( n, callback, node ) )}}loop( processData, () => valid = false )return valid}
}

3、单个检查节点修改如下,特别是条件节点与并发节点的修改

/*** 校验单个节点必填项完整性* @param {Node} node - 节点数据*/static checkNode ( node, parent ) {// 抄送人应该可以默认自选let valid = trueconst props = node.propertiesthis.isStartNode( node )&& !props.initiator&& ( valid = false )this.isConditionNode( node )&& !props.isDefault&& !props.initiator&& isEmptyArray( props.conditions )&& !this.checkChildNode ( node, parent )&& ( valid = false )const customSettings = ['myself', 'optional', 'director']this.isApproverNode( node )&& !customSettings.includes( props.assigneeType )&& isEmptyArray( props.approvers )&& ( valid = false )return valid}

4、构造节点增加条件与并发的出错处理

/* 构造节点modify by nbacheng 2023-11-02
*/
function NodeFactory(ctx, data, h) {if (!data) returnconsole.log("NodeFactory data",data)const showErrorTip = ctx.verifyMode && NodeUtils.checkNode(data) === falseconst showChildErrorTip = ctx.verifyMode && (NodeUtils.isConditionNode(data) || NodeUtils.isConcurrentNode(data)) && NodeUtils.checkChildNode(data) === falselet res = [], branchNode = "", selfNode = null ;if (showErrorTip) { //通用节点的错误检查做特殊处理selfNode = (<div class="node-wrap"><div class={`node-wrap-box ${data.type} ${ showErrorTip ? 'error' : ''}` }><el-tooltip content="未设置条件" placement="top" effect="dark"><div class="error-tip" onClick={this.eventLancher.bind(ctx, "edit", data)}>!!!</div></el-tooltip>{nodes[data.type].call(ctx, ctx, data, h)}{addNodeButton.call(ctx, ctx, data, h)}</div></div>);} else if (showChildErrorTip) { //对并发与条件节点的错误检查做特殊处理selfNode = (<div class="node-wrap"><div class={`node-wrap-box ${data.type} ${ showChildErrorTip  ? 'error' : ''}` }><el-tooltip content="未设置审批人员节点" placement="top" effect="dark"><div class="error-tip" onClick={this.eventLancher.bind(ctx, "edit", data)}>!!!</div></el-tooltip>{nodes[data.type].call(ctx, ctx, data, h)}{addNodeButton.call(ctx, ctx, data, h)}</div></div>);} else { //正常节点的显示selfNode = (<div class="node-wrap"><div class={`node-wrap-box ${data.type} ${''}` }>{nodes[data.type].call(ctx, ctx, data, h)}{addNodeButton.call(ctx, ctx, data, h)}</div></div>);}

5、效果图如下:

http://www.lryc.cn/news/219777.html

相关文章:

  • 听GPT 讲Rust源代码--library/std(15)
  • 腾讯云CVM服务器操作系统镜像大全
  • Mxnet框架使用
  • 每个程序员都应该自己写一个的:socket包装类
  • JMeter:断言之响应断言
  • RLHF的替代算法之DPO原理解析:从Zephyr的DPO到Claude的RAILF
  • U盘显示无媒体怎么办?方法很简单
  • 进销存管理系统如何提高供应链效率?
  • 用AI魔法打败AI魔法
  • Java 中的final:不可变性的魔法之旅
  • Alfred 5 for mac(最好用的苹果mac效率软件)中文最新版
  • 常见的Python解释器,你了解多少?
  • 在 Python 中使用 Selenium 按文本查找元素
  • 【Notepad++】搜索返回窗口(find result)被隐藏或遮挡如何恢复?
  • 应用软件安全编程--05预防 XML 注入
  • JavaEE-博客系统3(功能设计)
  • 椭圆滤波器
  • Mac 下安装golang环境
  • 前端面试大纲
  • CAN(Controller Area Network)是一种用于在汽车和工业领域中进行通信的串行总线系统(附加案例)
  • 代码随想录day53|1143.最长公共子序列、 1035.不相交的线、 53. 最大子序和
  • xilinx fpga ddr mig axi
  • 《golang设计模式》第三部分·行为型模式-04-迭代器模式(Iterator)
  • python加上ffmpeg实现音频分割
  • LLM之Prompt(一):5个Prompt高效方法在文心一言3.5的测试对比
  • TreeBERT:基于树的编程语言预训练模型。
  • 生成小程序的二维码的base64码(中间logo可以自定义)
  • 【音视频 | Ogg】Ogg封装格式详解——包含Ogg封装过程、数据包(packet)、页(page)、段(segment)等
  • ubuntu 22.04 安装ros2 iron
  • PHP语言、B/S手术麻醉临床信息管理系统源码