$(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); }