$(function() {
var scroll = {
top: false,
left: false
};
$("body .content").scroll(function() {
var position = $("#table tbody tr:first-child")
.find("td:first")
.offset();
var thd = $("#table thead tr:eq(1)")
.find("th:first-child")
.offset();
var leftside = parseFloat($(".content").css("margin-left"));
//判断是否出现纵向固定表头
if (position.left - leftside < 0 && scroll.left === false) {
scroll.left = true;
$("#left").show();
} else if (position.left - leftside >= 0 && scroll.left === true) {
scroll.left = false;
$("#left").hide();
}
if (scroll.left === true) {
$("#left").css("top", position.top);
$("#left").css("left", leftside + "px");
}
//判断是否出现横向向固定表头
if (position.top < 0 && scroll.top === false) {
scroll.top = true;
$("#top").show();
} else if (position.top >= 0 && scroll.top === true) {
scroll.top = false;
$("#top").hide();
}
if (scroll.top === true) {
$("#top").css("left", thd.left);
}
//公共区域表头处理
if (position.left - leftside < 0) {
if (position.top >= 0) {
$("#topleft").css("top", thd.top);
} else {
$("#topleft").css("top", 0);
}
if (position.left - leftside >= 0) {
$("#topleft").css("left", thd.left);
} else {
$("#topleft").css("left", leftside + "px");
}
if ($("#topleft").css("display") == "none") {
$("#topleft").show();
}
} else {
$("#topleft").hide();
}
});
$("#search").on("click", function() {
var index = vm.sketch_index;
var dateType = vm.cur_report_type;
var type = computed.sketch();
//判断是否对比时间
var qtList = [];
vm.checkDate = getInputDate();
if (type.value == "db") {
var all = computed.checked_contrast();
vm.timelist = [];
for (var i = 0; i < all.length; i++) {
var d = all[i];
if (d.value == 0) {
var year = moment(vm.checkDate.startTime).subtract(1, "year");
qtList.push(year.format("YYYY-MM-DD HH"));
vm.timelist.push(
new Date(year.format("YYYY-MM-DD HH:mm:ss")).getTime()
);
} else if (d.value == 1) {
var month = moment(vm.checkDate.startTime).subtract(1, "month");
qtList.push(month.format("YYYY-MM-DD HH"));
vm.timelist.push(
new Date(month.format("YYYY-MM-DD HH:mm:ss")).getTime()
);
} else if (d.value == 2) {
var _en = moment(vm.checkDate.endTime);
qtList.push(_en.format("YYYY-MM-DD HH"));
vm.timelist.push(
new Date(_en.format("YYYY-MM-DD HH:mm:ss")).getTime()
);
} else if (d.value == -1) {
var _st = moment(vm.checkDate.startTime);
qtList.push(_st.format("YYYY-MM-DD HH"));
vm.timelist.push(
new Date(_st.format("YYYY-MM-DD HH:mm:ss")).getTime()
);
}
}
var fm = "YYYY-MM-DD";
if (dateType.value == "month") {
fm = "YYYY-MM";
} else if (dateType.value == "year") {
fm = "YYYY";
}
if (vm.cur_report_style.value == 0) {
for (var i = 0; i < vm.timelist.length; i++) {
$("#table>tbody")
.find("tr:eq(" + i + ")")
.find("th>div")
.html(moment(vm.timelist[i]).format(fm));
}
} else {
for (var i = 0; i < vm.timelist.length; i++) {
$("#table>thead>tr:first+tr")
.find("th:eq(" + (i + 1) + ")>div")
.html(moment(vm.timelist[i]).format(fm));
}
}
}
if (dateType.value == "udf") {
//自定义报表
var intv = Math.floor(vm.report_interval * 60) * 1000 * 60;
var startTime = $("#start").val();
var endTime = $("#end").val();
var rh =
Math.abs(vm.report_s_hours) > 9
? Math.abs(vm.report_s_hours)
: "0" + Math.abs(vm.report_s_hours);
var stime = new Date(startTime + " " + rh + ":00:00").getTime();
var etime = new Date(endTime + " " + rh + ":00:00").getTime();
if (!startTime || !endTime || stime > etime) {
layer.alert(i18n1.viewJs.timewarn, {
icon: 1
});
return false;
}
var temp = stime;
vm.timelist = [];
//保存合计行
if (vm.cur_report_style.value == 0) {
var totals = $(
"#table>tbody>tr:gt(" +
($("#table>tbody>tr").length - vm.checked_total_index.length - 1) +
")"
).clone();
$("#table>tbody>tr:gt(0)").remove();
} else {
$("#table>tbody>tr>td").remove();
}
var head = $("#table thead tr:first+tr");
var firstth = head.find("th:first");
var thstyle = firstth.attr("style");
var totalth = head.find(
"th:gt(" + (head.length - vm.checked_total_index.length - 2) + ")"
);
var tr = $("#table>tbody>tr:first").clone();
var _i = 0,
ths = "",
tds = "",
fragment = document.createDocumentFragment();
while (temp < etime) {
vm.timelist.push(temp);
var r = udfChangeTable(temp, _i);
if (r) {
fragment.appendChild(r);
}
ths +=
'
' +
moment(temp).format("YYYY-MM-DD HH:mm:ss") +
" | ";
tds += " | ";
temp += intv;
_i++;
}
if (vm.cur_report_style.value == 0) {
$("#table>tbody").append(fragment);
$("#table>tbody").append(totals);
} else {
var tabletrs = $("#table tbody tr");
var totaltds =
"" +
new Array(vm.checked_total_index.length).join(" | ") +
" | ";
for (var i = 0; i < tabletrs.length; i++) {
if (i == 0) {
head.html(ths);
head.prepend(firstth);
head.append(totalth);
}
$(tabletrs[i]).append(
tds + (vm.checked_total_index.length == 0 ? "" : totaltds)
);
}
}
// $("#table").css("width", "auto");
var checkDate = {
startTime: moment(stime).format("YYYY-MM-DD HH:mm:ss"),
endTime: moment(etime).format("YYYY-MM-DD HH:mm:ss")
};
} else {
var checkDate = vm.checkDate;
}
//初始参数
var parma = {
startTime: moment(checkDate.startTime).format("YYYY-MM-DD HH"),
endTime: moment(checkDate.endTime).format("YYYY-MM-DD HH"),
timeType: "0",
timeKey: vm.report_s_day,
interval: vm.report_interval,
pointList: vm._point_data,
qtList: qtList,
dtMap: {
max: false,
min: false,
avg: false
}
};
//判断timeType
if (dateType.value == "udf") {
parma.timeType = 5;
} else if (dateType.value == "day") {
parma.timeType = type.value == "db" || type.value == "tj" ? 6 : 0;
} else if (dateType.value == "month") {
parma.timeType = type.value == "db" || type.value == "tj" ? 7 : 1;
} else if (dateType.value == "year") {
parma.timeType = type.value == "db" || type.value == "tj" ? 8 : 2;
} else if (dateType.value == "td") {
parma.timeType = 3;
} else if (dateType.value == "tm") {
parma.timeType = 4;
}
//判断是否统计时间
if (type.value == "tj") {
parma.qtList.push(moment(checkDate.startTime).format("YYYY-MM-DD HH"));
}
//判断是否有统计项
var total = computed.checked_total();
for (var i = 0; i < total.length; i++) {
var v = total[i].value;
if (v.indexOf("max") !== -1) {
parma.dtMap.max = true;
} else if (v.indexOf("min") !== -1) {
parma.dtMap.min = true;
} else if (v.indexOf("avg") !== -1) {
parma.dtMap.avg = true;
}
}
postData(parma);
});
$("#excelExport").on("click", function() {
// 卸船一队用电量统计3.xls
var tit = $.fn.zTree.getZTreeObj("tree");
var node = tit.getSelectedNodes();
var href =
"/report/fileFolder/downloadExcelTable?fileName=" +
encodeURIComponent(node[0].createOperator.substr(1));
window.top.location.href = href;
// var file = JSON.parse(res.data.fileData);
// var buffer = new Uint8Array(file);
// var blob = new Blob([buffer]);
// var fileName = res.data.fileName;
// //保存下载文件夹
// if (window.navigator.msSaveOrOpenBlob) {
// navigator.msSaveBlob(blob, fileName);
// } else {
// var elink = document.createElement("a");
// var url = createObjectURL(blob);
// elink.href = url;
// elink.download = fileName;
// document.body.appendChild(elink);
// elink.click();
// window.URL.revokeObjectURL(url);
// this.$message.success(res.message);
// }
});
$("#export").on("click", function() {
var arr = [];
var grid = 0;
var exptable = $("#table").clone();
$(exptable)
.find("td,th")
.each(function(i, e) {
if ($(e).css("display") == "none") {
$(e).remove();
}
});
if (!$(exptable).find("tr")[0]) {
return false;
}
exptable.find("tr").each(function(i, e) {
if ($(e).hasClass("udf-width")) {
return;
}
var temp = {
columnHeight: parseFloat(
$("#table")
.find("tr:eq(" + i + ")")
.height(),
10
)
};
$(e)
.children()
.each(function(index, ele) {
var $e = $(ele);
temp["data" + index] = $e.text();
temp["cols" + index] = $e.attr("colspan");
temp["rows" + index] = $e.attr("rowspan");
temp["textAlign" + index] = checkAlign($e.css("text-align"));
temp["fontNo" + index] = parseFloat($e.css("font-size"));
temp["boldweight" + index] = $e.css("font-weight");
temp["columnWidth" + index] = parseFloat($e.width(), 10);
temp["cols" + index] = isNaN(temp["cols" + index])
? 1
: temp["cols" + index];
temp["rows" + index] = isNaN(temp["rows" + index])
? 1
: temp["rows" + index];
if (arr.length == 0) {
grid += Number(temp["cols" + index]);
}
});
arr.push(temp);
});
var tit = $(".table-title");
var sub = $(".table-sub");
var hl = $(".table-head").find(".tf-l");
var hr = $(".table-head").find(".tf-r");
var fl = $(".table-foot").find(".tf-l");
var fr = $(".table-foot").find(".tf-r");
if (fl.css("display") !== "none" || fr.css("display") !== "none") {
var foot = {};
if (fl.css("display") !== "none") {
setExportObj(fl, 0, foot, 2);
}
if (fr.css("display") !== "none") {
setExportObj(fr, 2, foot, 2);
}
foot.data1 = "";
foot.cols1 = grid - 4;
foot.rows1 = 1;
arr.push(foot);
}
if (hl.css("display") !== "none" || hr.css("display") !== "none") {
var head = {};
if (hl.css("display") !== "none") {
setExportObj(hl, 0, head, 2);
}
if (hr.css("display") !== "none") {
setExportObj(hr, 2, head, 2);
}
head.data1 = "";
head.cols1 = grid - 4;
head.rows1 = 1;
arr.unshift(head);
}
if (sub.css("display") !== "none") {
var sub_obj = {};
setExportObj(sub, 0, sub_obj, grid);
arr.unshift(sub_obj);
}
if (tit.css("display") !== "none") {
var tit_obj = {};
setExportObj(tit, 0, tit_obj, grid);
tit_obj.columnWidth0 = "";
arr.unshift(tit_obj);
}
$.ajax({
url: "/report/exportExcel/exportCommDataFromClient",
data: {
exportDataMs: JSON.stringify(arr),
fileName: tit.html()
},
type: "post",
// contentType : "application/json",
dataType: "json",
success: function(res) {
var href =
"/report/exportExcel/downloadFile?fileName=" +
encodeURIComponent(res.mapData.fileName);
window.top.location.href = href;
}
});
});
$("#refresh").on("click", function() {
location.reload();
});
// console.time('table');
if (vm.table !== undefined) {
initTable();
}
// console.timeEnd('table');
$("#searchExcel").on("click", function() {
var start = $("#startExcel").val();
var end = $("#endExcel").val();
var treeCode = $(".excel-report").attr("treeCode");
if (!start) {
layer.alert(i18n1.viewJs.err);
return false;
}
if ($("#endExcel").css("display") === "none") {
end = start;
} else {
if (!end) {
layer.alert(i18n1.viewJs.err);
return false;
}
}
layer.load(1, {
shade: [0.5, "#282C34"]
});
$.ajax({
url: "/report/fileFolder/findExcelReportData",
data: {
startTime: start,
endTime: end,
treeCode: treeCode
},
type: "post",
dataType: "json",
success: function(res) {
initExcelReport(res.reportData);
layer.closeAll();
}
});
});
});
function copeTable() {
var tb = $("#table");
// var tbody=tb.find('tbody').clone();//左侧表头
var tbody = tb.find("tbody").clone(); //左侧表头
var thead = tb.find("thead").clone(); //顶部表头
var th = tb.find("thead").clone(); //公共表头
var comColspan = $("#table thead>tr:eq(1)>th:first-child").attr("colspan");
var first = tb.find("thead tr:first-child").clone(); //用于添加进左侧边头和顶部表头
first.find("td").remove(); //删除多余
//处理左侧表头
tbody.find("td").remove();
//处理隐藏列
// tbody.find('th').each(function(i,e){
// if($(e).css('display')==='none'){
// // first.find('th:eq('+i+')').css('display','none')
// // // first.find('th:eq('+i+')').remove();
// }
// });
// tbody.find('th:hidden').remove();
first.find("th:gt(" + (comColspan - 1) + ")").remove(); //删除影藏列
//统计宽度
var leftWidth = 0;
first.find("th").each(function(i, e) {
leftWidth += $(e).width();
});
//设置高度
tb.find("tbody>tr").each(function(i, e) {
$(e)
.find("th:first")
.each(function(index, element) {
var height = parseFloat($(element).css("height"));
if (!height) {
height = 27;
} else {
height++;
}
tbody
.find("tr:eq(" + i + ")>th:eq(" + index + ")")
.css("height", height + "px");
});
});
var _bgcolor_ = $(".content").css("background-color");
if (_bgcolor_ !== "rgba(0, 0, 0, 0)") {
$("#left").css("background-color", _bgcolor_);
$("#top").css("background-color", _bgcolor_);
$("#topleft").css("background-color", _bgcolor_);
}
$("#left")
.find("table")
.css("width", leftWidth + "px")
.html("" + first[0].outerHTML + "" + tbody[0].outerHTML)
.attr("class", $("#table").attr("class"));
//处理顶部表头
$("#top")
.find("table")
.html(thead)
.css("width", $("#table").css("width"));
//处理公共表头
var colspan = comColspan - 2;
th.find("tr:gt(1)").remove();
th.find("tr:eq(0)>td").remove();
// if(colspan<0){
// }else{
// th.find('tr>td:gt('+colspan+')').remove();
// }
th.find("tr:gt(0)>th:not(:first-child)").remove();
th.find("tr:gt(0)>th:first-child").css(
"height",
$("#table thead")
.find("tr:gt(0)>th:first-child")
.css("height")
);
//处理隐藏列
// tbody.find('tr:first-child>th').each(function(i,e){
// if($(e).css('display')==='none'){
// th.find('tr.udf-width>th:eq('+i+')').css('display','none')
// }
// });
th.find("tr.udf-width th:gt(" + (comColspan - 1) + ")").remove(); //删除影藏列
$("#topleft")
.find("table")
.css("width", leftWidth + "px")
.html(th);
}
function checkAlign(str) {
if (str.indexOf("center") !== -1) {
return "center";
} else if (str.indexOf("right") !== -1) {
return "right";
} else {
return "left";
}
}
function setExportObj($e, index, temp, num) {
temp["data" + index] = $e.text();
temp["textAlign" + index] = checkAlign($e.css("text-align"));
temp["fontNo" + index] = parseFloat($e.css("font-size"));
temp["boldweight" + index] = $e.css("font-weight");
temp["columnWidth" + index] = parseFloat($e.width(), 10);
temp["columnHeight"] = parseFloat($e.height(), 10);
temp["cols" + index] = num;
temp["rows" + index] = 1;
}
function initTable() {
// console.time('init');
init();
// console.timeEnd('init');
//判断如果是自定义,纵向的报表,取消宽度
$("#table").css(
"width",
vm.cur_report_type.value === "udf" && vm.cur_report_style.value == 1
? "auto"
: vm.tb_width
);
// var table=$('#table').clone();
// $('#table').find('td>div').each(function(i,e){
// var w=$(e).css('width');
// table.find('td>div:eq('+i+')').css('width',w);
// });
// $('#table').html(table.html());
}
function udfChangeTable(time, _i) {
if (vm.cur_report_style.value == 0) {
var tr = $("#table>tbody>tr:first").clone();
tr.find("th:first>div").html(moment(time).format("YYYY-MM-DD HH:mm:ss"));
var cur_tr = $("#table>tbody>tr:eq(" + _i + ")");
if (cur_tr[0]) {
$("#table>tbody>tr:eq(" + _i + ")").html(tr.html());
return "";
} else {
return tr[0];
}
}
}
/**
* @desc 根据开始时间结束时间修正时间轴
* @param {*} obj
*/
function setTimeY(obj) {
var s = new Date(obj.startTime).getTime();
var e = new Date(obj.endTime).getTime();
var type = vm.cur_report_type.value;
var t = computed.sketch();
var arr = [];
if (t.value == "tj") {
arr.push(new Date(moment(s).format("YYYY/MM/DD HH:mm:ss")).getTime());
} else if (t.value == "db") {
} else {
if (type == "month") {
var itv = 24 * 3600 * 1000;
for (var i = s; i < e; i = i + itv) {
arr.push(i);
}
} else if (type == "day") {
var itv = Math.floor(vm.report_interval * 60) * 60 * 1000;
var end =
computed.sketch().value === "cr"
? new Date(moment(s).add(8, "hours")).getTime()
: e;
for (var i = s; i < end; i = i + itv) {
arr.push(i);
}
} else if (type == "year") {
for (var i = 0; i < 12; i++) {
arr.push(
new Date(
moment(s)
.add(i, "month")
.format("YYYY/MM/DD HH:mm:ss")
).getTime()
);
}
} else if (type == "tm") {
for (var i = 0; i < 3; i++) {
arr.push(
new Date(
moment(s)
.add(i, "month")
.format("YYYY/MM/DD HH:mm:ss")
).getTime()
);
}
} else if (type == "td") {
for (var i = 0; i < 7; i++) {
arr.push(
new Date(
moment(s)
.add(i, "day")
.format("YYYY/MM/DD HH:mm:ss")
).getTime()
);
}
}
}
return arr;
}
/**
* @desc 获取和处理开始时间结束时间
*/
function getInputDate(startTime, endTime) {
var start_m = vm.report_s_month;
var start_d = vm.report_s_day;
var start_h = vm.report_s_hours;
var dateType = vm.cur_report_type;
var type = computed.sketch();
startTime = startTime || $("#start").val();
endTime = endTime || $("#end").val();
if (!startTime) {
return false;
}
if (dateType.value == "udf" || type.value == "db") {
//当报表类型为自定义或对比时,如果没有结束时间默认为开始时间
if (!endTime) {
endTime = startTime;
}
} else {
//当报表不是类型为自定义或对比时,结束时间默认为空
endTime = "";
}
var len = startTime.split("-").length;
var _tempfn = function(len) {
var arr = ["-01", "-01", " 00"],
type = ["year", "month", "day"],
str = "";
var end_flag = !endTime;
for (var l = arr.length, i = l; len <= i; i--) {
str = arr[i - 1] + str;
}
startTime = moment(startTime + str).format("YYYY-MM-DD HH:mm:ss");
//根据是否显示结束时间处理结束时间
if (end_flag) {
endTime = moment(startTime)
.add(1, type[len - 1])
.format("YYYY-MM-DD HH:mm:ss");
} else {
endTime = moment(endTime + str).format("YYYY-MM-DD HH:mm:ss");
}
};
_tempfn(len);
var _tempMonth = function() {
var days = start_d;
var daye = start_d;
if (start_d < 0) {
days = lastBmd > start_d * -1 ? -lastBmd - start_d - 1 : -1;
daye = bmd > start_d * -1 ? -bmd - start_d - 1 : -1;
} else {
days--;
daye--;
days = days > bmd ? bmd - 1 : days;
daye = daye > nextBmd ? nextBmd - 1 : daye;
}
return {
s: days,
e: daye
};
};
var obj = {},
hours = 0,
day = 0,
month = 0;
var bmd = moment(startTime).daysInMonth(); //本月天数
var lastBmd = moment(startTime)
.subtract(1, "month")
.daysInMonth(); //上月天数
var nextBmd = moment(startTime)
.add(1, "month")
.daysInMonth(); //下月天数
var _beg = moment(startTime);
var _end = moment(endTime);
switch (len) {
case 1:
month = start_m < 0 ? -(13 + start_m) : start_m;
_beg.add(start_m < 0 ? month : month - 1, "month");
_end.add(start_m < 0 ? month : month - 1, "month");
case 2:
// day=start_d<0?(-lastBmd-start_d-1):(start_d>1?(start_d-1>bmd?bmd:start_d-1):start_d);
day = _tempMonth();
case 3:
hours = start_h < 0 ? -24 - start_h : start_h;
}
if (_beg.daysInMonth() < day.s) {
day.s = _beg.daysInMonth();
}
if (_end.daysInMonth() < day.e) {
day.e = _end.daysInMonth();
}
// var t=computed.sketch();
var t = vm.cur_report_type.value;
obj.startTime = _beg
.add(day.s, "day")
.add(hours, "hours")
.format("YYYY-MM-DD HH:mm:ss");
if (t == "tm") {
obj.endTime = moment(obj.startTime)
.add(3, "month")
.format("YYYY-MM-DD HH:mm:ss");
} else if (t == "td") {
obj.endTime = moment(obj.startTime)
.add(7, "day")
.format("YYYY-MM-DD HH:mm:ss");
} else {
obj.endTime = _end
.add(day.e, "day")
.add(hours, "hours")
.format("YYYY-MM-DD HH:mm:ss");
}
return obj;
}
function init() {
$(".content").attr(
"style",
"margin:auto;" +
(userGroup.length > 1 ? "margin-left:236px;" : "width:100%;") +
computed.panel_style()
);
$("#table")
.addClass(vm.row_chang_color)
.html(vm.table);
$(".table-title")
.text(vm.tb_title.name)
.attr("style", computed.tb_title_style())
.css("width", "100%");
$(".table-sub")
.text(vm.tb_sub.name)
.attr("style", computed.tb_sub_style())
.css("width", "100%");
$(".table-head>.tf-l")
.text(vm.tb_detailed_1.name)
.attr("style", computed.tb_detailed_1_style());
$(".table-head>.tf-r")
.text(vm.tb_detailed_2.name)
.attr("style", computed.tb_detailed_2_style());
$(".table-foot>.tf-l")
.text(vm.tb_detailed_3.name)
.attr("style", computed.tb_detailed_3_style());
$(".table-foot>.tf-r")
.text(vm.tb_detailed_4.name)
.attr("style", computed.tb_detailed_4_style());
//处理时间弹框
initDatePlug(true);
//查询数据
}
function initDatePlug(trigger) {
var index = vm.sketch_index;
var dateType = vm.cur_report_type;
var type = computed.sketch();
var lay = {};
//判断时间插件类型
if (
dateType.value == "udf" ||
dateType.value == "day" ||
dateType.value == "td"
) {
lay.type = 2;
lay.format = "yyyy-mm-dd";
} else if (dateType.value == "year") {
lay.type = 4;
lay.format = "yyyy";
} else if (dateType.value == "tm" || dateType.value == "month") {
lay.type = 3;
lay.format = "yyyy-mm";
}
vm.checkDate = getInputDate(moment().format(lay.format.toLocaleUpperCase()));
vm.timelist = setTimeY(vm.checkDate);
//判断是否显示两个时间
if (dateType.value == "udf" || type.value == "db") {
var str = type.value == "db" ? i18n1.viewJs.dbtime : i18n1.viewJs.endtime;
$("#start")
.show()
.prev("span")
.html(i18n1.viewHtml.statrTime);
$("#end")
.show()
.prev("span")
.html(str)
.show();
$("#end").datetimepicker("remove");
$("#end").val(moment().format(lay.format.toUpperCase()));
$("#end")
.initdate(lay.format, lay.type)
.off("hide")
.on("hide", function(event) {
$("#end").blur();
setTimeout(function() {
$("#search").trigger("click");
}, 200);
});
} else {
$("#start")
.show()
.prev("span")
.html(i18n1.viewHtml.queryTime);
$("#end")
.hide()
.prev("span")
.hide();
}
$("#start").datetimepicker("remove");
if (dateType.value == "udf" || type.value == "db") {
$("#start").val(
moment()
.subtract(1, lay.type == 2 ? "day" : lay.type == 4 ? "year" : "month")
.format(lay.format.toUpperCase())
);
$("#end").val(moment().format(lay.format.toUpperCase()));
} else {
$("#start").val(moment().format(lay.format.toUpperCase()));
}
$("#start")
.initdate(lay.format, lay.type)
.off("hide")
.on("hide", function(event) {
changeTable(event, lay);
});
if (trigger) {
changeTable({ date: $("#start").val() }, lay, true);
}
}
function changeTable(event, lay, trigger) {
//根据开始时间结束时间修正时间轴显示
$("#start").blur();
var eventdate = $("#start").val();
var value = moment(eventdate).format(lay.format.toLocaleUpperCase());
var type = computed.sketch().value;
var rt = vm.cur_report_type.value;
if (rt == "udf" || type == "db") {
return false;
}
vm.checkDate = getInputDate(value);
vm.timelist = setTimeY(vm.checkDate);
//统计报表不需要修正表格
if (type == "tj") {
if (!trigger) {
setTimeout(function() {
$("#search").trigger("click");
}, 200);
}
return false;
}
var total_length = vm.checked_total_index.length;
var list_length = vm.timelist.length;
var tr_length = $("#table").find("tbody>tr").length;
//根据时间轴修正月报表时显示的时间
if (rt == "month") {
if (vm.cur_report_style.value == 0) {
var day = moment(vm.timelist[list_length - 1]).get("date");
var len = tr_length - total_length - 1;
var th = 0,
bool = false;
while (len >= 0) {
var tr = $("#table").find("tbody>tr:eq(" + len + ")");
th = tr
.find("th:first>div")
.html()
.split("-");
th = th[th.length - 1];
if (th == 1) {
bool = true;
}
if ((day >= th || bool) && vm.timelist[len] !== undefined) {
tr.find("th:first>div").html(
moment(vm.timelist[len]).format("YYYY-MM-DD")
);
tr.show();
} else {
tr.hide();
}
len--;
}
} else {
//计算要隐藏多少单元格
var cha = 31 - list_length;
var ll = list_length;
//循环每行
var trs = $("#table").find("tr");
for (var i = 0; i < trs.length; i++) {
var tr = $(trs[i]);
//找到统计行第一个对应的index
var tds = i !== 1 ? tr.find("td") : tr.find("th");
var len = total_length;
var length = cha;
for (var l = tds.length - 1; l >= 0; l--, len--) {
if (len > 0) {
continue;
}
var td = $(tds[l]);
var dis = td.css("display");
//判断显示单元格是否隐藏
if (length > 0) {
td.hide();
} else {
if (i == 1) {
td.find("div").html(
moment(vm.timelist[--ll]).format("YYYY-MM-DD")
);
}
td.show();
}
if (length < 0 && dis !== "none" && i !== 1) {
break;
}
length--;
}
}
}
} else if (rt == "td" || rt == "tm") {
var num = rt == "td" ? 7 : 3;
var timetype = rt == "td" ? "day" : "month";
var formattype = rt == "td" ? "YYYY-MM-DD" : "YYYY-MM";
if (vm.cur_report_style.value == 0) {
for (var i = 0; i < num; i++) {
var tr = $("#table").find("tbody>tr:eq(" + i + ")");
tr.find("th:first>div").html(
moment(value)
.add(i, timetype)
.format(formattype)
);
}
} else {
for (var i = 0; i < num; i++) {
var tr = $("#table").find("tr:eq(1)>th:eq(" + (i + 1) + ")");
tr.html(
moment(value)
.add(i, timetype)
.format(formattype)
);
}
}
} else {
var start = new Date(vm.timelist[0]);
var end = new Date(vm.timelist[list_length - 1]);
var _fmt = "HH:mm";
if (start.getFullYear() !== end.getFullYear()) {
_fmt = "YYYY-MM-DD HH:mm";
} else if (start.getMonth() !== end.getMonth()) {
_fmt = "MM-DD HH:mm";
} else if (start.getDate() !== end.getDate()) {
_fmt = "MM-DD HH:mm";
}
var formattype = rt !== "day" ? "YYYY-MM" : _fmt;
if (vm.cur_report_style.value == 0) {
for (var i = 0; i < list_length; i++) {
var tr = $("#table").find("tbody>tr:eq(" + i + ")");
tr.find("th:first>div").html(moment(vm.timelist[i]).format(formattype));
}
} else {
for (var i = 0; i < list_length; i++) {
var tr = $("#table").find("tr:eq(1)>th:eq(" + (i + 1) + ")");
tr.html(moment(vm.timelist[i]).format(formattype));
}
}
}
if (!trigger) {
setTimeout(function() {
$("#search").trigger("click");
}, 200);
}
}
/**
* @请求参数说明
* startTime
* endTime
* timeType:报表类型
* interval:时间间隔
* pointList:点信息
* qtList:对比时间列表
* @param {*} parma
*/
function postData(parma) {
var layid = layer.load(1, {
shade: [0.5, "#282C34"]
});
var url = [
"/report/monitorBusiness/findProfitMSByParam",
"/report/reportTable/queryCommonEnergyData"
];
$.ajax({
url: computed.sketch().value == "sy" ? url[0] : url[1],
data: JSON.stringify(parma),
contentType: "application/json",
type: "post",
dataType: "json",
success: function(res) {
var obj = res.mapData;
if (computed.sketch().value === "sy") {
if (typeof res.rows !== "object" || !res.rows.length) {
layer.alert(i18n1.viewJs.err);
return false;
}
} else {
if (typeof obj !== "object") {
layer.alert(i18n1.viewJs.err);
return false;
}
}
var arr = (obj.accumulateDataList || [])
.concat(obj.analogDataList || [])
.concat(obj.mixDataList || []);
var yxarr = obj.digitalDataList;
if (computed.sketch().value === "sy") {
arr = res.rows;
}
for (var i = 0, point = {}; i < arr.length; i++) {
var d = arr[i],
_e = vm._point_obj[d.sname].e || 1;
for (var _k in d) {
if (typeof d[_k] === "number") {
d[_k] = d[_k] * _e;
}
}
if (point[d.time] === undefined) {
point[d.time] = {};
}
if (point[d.time][d.sname] === undefined) {
point[d.time][d.sname] = d;
} else {
point[d.time][d.sname].typeList = point[d.time][
d.sname
].typeList.concat(d.typeList);
assignObj(point[d.time][d.sname], d);
}
}
//处理遥信数据
for (var i = 0; i < (!yxarr ? 0 : yxarr.length); i++) {
var d = yxarr[i],
_e = vm._point_obj[d.sname].e || 1;
for (var _k in d) {
if (typeof d[_k] === "number") {
d[_k] = d[_k] * _e;
}
}
if (point[d.time] === undefined) {
point[d.time] = {};
}
if (point[d.time][d.sname] === undefined) {
// point[d.time][d.sname] = d;
point[d.time][d.sname] = { yx: {} };
}
if (point[d.time][d.sname].yx[d.data] === undefined) {
point[d.time][d.sname].yx[d.data] = d;
} else {
point[d.time][d.sname].yx[d.data].typeList = point[d.time][
d.sname
].yx[d.data].typeList.concat(d.typeList);
assignObj(point[d.time][d.sname].yx[d.data], d);
}
}
if (computed.sketch().value == "tj") {
creatTJTable(point);
} else {
if (vm.cur_report_style.value == 0) {
creatColTable(point);
} else {
//处理测点信息,拆分typeList,每个属性一个对象
for (
var i = 0, pointArr = [], _obj = {};
i < vm._point_data.length;
i++
) {
var d = Object.assign({}, vm._point_data[i]);
if (d.typeList.length > 0) {
for (var n = 0; n < d.typeList.length; n++) {
var ind = n;
var obj = {
measurType: d.measurType,
sname: d.sname,
typeList: [d.typeList[ind]]
};
if (_obj[d.sname + "" + d.typeList[ind]] === undefined) {
_obj[d.sname + "" + d.typeList[ind]] = obj;
pointArr.push(obj);
}
}
}
}
creatRowTable(point, pointArr);
}
}
setTimeout(function() {
copeTable();
}, 200);
},
complete: function() {
layer.close(layid);
}
});
}
function creatTJTable(point) {
var data = vm._point_data;
var crsv = vm.cur_report_style.value;
var dev = crsv == 0 ? vm.dev_map : vm.tjArr;
var prop = crsv == 0 ? vm.tjArr : vm.dev_map;
var reporttime = moment(vm.timelist[0]).format("YYYY-MM-DD HH:mm:ss");
var table = $("#table>tbody");
var line = 0;
for (var i = 0; i < prop.length; i++) {
var row = 0;
for (var k = 0; k < dev.length; k++) {
var obj =
point[reporttime][
crsv == 0
? dev[k].code + "." + prop[i].sname
: prop[i].code + "." + dev[k].sname
];
var len = crsv == 0 ? prop[i].typeList : dev[k].typeList;
for (var l = 0; l < len.length; l++) {
var pkey = len[l].split("@@");
if (crsv == 0) {
var trl = line + l;
var tdl = k;
} else {
var trl = line;
var tdl = row + l;
}
var _r =
pkey[1] === undefined
? obj[vm.codekey[pkey[0]]]
: obj.yx[pkey[1]][vm.codekey[pkey[0]]];
if (_r === undefined || _r === "" || _r === null) {
_r = "";
} else if (!isNaN(_r)) {
_r = decimalDigits(_r);
}
if (
table.find("tr:eq(" + trl + ")>td:eq(" + tdl + ")").text() !== "\\"
) {
table
.find("tr:eq(" + trl + ")>td:eq(" + tdl + ")")
.find("div")
.html(obj.numStatus === "true" && _r < 0 ? "-" : _r);
}
}
if (crsv != 0) {
row += len.length;
} else {
row++;
}
}
if (crsv == 0) {
line += len.length;
} else {
line++;
}
}
}
function creatRowTable(point, pointList) {
var ot = {
max: {},
maxTime: {},
min: {},
minTime: {},
avg: {},
sum: {}
};
var tot = computed.checked_total();
//纵向报表
var zxbb = function(
el,
row_id,
col_id,
timeKey,
snameKey,
propindex,
propKey
) {
if (timeKey !== undefined) {
var pkey = propindex.split("@@");
var obj =
point[moment(timeKey).format("YYYY-MM-DD HH:mm:ss")][snameKey] || {};
if (pkey[1] !== undefined) {
obj = obj.yx[pkey[1]];
}
var v = obj[propKey];
v = obj.numStatus === "true" && v < 0 ? "" : v;
if (propindex == "yc_0") {
changeData(ot, obj);
}
if (v !== 0 && !v) {
v = "";
} else {
v = isNaN(v) ? v : decimalDigits(v);
}
if ($(el).text() !== "\\") {
if (obj.numStatus === "true" && obj[propKey] < 0) {
$(el)
.find("div")
.html("-");
} else {
$(el)
.find("div")
.html(v);
if (ot.sum[snameKey] === undefined) {
ot.sum[snameKey] = {};
}
if (ot.sum[snameKey][propindex] === undefined) {
ot.sum[snameKey][propindex] = [v || ""];
} else {
ot.sum[snameKey][propindex].push(v || "");
}
}
}
} else {
var ind = col_id - vm.timelist.length;
var key = tot[ind].value;
var v = ot[key][snameKey];
if ($(el).text() == "\\") {
return;
}
if (v !== undefined) {
if (key == "avg") {
v = sum(ot[key][snameKey]);
if (!v) {
v =
sum(ot.sum[snameKey][propindex]) /
ot.sum[snameKey][propindex].length;
} else {
v = v / ot[key][snameKey].length;
}
} else if(key == "sum"){
v = sum(ot[key][snameKey][propindex]);
}
} else {
v = "";
}
if (propindex != "yc_0" && key != "sum") {
v = "";
}
if (v !== 0 && !v) {
v = "";
} else {
v = isNaN(v) ? v : decimalDigits(v);
}
$(el).html(v);
}
};
// 横向报表
var hxbb = function(
el,
row_id,
col_id,
timeKey,
snameKey,
propindex,
propKey
) {};
var lastPoint = [0, 0],
del = 0;
$("#table")
.find("tbody td")
.each(function(index, el) {
var row_id = $(el)
.parent()
.index();
var col_id = $(el).index();
if ($(el).css("display") == "none") {
del++;
return;
}
//记录每行的第一个坐标,用于方便记录后面td的下标。
if (index == 0 || lastPoint[0] != row_id) {
lastPoint[0] = row_id;
lastPoint[1] = col_id;
del = 0;
}
col_id = col_id - lastPoint[1] - del;
var timeKey = vm.timelist[col_id]; //时间key
var snameKey = pointList[row_id].sname;
var propindex = pointList[row_id].typeList[0];
var propKey =
vm.codekey[
propindex.indexOf("@@") == -1
? propindex
: propindex.substring(0, propindex.indexOf("@@"))
];
if (vm.cur_report_style.value == 0) {
hxbb(el, row_id, col_id, timeKey, snameKey, propindex, propKey);
} else {
zxbb(el, row_id, col_id, timeKey, snameKey, propindex, propKey);
}
});
}
function creatColTable(point) {
var ot = {
max: {},
maxTime: {},
min: {},
minTime: {},
avg: {},
sum: {}
};
var tot = computed.checked_total();
var del_length = 0;
var total_length = vm.checked_total_index.length;
var list_length = vm.timelist.length;
var table = $("#table").clone();
var tr_length = table.find("tbody>tr").length;
table.find("tbody>tr").each(function(index, el) {
var td_index = 0;
var tds = $(el).find("td");
//删除行
if (index >= list_length && index < tr_length - total_length) {
// $(el).remove();
del_length++;
return;
}
var rowtime = moment(vm.timelist[index]);
if (vm.timelist[index] === undefined) {
var ttl_len = index - list_length - del_length;
//设置统计项
var key = tot[ttl_len].value;
for (var i = 0; i < vm._point_cols.length; i++) {
var len = vm._point_cols[i].typeList.length;
var v = ot[key][vm._point_cols[i].sname];
var avg_flag;
if (key == "avg") {
if (!sum(v)) {
avg_flag = true;
v = ot.sum[vm._point_cols[i].sname];
} else {
avg_flag = false;
}
}
if (key == "sum" || avg_flag) {
for (var ii in v) {
var _v = sum(v[ii]);
if (key == "avg") {
_v = _v / v[ii].length;
}
if (_v !== 0 && !_v) {
_v = "";
} else {
_v = isNaN(_v) ? _v : decimalDigits(_v);
}
if ($(tds[td_index]).text() !== "\\") {
$(tds[td_index]).html(_v);
}
td_index++;
}
if (Object.keys(v).length == 0) {
if ($(tds[td_index]).text() !== "\\") {
$(tds[td_index]).html("");
}
td_index++;
}
} else {
if (key == "avg") {
v = sum(v) / v.length;
}
if (v !== 0 && !v) {
v = "";
} else {
v = isNaN(v) ? v : decimalDigits(v);
}
var cl = $(tds[td_index]).attr("colspan");
if (!cl) {
cl = 0;
}
// $(tds[td_index]).attr('colspan', len).html(v);
var $el = $(tds[td_index]);
if ($el.text() !== "\\") {
$(tds[td_index]).html(v);
}
// $(tds[td_index]).find('div').html(v);
// while ((len - cl) > 1) {
// // $(tds[td_index]).next('td').remove();
// len--;
// // td_index++;
// }
td_index += len;
}
}
} else {
var t = rowtime.format("YYYY-MM-DD HH:mm:ss");
for (var i = 0; i < vm._point_cols.length; i++) {
var d = vm._point_cols[i];
var sname = d.sname;
if (d.measurType === "fml") {
var sarr = sname.match(/\[[^\]]+(?=\])/g);
for (var _i = 0, _sn = sname, ft = 0; _i < sarr.length; _i++) {
var _code = sarr[_i].substring(1);
var data =
point[t][_code].instantData === undefined
? point[t][_code].endData
: point[t][_code].instantData;
if (isNaN(data) || data === "") {
ft++;
}
data = Number(data);
_sn = _sn.replace("[" + _code + "]", "(" + data + ")");
}
try {
var v = eval(_sn);
} catch (err) {
layer.alert(i18n1.viewJs.calerr);
v = "!";
}
if (ft == _i) {
v = "";
} else {
v = isNaN(v) ? v : decimalDigits(v);
}
if (ot.sum[sname] === undefined) {
ot.sum[sname] = {};
}
if (ot.sum[sname][0] === undefined) {
ot.sum[sname][0] = [v || ""];
} else {
ot.sum[sname][0].push(v || "");
}
$(tds[td_index]).html(v);
td_index++;
continue;
} else {
var data = point[t] && point[t][sname];
}
if (data === undefined) {
data = {};
}
//统计值
changeData(ot, data);
//设置值
for (var k = 0; k < d.typeList.length; k++) {
var sub_index = d.typeList[k].split("@@");
var key = vm.codekey[sub_index[0]];
var ndata = sub_index[1] === undefined ? data : data.yx[sub_index[1]];
var v = ndata[key];
v = ndata.numStatus === "true" && v < 0 ? "" : v;
if (ot.sum[sname] === undefined) {
ot.sum[sname] = {};
}
if (
$(tds[td_index]).text() !== "\\"
) {
if (v !== 0 && !v) {
v = "";
} else {
v = isNaN(v) ? v : decimalDigits(v);
}
if (ndata.numStatus === "true" && ndata[key] < 0) {
$(tds[td_index])
.find("div")
.html("-");
} else {
$(tds[td_index])
.find("div")
.html(v);
if (
!(computed.sketch().value == "sy" && d.typeList[k] == "yc_0")
) {
if (ot.sum[sname][d.typeList[k]] === undefined) {
ot.sum[sname][d.typeList[k]] = [];
}
if (v !== "" && v !== undefined && v !== null) {
ot.sum[sname][d.typeList[k]].push(v);
}
} else {
ot.sum[sname][d.typeList[k]] = [];
}
}
}
td_index++;
}
}
}
});
$("#table").html(table.html());
}
function changeData(ot, obj) {
if (obj === undefined) {
return;
}
var sname = obj.sname;
if (
obj.maxData !== "" &&
(ot.max[sname] === undefined || obj.maxData > ot.max[sname])
) {
ot.max[sname] = obj.maxData;
ot.maxTime[sname] = obj.maxDataTime;
}
if (
obj.minData !== "" &&
(ot.min[sname] === undefined || obj.minData < ot.min[sname])
) {
ot.min[sname] = obj.minData;
ot.minTime[sname] = obj.minDataTime;
}
if (ot.avg[sname] === undefined) {
ot.avg[sname] = [];
}
if (
obj.averageData !== "" &&
obj.averageData !== undefined &&
obj.averageData !== null
) {
ot.avg[sname].push(obj.averageData);
}
}
function assignObj() {
var arr = arguments;
var obj = arr[0] || {};
for (var i = 1; i < arr.length; i++) {
for (var k in arr[i]) {
if (!!arr[i][k] && !arr[0][k]) {
arr[0][k] = arr[i][k];
}
}
}
return obj;
}
function sum(arr) {
if (!(arr instanceof Array)) {
arr = [];
}
return arr.reduce(function(o, v, i) {
if (!v || isNaN(v) || v < 0) {
v = 0;
}
return o + Number(v);
}, 0);
}