gojs 验证流程图连线是否完整

大城市里の小女人 提交于 2020-02-15 05:27:57

在这里插入图片描述
如上是用gojs 实现的逻辑流程图、但是为了保证流程图的完整性、需要验证是否有连线、或节点 不完整、
所以写了段js 验证、进行正推、和逆推 验证

 if(myDesigner.pdNodeIsOk() == 1 && myDesigner.pdPrentNodeIsOk() == 1 ){
 /**保存改任务设计图**/
        function addsubmitHandler() {
            var  dateType =  $("#dateType").val();
            var msg = dateType == 1?"暂存数据":"正式数据";
            $.modal.confirm("确定要提交保存吗?当前数据类型为:"+msg,function () {
                // $.modal.loading("正在数据校验中,请稍后...");
                // $.modal.disable();
                //验证设计图是否完整
                if(myDesigner.pdNodeIsOk() == 1 && myDesigner.pdPrentNodeIsOk() == 1 ){
                    saveDesigner();
                    var wfdate = $("#mySavedModel").val();
                    var package_id = $("#package option:selected").val();
                    if(package_id == null || package_id == ""){
                        $.modal.msgWarning("请先选择包名!");
                    }else {
                        if ($.validate.form() ) {
                            var config = {
                                url: prefix + "/saveDeview",
                                type: "post",
                                dataType: "json",
                                data: {"wfdate":wfdate,"packageId":package_id},
                                beforeSend: function () {
                                    $.modal.loading("正在处理中,请稍后...");
                                    $.modal.disable();
                                },
                                success: function(result) {
                                    adviewColback(result);
                                }
                            };
                            $.ajax(config)
                        }
                    }
                    function adviewColback(result) {
                        if (result.code == web_status.SUCCESS) {
                            dateTble();//刷新表格
                            getPicStepState();//刷新视图

                            dateaddFuncktion(5);
                            $.modal.msgSuccess("操作成功!");
                        } else if (result.code == web_status.WARNING) {
                            $.modal.alertWarning(result.msg)
                        }  else {
                            $.modal.alertError(result.msg);
                        }

                        $.modal.closeLoading();
                        $.modal.enable();
                    }
                }
            });
         }

js:

var rtucode = 1;
    //判断整个流程图是否完整
    this.pdNodeIsOk =  function () {
        rtucode = 1;
        var ckeypdArray = new Array();
        var nodeone = _designer.findNodeForKey(1);
        nodeone.findNodesOutOf().each(function(childreenode2){
            var ckey = childreenode2.data.key;
            //如果出现 同一节点 会多次放入 则第二次不放入处理  并且最后节点不为结束节点
            if(childreenode2.data.key != 2 && childreenode2.data.text != "新步骤"){
                console.log(nodeone.data.name+"---的子任务加入队列:"+childreenode2.data.text);
                ckeypdArray.push(ckey);
            }else{
                $.modal.alertError("当前设计图出现不满足的子任务"+childreenode2.data.text)
            }
        })
        if(ckeypdArray.length < 1){
            $.modal.alertError("当前设计图缺失子连线,或包含新步骤任务,请修改后提交!-01")
            return  0;
        }
        for(var ckey in ckeypdArray){
            console.log("-----------------------开始 -"+ckeypdArray[ckey]+"----------------------");
            cknext(ckeypdArray[ckey]);
            if(rtucode == 0){
                break;
            }
            console.log("-----------------------结束 -"+ckeypdArray[ckey]+"----------------------");
        }
        console.log("判断子线是否存在最终结果:"+rtucode);
        return rtucode;
    }

    function cknext(ckey) {
        var ckeypdArray = new Array();
        var nodeone = _designer.findNodeForKey(ckey);
        nodeone.findNodesOutOf().each(function(childreenode2){
            var ckey = childreenode2.data.key;
            //如果出现 同一节点 会多次放入 则第二次不放入处理  并且最后节点不为结束节点
            if(childreenode2.data.text == "新步骤"){
                $.modal.alertError("当前设计图缺失子连线,或包含新步骤任务,请修改后提交!-02")
                rtucode = 0;
            }else{
                console.log(nodeone.data.name+"---的子任务加入队列:"+childreenode2.data.text);
                ckeypdArray.push(ckey);
            }
        })
        if(ckeypdArray.length < 1){
            $.modal.alertError("当前设计图缺失子连线,或包含新步骤任务,请修改后提交!-03")
            rtucode = 0;
        }else if(ckeypdArray.length == 1){
            //如果只有一个子节点   且不是结束步骤 则在继续判断子节点后边的数据   否则是结束步骤  则通过
            if(ckeypdArray[0] != 2){
                cknext(ckeypdArray[0]);
            }else if(ckeypdArray[0] == 2){
               // return 1;
            }
        }else if(ckeypdArray.length > 1){
            for(var ckey in ckeypdArray){
                if(ckeypdArray[ckey] != 2){
                    cknext(ckeypdArray[ckey]);
                }
                if(rtucode == 0){
                    break;
                }
            }
        }
    }


    var rtupcode = 1;
    //判断整个流程图是否完整
    this.pdPrentNodeIsOk =  function () {
        rtupcode = 1;
        var pkeyArray = new Array();
        var pnode = _designer.findNodeForKey(2);
        pnode.findNodesInto().each(function(prentnode){
            var dckey = prentnode.data.key;
            //如果出现 同一节点 会多次放入 则第二次不放入处理  并且最后节点不为结束节点
            if(prentnode.data.key != 1 && prentnode.data.text != "新步骤"){
                console.log(pnode.data.name+"---的父任务加入队列:"+dckey);
                pkeyArray.push(dckey);
            }else{
                console.log(pnode.data.name+"---出现不满足的"+prentnode.data.text);
            }
        })
        if(pkeyArray.length < 1){
            $.modal.alertError("当前设计图缺失父连线,或包含新步骤任务,请修改后提交!-01")
            return  0;
        }
        for(var cckey in pkeyArray){
            console.log("-----------------------开始 -"+pkeyArray[cckey]+"----------------------");
            ckPrentnext(pkeyArray[cckey]);
            if(rtupcode == 0){
                break;
            }
            console.log("-----------------------结束 -"+pkeyArray[cckey]+"----------------------");
        }
        return rtupcode;
    }

    function ckPrentnext(ckey) {
        var pkeyArray = new Array();
        var pnode = _designer.findNodeForKey(ckey);
        pnode.findNodesInto().each(function(prentnode){
            var dckey = prentnode.data.key;
            //如果出现 同一节点 会多次放入 则第二次不放入处理  并且最后节点不为结束节点
            if(prentnode.data.text == "新步骤"){
                $.modal.alertError("当前设计图缺失父连线,或包含新步骤任务,请修改后提交!-02")
                rtupcode = 0;
            }else{
                console.log(pnode.data.name+"---的父任务加入队列:"+prentnode.data.text);
                pkeyArray.push(dckey);
            }
        })
        if(pkeyArray.length < 1){
            $.modal.alertError("当前设计图缺失父连线,或包含新步骤任务,请修改后提交!-03")
            rtupcode = 0;
        }else if(pkeyArray.length == 1){
            //如果只有一个子节点   且不是结束步骤 则在继续判断子节点后边的数据   否则是结束步骤  则通过
            if(pkeyArray[0] != 1){
                ckPrentnext(pkeyArray[0]);
            }else if(pkeyArray[0] == 1){
                // return 1;
            }
        }else if(pkeyArray.length > 1){
            for(var pckey in pkeyArray){
                if(pkeyArray[pckey] != 1){
                    ckPrentnext(pkeyArray[pckey]);
                }
                if(rtupcode == 0){
                    break;
                }
            }
        }
    }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!