You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
8.8 KiB
Plaintext
248 lines
8.8 KiB
Plaintext
var step = 0;
|
|
var gwf;
|
|
$(function () {
|
|
|
|
var workid = GetQueryString("WorkID");
|
|
var handler = new HttpHandler("BP.WF.HttpHandler.WF_WorkOpt_OneWork");
|
|
handler.AddPara("WorkID", workid);
|
|
var ds = handler.DoMethodReturnJSON("JobSchedule_Init");
|
|
|
|
gwf= ds["WF_GenerWorkFlow"][0]; //工作记录.
|
|
var tempNodes = ds["WF_Node"]; //节点.
|
|
var tempDirs = ds["WF_Direction"]; //连接线.
|
|
var tracks = ds["Track"]; //历史记录.
|
|
var transf = ds["WF_TransferCustom"];//游离态的节点
|
|
|
|
var nodes = {};
|
|
for (var i = 0; i < tempNodes.length; i++) {
|
|
var nodeID = tempNodes[i].NodeID;
|
|
if (!$.isArray(nodes[nodeID])) {
|
|
nodes[nodeID] = [];
|
|
}
|
|
nodes[nodeID].push(tempNodes[i]);
|
|
}
|
|
var dirs = {};
|
|
//每个节点的连线
|
|
for (var i = 0; i < tempNodes.length; i++) {
|
|
var nodeDir = [];
|
|
var nodeID = tempNodes[i].NodeID;
|
|
for (var k = 0; k < tempDirs.length; k++) {
|
|
if (tempDirs[k].Node == nodeID)
|
|
nodeDir.push({ ToNodeID: tempDirs[k].ToNode });
|
|
else
|
|
continue;
|
|
}
|
|
if (nodeDir.length == 0)
|
|
continue;
|
|
if (!$.isArray(dirs[nodeID])) {
|
|
dirs[nodeID] = [];
|
|
}
|
|
dirs[nodeID].push(nodeDir);
|
|
}
|
|
var step = 0;
|
|
//获取走过的节点, 生成唯一的节点连续字符串比如 101,102,103
|
|
var nds = "";
|
|
for (var i = 0; i < tracks.length; i++) {
|
|
var tk = tracks[i];
|
|
if (nds.indexOf(tk.FK_Node) != -1)
|
|
continue;
|
|
nds += "," + tk.FK_Node;
|
|
}
|
|
|
|
//把节点转化为数组.
|
|
var nds = nds.split(",");
|
|
|
|
for (var i = 0; i < nds.length; i++) {
|
|
var nodeID = nds[i];
|
|
if (nodeID == "")
|
|
continue;
|
|
var currTrack = getTracksByNodeID(tracks,nodeID);
|
|
if (currTrack.length != 0) {//$(".DashbCon")
|
|
$("#JobSchedule").append('<div class="alone '+ (currTrack[0].IsPass == 0?"gray":currTrack[0].IsPass ==1?"green":"red") +'"><div class="circleDot finishType"><div class="circle"><div></div>'+ (currTrack[0].NodeName?currTrack[0].NodeName:'') +'</div></div><div class="figure"></div><div class="contentCon"><p>'+ (currTrack[0].EmpName == null?'':currTrack[0].EmpName == 0?'':currTrack[0].EmpName)+'</p><p>'+ (currTrack[0].SDT == null?'':currTrack[0].SDT == 0?'':currTrack[0].SDT) +'</p></div></div>')
|
|
}
|
|
|
|
}
|
|
//流程未完成的状态, 输出没有经过的节点。
|
|
if (gwf.WFState != 3) {
|
|
|
|
//当前停留的节点.
|
|
var currNodeID = gwf.FK_Node;// $(".DashbCon")
|
|
$("#JobSchedule").append('<div class="alone gray"><div class="circleDot finishType"><div class="circle"><div></div>' + nodes[currNodeID][0].Name + '</div></div><div class="figure"></div><div class="contentCon"></div>');
|
|
//递归获取未运行到的节点
|
|
ShowNextNode_DiGui(currNodeID, dirs, transf, nodes, gwf);
|
|
|
|
}
|
|
|
|
return;
|
|
});
|
|
|
|
|
|
//根据tracks、nodeID获取当前节点的运行信息
|
|
function getTracksByNodeID(tracks,nodeID){
|
|
var curTrack=[];
|
|
for(var i =0;i<tracks.length;i++){
|
|
var tk = tracks[i];
|
|
if(tk.FK_Node != nodeID)
|
|
continue;
|
|
else
|
|
curTrack.push(tk) ;
|
|
}
|
|
return curTrack;
|
|
}
|
|
|
|
|
|
//根据当前节点获得下一个节点.
|
|
function GetNextNodeID(nodeID, dirs) {
|
|
|
|
var toNodeID = [];
|
|
var nodeDirs = dirs[nodeID];
|
|
if (nodeDirs == undefined)
|
|
return toNodeID;
|
|
for (var i = 0; i < nodeDirs.length; i++) {
|
|
|
|
toNodeID += "," + nodeDirs[i].ToNodeID;
|
|
}
|
|
toNodeID = toNodeID.substr(1,toNodeID.length);
|
|
toNodeID =toNodeID.split(",");
|
|
return toNodeID;
|
|
}
|
|
|
|
//游离态的计算
|
|
function GetNextYouLiTaiNodeID(nodeID, transfs, dirs,nodes) {
|
|
var toNodeID = [];
|
|
var isMeet = false;
|
|
//获取到他下一个自定义节点
|
|
for (var i = 0; i < transfs.length; i++) {
|
|
var transf = transfs[i];
|
|
if (transf.FK_Node == nodeID) {
|
|
isMeet = true;
|
|
continue;
|
|
|
|
}
|
|
if (isMeet == true && transf.IsEnable == true) {
|
|
toNodeID[0] = transf.FK_Node;
|
|
return toNodeID;
|
|
}
|
|
|
|
}
|
|
var currNode = nodes[nodeID][0]; //当前节点不是游离态
|
|
if (currNode.AtPara.indexOf("IsYouLiTai=0") != -1 && gwf.IsAutoRun == 0) {
|
|
for (var i = 0; i < transfs.length; i++) {
|
|
var transf = transfs[i];
|
|
if (transf.IsEnable == true && transf.FK_Node != nodeID) {
|
|
toNodeID[0] = transf.FK_Node;
|
|
return toNodeID;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
//该节点是最后一个自定义节点,下一个节点
|
|
if (isMeet == true) {
|
|
var nodeDirs = dirs[nodeID][0];
|
|
if (nodeDirs.length == 0) //流程最后一个节点
|
|
return "";
|
|
for (var i = 0; i < nodeDirs.length; i++) {
|
|
var nextNode = nodes[nodeDirs[i].ToNodeID][0];
|
|
if (nextNode.AtPara.indexOf("IsYouLiTai=1") != -1)
|
|
continue;
|
|
else {
|
|
toNodeID[0] = nodeDirs[i].ToNodeID;
|
|
gwf.IsAutoRun = 1;
|
|
return toNodeID;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
return toNodeID;
|
|
|
|
}
|
|
|
|
//根据NodeID 获取Node信息
|
|
function GetNodeByNodeID(nodes,nodeID){
|
|
for(var i =0 ;i<nodes.length;i++){
|
|
if(nodes[i].NodeID == nodeID)
|
|
return nodes[i];
|
|
}
|
|
}
|
|
var haveMsNode="";
|
|
function ShowNextNode_DiGui(currNodeID, dirs,transf,nodes,gwf){
|
|
for (var i = 0; i < 100; i++) {
|
|
var currNode = nodes[currNodeID][0];
|
|
var nextNodes = "";
|
|
if (currNode.AtPara.indexOf("IsYouLiTai=1") != -1)
|
|
nextNodes = GetNextYouLiTaiNodeID(currNodeID, transf, dirs, nodes);
|
|
else
|
|
if (gwf.AtPara.indexOf("IsAutoRun==0"))
|
|
nextNodes = GetNextYouLiTaiNodeID(currNodeID, transf, dirs, nodes);
|
|
else
|
|
nextNodes = GetNextNodeID(currNodeID, dirs);
|
|
|
|
|
|
if (nextNodes.length == 0) //最后一个节点
|
|
break;
|
|
//拼接其余节点
|
|
if(nextNodes.length==1){
|
|
haveMsNode += ","+nextNodes[0];
|
|
var node = nodes[nextNodes[0]][0];
|
|
if (node != undefined)
|
|
$(".DashbCon").append('<div class="alone gray"><div class="circleDot finishType"><div class="circle"><div></div>'+ node.Name +'</div></div><div class="figure"></div><div class="contentCon"></div>');
|
|
currNodeID = nextNodes[0];
|
|
}else {
|
|
haveMsNode += ","+nextNodes[0];
|
|
$(".DashbCon").append('<div class="multiple"><div class="figure" style="background: gray"></div><div>');
|
|
for (var idx = 0; idx < nextNodes.length; idx++) {
|
|
var node = nodes[nextNodes[idx]][0];
|
|
$(".multiple").append('<div class="daughter gray"><div class="roundDot finishType"><div class="circle"><div></div>'+ node.Name +'</div><span class="name"></span><div class="data"> </div>');
|
|
//ShowNextNode_DiGui(nextNodes[idx],dirs,nodes);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
//游离态节点的递归
|
|
function ShowNextYouLiTai_DiGui(currNodeID, transf, dirs, nodes) {
|
|
for (var i = 0; i < 100; i++) {
|
|
var currNode = nodes[currNodeID][0];
|
|
var nextNodes = "";
|
|
if(currNode.AtPara.indexOf("IsYouLiTai")!=-1)
|
|
nextNodes = GetNextYouLiTaiNodeID(currNodeID, transf, dirs, nodes);
|
|
else
|
|
nextNodes = GetNextNodeID()
|
|
|
|
if (nextNodes.length == 0) //最后一个节点
|
|
break;
|
|
//拼接其余节点
|
|
if (nextNodes.length == 1) {
|
|
haveMsNode += "," + nextNodes[0];
|
|
var node = GetNodeByNodeID(nodes, nextNodes[0]);
|
|
if (node != undefined)
|
|
$(".DashbCon").append('<div class="alone gray"><div class="circleDot finishType"><div class="circle"><div></div>' + node.Name + '</div></div><div class="figure"></div><div class="contentCon"></div>');
|
|
currNodeID = nextNodes[0];
|
|
} else {
|
|
haveMsNode += "," + nextNodes[0];
|
|
$(".DashbCon").append('<div class="multiple"><div class="figure" style="background: gray"></div><div>');
|
|
for (var idx = 0; idx < nextNodes.length; idx++) {
|
|
var node = GetNodeByNodeID(nodes, nextNodes[idx]);
|
|
$(".multiple").append('<div class="daughter gray"><div class="roundDot finishType"><div class="circle"><div></div>' + node.Name + '</div><span class="name"></span><div class="data"> </div>');
|
|
//ShowNextNode_DiGui(nextNodes[idx],dirs,nodes);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
function GetNextNodeIDExpSpecNode_del(nodeID, specToNode, dirs) {
|
|
|
|
for (var i = 0; i < dirs.length; i++) {
|
|
var dir = dirs[i];
|
|
if (dir.Node == currNode) {
|
|
|
|
if (dir.ToNode == specToNode)
|
|
return 0;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|