如上是用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;
}
}
}
}
来源:CSDN
作者:随行随走
链接:https://blog.csdn.net/qq_25384901/article/details/104309271