function InitPage() { var isMobile = GetQueryString('IsMobile'); if (isMobile == null || isMobile == undefined || isMobile == "") isMobile = 0; var handler = new HttpHandler("BP.WF.HttpHandler.WF_WorkOpt_OneWork"); handler.AddUrlData(); var data = handler.DoMethodReturnString("TimeBase_Init"); if (data.indexOf('err@') == 0) { alert(data); return; } if (data.indexOf('err@') == 0) { alert(data); return; } if (data == "[]") return; data = cceval('(' + data + ')'); //日志列表. var tracks = data["Track"]; //工作列表. var timeDay = ""; var checkStr = ""; var dotColor = -1; var idx = 1; //获得流程引擎注册表信息. var gwf = data["WF_GenerWorkFlow"][0]; //审核组件信息. var fwc = data["FrmWorkCheck"][0]; //获得工作人员列表. var gwls = data["WF_GenerWorkerlist"]; //前进的 track. 用于获取当前节点的上一个节点的track. var trackDotOfForward = null; var webUser = new WebUser(); //是否有审核组件? var isHaveCheck = false; for (var i = 0; i < tracks.length; i++) { var track = tracks[i]; // 记录审核节点。 if (track.ActionType == ActionType.WorkCheck) { isHaveCheck = true; break; } } //获得执行者. var gwf = new Entity("BP.WF.GenerWorkFlow", gwf.WorkID); var Executor = gwf.GetPara("Auth"); //输出列表. zhoupeng 2017-12-19 修改算法,所有的审核动作都依靠发送来显示. for (var i = 0; i < tracks.length; i++) { var Msg = ""; var startTime = ""; var endTime = ""; var passTime = ""; var actionType = ""; var track = tracks[i]; // if (track.FID != 0) // continue; if (track.ActionType == ActionType.FlowBBS) continue; if (track.ActionType == ActionType.WorkCheck) continue; //是否显示审批意见? var isShowCheckMsg = true; if (fwc.FWCMsgShow == "1" && track.NDFrom == GetQueryString("FK_Node") && webUser.No != track.EmpTo) { continue; } //内容. actionType = track.ActionTypeText; var at = track.ActionType; // if (at == ActionType.Return) { // doc += "

退回到:" + track.NDToT + "退回给:" + track.EmpToT + "

"; // doc += "

退回意见如下

"; // } if (at == ActionType.Forward || at == ActionType.FlowOver || at == ActionType.TeampUp) { //找到该节点,该人员的审核track, 如果没有,就输出Msg, 可能是焦点字段。 if (fwc.FWCVer == 0) { for (var myIdx = 0; myIdx < tracks.length; myIdx++) { var checkTrack = tracks[myIdx]; if (checkTrack.NDFrom == track.NDFrom && checkTrack.ActionType == ActionType.WorkCheck && checkTrack.EmpFrom == track.EmpFrom) { track.Msg = track.Msg; } } } else { var val = track.Msg.replace('null', '').split("WorkCheck@"); if (val.length == 2) track.Msg = val[1]; } } //输出备注信息. var tag = track.Tag; if (tag != null) tag = tag.replace("~", "'"); msg = track.Msg; if (msg.indexOf("WorkCheck@") != -1) { var val = track.Msg.replace('null', '').split("WorkCheck@"); if (val.length == 2) msg = val[1]; } if (msg == "0") msg = ""; if (msg != "") { var reg = new RegExp('\t\n', "g") msg = msg.replace(reg, '
'); // Msg = Msg.replace(/t\n/g, '
'); msg = msg.replace('null', ''); if (msg == "" || Msg == undefined) msg = "无"; }; //获取轨迹中上一个节点的时间 if (i == 0) { startTime = track.RDT; endTime = track.RDT; } else { //上一节点的到达时间就是本节点的开始时间 var track1 = tracks[i - 1]; startTime = track1.RDT; endTime = track.RDT; } //求得历时时间差 var sdt = startTime.replace(/\-/g, "/"); sdt = new Date(Date.parse(sdt.replace(/-/g, "/"))); var edt = endTime.replace(/\-/g, "/"); edt = new Date(Date.parse(edt.replace(/-/g, "/"))); passTime = GetSpanTime(sdt, edt); if (passTime == '') passTime = '0秒'; //输出row var newRow = ""; newRow = ""; newRow += "" + idx + ""; newRow += "" + track.NDFromT + ""; //newRow += "" + '' + ""; if (Executor != null && Executor.indexOf(track.EmpFromT) >= 0) newRow += "   已办理(" + Executor.replace("给" + track.EmpFromT, "") + ")"; else newRow += "   已办理"; newRow += "" + track.ActionTypeText + ""; newRow += "" + track.EmpFromT + ""; newRow += "" + startTime + ""; newRow += "" + endTime + ""; newRow += "" + passTime + ""; //是否是发送动作,如果是就显示打开表单按钮. var isSend = false; if (at == ActionType.Forward || at == ActionType.SubFlowForward || at == ActionType.ForwardFL) { isSend = true; } if (isSend == true && 1==2) newRow += "打开"; else newRow += ""; newRow += ""; $("tbody tr:last").after(newRow); idx++; } //增加等待审核的人员, 在所有的人员循环以后. if (gwls) { var isHaveNoChecker = false; var gwl = null; for (var i = 0; i < gwls.length; i++) { var gwl = gwls[i]; if (gwl.IsPass == 1) continue; isHaveNoChecker = true; } //如果有尚未审核的人员,就输出. if (isHaveNoChecker == true) { for (var i = 0; i < gwls.length; i++) { var html = ""; var gwl = gwls[i]; if (gwl.IsPass == 1) continue; var newRow = ""; newRow = ""; newRow += "" + idx + ""; newRow += "" + gwl.NodeName + ""; //newRow += "" + '' + ""; if (gwl.IsRead == "1") { newRow += "已阅读."; } else { newRow += "尚未阅读."; } newRow += "" + '等待审批' + ""; newRow += "" + gwl.EmpName + ""; newRow += "" + gwl.RDT + ""; newRow += ""; newRow += ""; newRow += ""; idx++; $("tbody tr:last").after(newRow); } } } //调整大小. if (window.screen) { var w = screen.availWidth; var h = screen.availHeight; window.moveTo(0, 0); window.resizeTo(w, h); } } //打开表单. function OpenFrm(myPK, nodeID,workID) { var url = "../../MyFrm.htm?WorkID=" +workID + "&FK_Flow=" + GetQueryString("FK_Flow") + "&FK_Node=" + nodeID; url += "&TrackID=" + myPK; window.open(url); // window.location.url = url; } //生成左边的icon. function GenerLeftIcon(track) { //左边的日期点. var left = "
"; left = track.RDT.substring(5, 16); left = left.replace('-', '月'); left = left.replace(' ', '日'); left = left.replace(':', '时'); left = left + "分"; left += "
"; left += "
" + track.EmpFromT + "   "; left += "
"; return left; } function GetSpanTime(date1, date2) { ///计算date2-date1的时间差,返回使用“x天x小时x分x秒”形式的字符串表示 var date3 = date2.getTime() - date1.getTime(); //时间差秒 if (date1.getTime() > date2.getTime()) date3 = date1.getTime() - date2.getTime(); var str = ''; //计算出相差天数 var days = Math.floor(date3 / (24 * 3600 * 1000)); if (days > 0) { str += days + '天'; } //计算出小时数 var leave1 = date3 % (24 * 3600 * 1000); //计算天数后剩余的毫秒数 var hours = Math.floor(leave1 / (3600 * 1000)); if (hours > 0) { str += hours + '小时'; } //计算相差分钟数 var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数 var minutes = Math.floor(leave2 / (60 * 1000)); if (minutes > 0) { str += minutes + '分'; } var leave3 = leave2 % (60 * 1000); var seconds = Math.floor(leave3 / 1000); if (seconds > 0) str += seconds + '秒'; if (date1.getTime() > date2.getTime()) return "-" + str; return str; if (seconds == NaN) return date1 + "," + date2; return str; return str; } /**Begin - Form Controls ***************/ var ActionType = { /// /// 发起 /// Start: 0, /// /// 前进(发送) /// Forward: 1, /// /// 退回 /// Return: 2, /// /// 退回并原路返回. /// ReturnAndBackWay: 201, /// /// 移交 /// Shift: 3, /// /// 撤消移交 /// UnShift: 4, /// /// 撤消发送 /// UnSend: 5, /// /// 分流前进 /// ForwardFL: 6, /// /// 合流前进 /// ForwardHL: 7, /// /// 流程正常结束 /// FlowOver: 8, /// /// 调用起子流程 /// CallChildenFlow: 9, /// /// 启动子流程 /// StartChildenFlow: 10, /// /// 子线程前进 /// SubFlowForward: 11, /// /// 取回 /// Tackback: 12, /// /// 恢复已完成的流程 /// RebackOverFlow: 13, /// /// 强制终止流程 For lijian:2012-10-24. /// FlowOverByCoercion: 14, /// /// 挂起 /// Hungup: 15, /// /// 取消挂起 /// UnHungup: 16, /// /// 强制移交 /// ShiftByCoercion: 17, /// /// 催办 /// Press: 18, /// /// 逻辑删除流程(撤销流程) /// DeleteFlowByFlag: 19, /// /// 恢复删除流程(撤销流程) /// UnDeleteFlowByFlag: 20, /// /// 抄送 /// CC: 21, /// /// 工作审核(日志) /// WorkCheck: 22, /// /// 删除子线程 /// DeleteSubThread: 23, /// /// 请求加签 /// AskforHelp: 24, /// /// 加签向下发送 /// ForwardAskfor: 25, /// /// 自动条转的方式向下发送 /// Skip: 26, /// /// 队列发送 /// Order: 27, /// /// 协作发送 /// TeampUp: 28, /// /// 流程评论 /// FlowBBS: 29, /// /// 信息 /// Info: 100 }; function ActionTypeStr(at) { switch (at) { case ActionType.Start: return "../../Img/Action/Start.png"; case ActionType.Forward: return "../../Img/Action/Forward.png"; case ActionType.Return: return "../../Img/Action/Return.png"; case ActionType.ReturnAndBackWay: return "../../Img/Action/ReturnAndBackWay.png"; case ActionType.Shift: return "../../Img/Action/Shift.png"; case ActionType.UnShift: return "../../Img/Action/UnShift.png"; case ActionType.UnSend: return "../../Img/Action/UnSend.png"; case ActionType.ForwardFL: return "../../Img/Action/ForwardFL.png"; case ActionType.ForwardHL: return "../../Img/Action/ForwardHL.png"; case ActionType.CallChildenFlow: return "../../Img/Action/CallChildenFlow.png"; case ActionType.StartChildenFlow: return "../../Img/Action/StartChildenFlow.png"; case ActionType.SubFlowForward: return "../../Img/Action/SubFlowForward.png"; case ActionType.RebackOverFlow: return "../../Img/Action/RebackOverFlow.png"; case ActionType.FlowOverByCoercion: return "../../Img/Action/FlowOverByCoercion.png"; case ActionType.Hungup: return "../../Img/Action/Hungup.png"; case ActionType.UnHungup: return "../../Img/Action/UnHungup.png"; case ActionType.ShiftByCoercion: return "../../Img/Action/ShiftByCoercion.png"; case ActionType.Press: return "../../Img/Action/Press.png"; case ActionType.DeleteFlowByFlag: return "../../Img/Action/DeleteFlowByFlag.png"; case ActionType.UnDeleteFlowByFlag: return "../../Img/Action/UnDeleteFlowByFlag.png"; case ActionType.CC: return "../../Img/Action/CC.png"; case ActionType.WorkCheck: return "../../Img/Action/WorkCheck.png"; case ActionType.AskforHelp: return "../../Img/Action/AskforHelp.png"; case ActionType.Skip: return "../../Img/Action/Skip.png"; case ActionType.Order: return "../../Img/Action/Order.png"; case ActionType.TeampUp: return "../../Img/Action/TeampUp.png"; case ActionType.FlowBBS: return "../../Img/Action/FlowBBS.png"; case ActionType.Info: return "../../Img/Action/Info.png"; default: return "../../Img/dot.png"; } }