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.

491 lines
21 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>节点时限设置</title>
<script src="../Scripts/easyUI145/jquery.min.js" type="text/javascript"></script>
<script src="../Scripts/config.js" type="text/javascript"></script>
<script src="../Comm/Gener.js" type="text/javascript"></script>
<script src="../Scripts/QueryString.js" type="text/javascript"></script>
<link href="../Scripts/layui/layui/css/layui.css" rel="stylesheet" />
<link href="../Scripts/layui/style/admin.css" rel="stylesheet" />
<script src="../Scripts/layui/layui/layui.js" type="text/javascript"></script>
<style type="text/css">
.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th, .table > colgroup + thead > tr:first-child > th {
border: 1px solid rgb(221, 221, 221);
}
.ccdate {
padding-left: 25px;
}
/*滚动条*/
::-webkit-scrollbar-thumb {
background-color: #b5b5b5;
height: 50px;
-webkit-border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background-color: #585858;
height: 50px;
-webkit-border-radius: 4px
}
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track-piece {
background-color: #fff;
-webkit-border-radius: 4px
}
</style>
<script type="text/javascript">
var currtab = GetQueryString("CurrTab");
var fk_node = GetQueryString("FK_Node");
var fk_flow = GetQueryString("FK_Flow");
var workid = GetQueryString("WorkID");
var fid = GetQueryString("FID");
var webUser = new WebUser();
var isReadOnly = GetQueryString("IsReadOnly");
isReadOnly = isReadOnly == null || isReadOnly == undefined || isReadOnly == "" ? "0" : isReadOnly;
var startNodeID = parseInt(fk_flow) + "01";
$(function () {
InitPage();
});
//初始化数据
function InitPage() {
var handler = new HttpHandler("BP.WF.HttpHandler.WF_WorkOpt");
handler.AddUrlData();
var data = handler.DoMethodReturnString("CH_Init");
if (data.indexOf("err@") == 0) {
alert(data);
return;
}
data = JSON.parse(data);
var chNodes = data["WF_CHNode"];
var gwls = data["WF_GenerWorkerList"];
var node = data.WF_CurrNode[0];
//流程时限属性
var gwf = new Entity("BP.WF.GenerWorkFlow");
gwf.CopyJSON(data.WF_GenerWorkFlow[0]);
//节点时限
var tableData = [];
//判断是否可以修改时限
var chRole = node.CHRole;
if ((chRole == 1 || chRole == 3) && isReadOnly != "1") {
$("#bottomBar").show();
$('#SaveBtn').on('click', function () {
Save();
});
}
var _Html = "";
var idx = 0;
var plantStartDt; // 计划开始时间
var sdtOfNode; //计划完成时间
var GS;
var Pro;
var limintT;
for (var i = 0; i < chNodes.length; i++) {
idx = i + 1;
var chNode = chNodes[i];
var item = {};
item.idx = idx;
//已经运行过的节点或者运行到的节点
if (chNode.AtPara != "" && chNode.AtPara != undefined) {
item.NodeName = chNode.NodeName;
item.NodeID = chNode.FK_Node;
item.EmpName = chNode.FK_EmpT;
item.StartDT = chNode.StartDT;
item.EndDT = chNode.EndDT
item.GT = chNode.GT;
item.Scale = chNode.Scale;
item.TotalScale = chNode.TotalScale;
var isPass = GetPara(chNode.AtPara, "IsPass");
if (isPass != 1) {
item.IsEdit = 1;
} else {
item.IsEdit = 0;
}
if (chNode.FK_Node == parseInt(fk_flow) + "01") { // 开始节点
item.HS = "无";
item.WFState = "正常";
} else {
//耗时
var rdt = GetPara(chNode.AtPara, "RDT");
rdt = new Date(Date.parse(rdt.replace(/-/g, "/")));
var cdt = GetPara(chNode.AtPara, "CDT");
cdt = new Date(Date.parse(cdt.replace(/-/g, "/")));
item.HS = GetSpanTime(rdt, cdt);
//状态
if (cdt <= chNode.EndDT)
item.WFState = "正常";
else
item.WFState = "逾期";
}
} else { //未运行到的节点
if (chNode.FK_Node == parseInt(fk_flow) + "01") { // 开始节点
item.NodeName = chNode.NodeName;
item.NodeID = chNode.FK_Node;
item.EmpName = webUser.Name;
item.StartDT = new Date().format("yyyy-MM-dd hh:mm");
item.EndDT = "无";
item.GT = chNode.GT;
item.Scale = chNode.Scale;
item.TotalScale = chNode.TotalScale;
item.ADT = new Date().format("yyyy-MM-dd hh:mm");
item.ComplateDT = "无";
item.HS = "无";
item.WFState = "正常";
item.IsEdit = 1;
} else {
item.NodeName = chNode.NodeName;
item.NodeID = chNode.FK_Node;
item.EmpName = "";
if (isReadOnly == "1") {
item.StartDT = chNode.StartDT;
item.EndDT = chNode.EndDT;
item.GT = chNode.GT;
item.Scale = chNode.Scale;
item.TotalScale = chNode.TotalScale;
item.IsEdit = 0;
} else {
if (chRole == 1 || chRole == 3 || isReadOnly == "0") {
item.StartDT = chNode.StartDT;
item.EndDT = chNode.EndDT;
item.GT = chNode.GT;
item.Scale = chNode.Scale;
item.TotalScale = chNode.TotalScale;
item.IsEdit = 1;
} else {
item.StartDT = chNode.StartDT;
item.EndDT = chNode.EndDT;
item.GT = chNode.GT;
item.Scale = chNode.Scale;
item.TotalScale = chNode.TotalScale;
item.IsEdit = 0;
}
}
item.ADT = "-";
item.ComplateDT = "-";
item.HS = "-";
item.WFState = "-";
}
}
tableData.push(item);
}
layui.use(['table', 'util'], function () {
var table = layui.table
, laydate = layui.laydate;
//显示节点时限的数据信息
var vtable = table.render({
elem: '#node',
id: 'node',
data: tableData,
title: '数据表',
limit: Number.MAX_VALUE,
cellMinWidth: 120,
size: 'lg',
page: false,
cols: [[
{ field: 'idx', title: '序号', minWidth: 5 }
, { field: 'NodeName', title: '节点', minWidth: 140, sort: false }
, { field: 'EmpName', title: '处理人', minWidth: 80, sort: false }
, {
field: 'StartDT', type: 'date', title: '计划开始时间', minWidth: 180,
templet: function (row) {
if (row.IsEdit == 1 && row.NodeID != startNodeID)
return '<div class="layui-input-inline"><i class="input-icon layui-icon layui-icon-date"></i><input type="text" id="' + this.field + '_' + row["NodeID"] + '" name="' + this.field + '_' + row["NodeID"] + '" class="layui-input ccdate" value="' + row[this.field] + '"></div>';
return row[this.field];
}
}
, {
field: 'EndDT', type: 'date', title: '计划完成时间', minWidth: 180,
templet: function (row) {
if (row.IsEdit == 1 && row.NodeID != startNodeID)
return '<div class="layui-input-inline"><i class="input-icon layui-icon layui-icon-date"></i><input type="text" id="' + this.field + '_' + row["NodeID"] + '" name="' + this.field + '_' + row["NodeID"] + '" class="layui-input ccdate" value="' + row[this.field] + '"></div>';
return row[this.field];
}
}
, {
field: 'GT', type: 'number', title: '工天(天)', minWidth: 80,
templet: function (row) {
if (row.IsEdit == 1 && row.NodeID != startNodeID)
return '<input type="number" name="' + this.field + '_' + row["NodeID"] + '" step="1" class="layui-input" value="' + row[this.field] + '" onchange="ChangeStyle(this)">';
return row[this.field];
}
}
, {
field: 'Scale', type: 'number', title: '阶段占比(%)', minWidth: 80,
templet: function (row) {
if (row.IsEdit == 1)
return '<input type="number" name="' + this.field + '_' + row["NodeID"] + '" step="1" class="layui-input" value="' + row[this.field] + '" onchange="ChangeStyle(this)"';
return row[this.field];
}
}
, {
field: 'TotalScale', type: 'number', title: '总体进度(%)', minWidth: 80,
templet: function (row) {
if (row.IsEdit == 1)
return '<input type="number" name="' + this.field + '_' + row["NodeID"] + '" step="1" class="layui-input layui-table-edit" value="' + row[this.field] + '" onchange="ChangeStyle(this)">';
return row[this.field];
}
}
, { field: 'ADT', title: '任务到达时间', minWidth: 160, sort: false }
, { field: 'ComplateDT', title: '实际完成时间', minWidth: 160, sort: false }
, { field: 'HS', title: '耗时', minWidth: 60 }
, { field: 'WFState', title: '状态', minWidth: 60 }
, { field: 'IsEdit', title: '是否编辑', hide: true }
]]
});
$.each($(".ccdate"), function (i, item) {
laydate.render({
elem: '#' + item.id,
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
done: function (value, date, endDate) {
var val = $(this.elem).val();
if (val != value) {
$(this.elem).css("background-color", "#5fb87852");
}
}
});
});
var flow = data.WF_Flow[0];
if (flow.SDTOfFlowRole != 0) {
$("#flow").hide();
return;
}
tableData = [];
var item = {};
item.StartDT = gwf.RDT;
if (gwf.SDTOfFlow == null || gwf.SDTOfFlow == "" || gwf.SDTOfFlow == undefined) {
item.SDTOfFlow="无";
item.SYSJ="0秒";
item.State="无";
} else {
item.SDTOfFlow =gwf.SDTOfFlow ;
var sdtofFlow = new Date(Date.parse(gwf.SDTOfFlow.replace(/-/g, "/")));
if (gwf.SDTOfFlow <= new Date().format("yyyy-MM-dd HH:mm")) {
item.SYSJ =GetSpanTime(sdtofFlow, new Date());
item.State ="逾期";
} else {
var spanTime = data.SpanTime[0].SpanTime;
item.SYSJ =spanTime;
item.State ="正常";
}
}
if (chRole == 3 && isReadOnly == "0")
item.IsHidden = 0;
else
item.IsHidden = 1;
tableData.push(item);
//显示流程时限的数据信息
var vtable = table.render({
elem: '#flow',
id: 'flow',
data: tableData,
title: '数据表',
limit: Number.MAX_VALUE,
cellMinWidth: 120,
size: 'lg',
page: false,
cols: [[
{field: 'StartDT', type: 'date', title: '开始日期', minWidth: 180}
,{field: 'SDTOfFlow', type: 'date', title: '应完成日期', minWidth: 180,}
, {field: 'SYSJ', type: 'number', title: '剩余时间', minWidth: 80,}
, {field: 'State', type: 'number', title: '状态', minWidth: 80,}
, {
field: 'IsChangeDT', title: '调整时间', minWidth: 160, templet: function (row) {
if (row.IsHidden == 0)
return '<div class="layui-input-inline"><i class="input-icon layui-icon layui-icon-date"></i><input type="text" id="GWF" name="GWF" class="layui-input ccdate" value="' + gwf.SDTOfFlow + '"></div>';
return "-";
}}
]]
});
laydate.render({
elem: '#GWF',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm',
done: function (value, date, endDate) {
var val = $(this.elem).val();
if (val != value) {
$(this.elem).css("background-color", "#5fb87852");
}
}
});
});
}
/**
* 改变背景颜色
* @param obj 元素DOM
*/
function ChangeStyle(obj) {
$(obj).css("background-color", "#5fb87852");
}
//比对时间
function CompareDate(nodeId, type) {
var startDt = $("#PlantStartDt_" + nodeId).val();
var endDt = $("#CH_" + nodeId).val();
if (startDt > endDt) {
if (type == 0) {
alert("计划开始时间不能大于计划完成时间");
$("#PlantStartDt_" + nodeId).focus();
}
else {
alert("计划完成时间不能小于计划开始时间");
$("#CH_" + nodeId).focus();
}
} else {
changeStyle(nodeId, type);
}
return;
}
//保存设置的时限
function Save() {
var handler = new HttpHandler("BP.WF.HttpHandler.WF_WorkOpt");
handler.AddFormData();
handler.AddUrlData();
var data = handler.DoMethodReturnString("CH_Save");
if (data.indexOf("err@") == 0) {
alert(data);
return;
}
alert("保存成功");
Reload();
}
//根据NodeID获取单实体
function GetEntityByNode(gwls, nodeID) {
for (var idx = 0; idx < gwls.length; idx++) {
if (gwls[idx].FK_Node == nodeID)
return gwls[idx];
}
return null;
}
//剩余多少天
function GetOverSpanTime(date1, date2) {
//获取当前日期
var currDate = new Date();
if (currDate > date2)
return "0天";
return GetSpanTime(currDate, date2);
}
function GetSpanTime(date1, date2) {
///<summary>计算date2-date1的时间差返回使用“x天x小时x分x秒”形式的字符串表示</summary>
var date3 = date2.getTime() - date1.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 + '分';
}
if (str.length == 0) {
var leave3 = leave2 % (60 * 1000);
var seconds = Math.floor(leave3 / 1000);
str += seconds + '秒';
if (seconds == NaN)
return date1 + "," + date2;
return str;
}
return str;
}
//时间格式
Date.prototype.format = function (format) {
var date = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"S+": this.getMilliseconds()
};
if (/(y+)/i.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in date) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1
? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
}
}
return format;
}
</script>
</head>
<body>
<div style="padding:12px">
<form id="cc">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-card-header">节点时限</div>
<table class="layui-table" lay-filter="node" id="node"></table>
<div class="layui-card-header">流程时限</div>
<table class="layui-table" lay-filter="flow" id="flow"></table>
</div>
<div id="bottomBar" style="display:none;margin:10px 0px 10px 10px">
<button type="button" class="layui-bar layui-btn" lay-filter='SaveBtn' id="SaveBtn">保存</button>
</div>
</div>
</form>
</div>
</body>
</html>