app-xiangsonghua/app-saas-src/script/feature/historyData.js
2024-12-26 17:00:06 +08:00

633 lines
16 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function () {
var prId;
var startTime;
var endTime;
var typeIds = [];
var typeNames = [];
var ddNumber;
var interval;
var intervalDesc;
var locName;
// Add start 2018/8/23 14:00 kangzhi
// 将筛选页面传递的选中的‘选择查看类型曲线’的数据保存在 typeChartName 中
var typeChartName;
// Add end 2018/8/23 14:00 kangzhi
/**
* 根据id清空所有子元素
*/
function clearAllChildren(id) {
var tobeRemoved = $("#" + id);
tobeRemoved.empty();
}
/**
* 显示右侧边栏
*/
function showRightPanel() {
api.openDrawerPane({
type: 'right'
});
}
/**
* 弹出提示框
*/
function toast(msg) {
api.toast({
msg: msg,
duration: 5000,
locaiton: 'top'
});
}
/**
* 格式化moment对象
*/
function momentFormat(date, format) {
if (format) {
return date.format(format);
}
return date.format("YYYY-MM-DD");
}
/**
* 设置默认起止时间
* 默认开始时间为前两天零时
* 默认结束时间为前一天23:59:59
*/
function resetDefaultDateTime() {
startTime = moment().subtract(2, 'days').startOf('day');
endTime = moment().subtract(1, 'days').endOf('day');
}
/**
* 更新界面上的起止时间
*/
function updateDateTimeView() {
$("#lbStartTime").html(momentFormat(startTime));
$("#lbEndTime").html(momentFormat(endTime));
}
/**
* 界面显示完成,通知侧栏开始加载数据
*/
function viewAppear(ret, err) {
api.sendEvent({ name: "historyLoadData" });
}
/**
* 向表格中插入一行时间
*/
function addTime(time) {
time = time.slice(5);
var template = '<tr><td>{time}</td></tr>';
template = template.replace("{time}", time);
$("#timeColumn").append(template);
}
/**
* 向表格插入一类表头
*/
function addHeaderItem(headerItem) {
var templateHead = '<td colspan="{col}">{name}</td>';
templateHead = templateHead.replace("{col}", headerItem.vars.length);
templateHead = templateHead.replace("{name}", headerItem.categotyName);
$("#table-header-list").append(templateHead);
var templateTitle = '<td>{title}</td>';
var titleList = $("#table-title-list");
for (var i = 0; i < headerItem.vars.length; i++) {
var item = headerItem.vars[i];
var title = item.tagKey + (item.unit ? '(' + item.unit + ')' : '' );
titleList.append(templateTitle.replace("{title}", title ));
}
}
/**
* 检查日期是否合法
*/
function checkDate() {
//起止日期不能是未来时间
var endOfToday = moment().endOf("day");
var tmpEndTime = endTime.clone().startOf("day");
if (endOfToday.isBefore(tmpEndTime) || endOfToday.isBefore(startTime)) {
toast("起止日期不能是未来时间");
return false;
}
//结束日期不能比起始日期早
if (!endTime.isAfter(startTime)) {
toast("结束日期不能比起始日期早");
return false;
}
//天 366天 小时 30分 7天 15分钟5分钟30秒1天
//按天查询最多查询366天
if (interval >= 86400) {
//按天查询时,时间跨度不能超过一年
if (endTime.diff(startTime, 'days') > 366) {
toast("按天查询时,时间跨度不能超过一年");
return false;
}
} else if (interval >= 1800) {
//按小时及30分钟查询查询时间跨度不能超过7天
if (endTime.diff(startTime, 'days') > 7) {
toast("按小时及30分钟查询时时间跨度不能超过7天");
return false;
}
} else {
//按分钟及秒查询时时间跨度不能超过1天
if (endTime.diff(startTime, 'seconds') > 86400) {
toast("按分钟及秒查询时时间跨度不能超过1天");
return false;
}
}
return true;
}
/**
* 检查类型选择是否正确
* 类型至少选择一项
*/
function checkType() {
if (typeIds && typeIds.length > 0) {
return true;
}
toast("筛选类型必须至少选择一项");
return false;
}
/**
* 请求历史数据
*/
function queryData() {
//检查日期是否合法
if (!checkDate()) {
return;
}
//检查类型选择是否正确
if (!checkType()) {
return;
}
//显示载入动画
api.showProgress({
title: '载入中...',
text: '请稍后',
modal: false
});
//当结束时间在未来时,将结束时间替换为当前时间
var endTimeValue = endTime.valueOf();
var nowTimeValue = moment().valueOf();
var url = '/edp/rest/data/ai/history';
var args = {
prId: prId,
categoryKeys: typeIds,
ddNum: ddNumber,
startTime: startTime.valueOf(),
endTime: endTimeValue > nowTimeValue ? nowTimeValue : endTimeValue,
interval: interval,
flag: 1 // 1.查询历史
};
$api.get(url, args, function (data, err) {
//隐藏载入动画
api.hideProgress();
if (err) {
toast("网络请求失败");
} else {
if (!data.code || data.code != "200") {
toast("服务器响应错误" + (data.code ? (",错误码:" + data.code) : ""));
} else {
if (data.body && data.body.timeList && data.body.categories) {
data = data.body;
// Add start 2018/8/23 14:01 kangzhi
// 初始化 echarts 表
initechart(data);
// Add end 2018/8/23 14:01 kangzhi
//清空界面上的时间列表
clearAllChildren("timeColumn");
for (var i = 0; i < data.timeList.length; i++) {
var time = moment(data.timeList[i]).format('YYYY-MM-DD hh:mm:ss');
addTime(time);
}
//清空表头
clearAllChildren("table-header-list");
clearAllChildren("table-title-list");
$("#header-table").width(0);
for (var i = 0; i < data.categories.length; i++) {
var head = data.categories[i];
addHeaderItem(head);
}
//清空表格中的值
clearAllChildren("tbHistroyValue");
var historyValueTable = $("#tbHistroyValue");
historyValueTable.width(0);
var rowCount = data.timeList.length;
for (var i = 0; i < rowCount; i++) {
//生成第一行的数据
var row = '<tr>';
for (var j = 0; j < data.categories.length; j++) {
var type = data.categories[j];
for (var k = 0; k < type.vars.length; k++) {
var values = type.vars[k].values;
values[i] = parseFloat(values[i]);
if(isNaN(values[i])){
values[i] = '-'
}else{
values[i] = parseFloat(values[i]).toFixed(2)
}
row += "<td>";
row += values[i];
row += "</td>";
}
}
row += "</tr>";
historyValueTable.append(row);
}
setTimeout(function () {
//计算列宽
var tableTitleTds = $('#table-title-list>td');
var tableValuesTds = $('#tbHistroyValue>tr').eq(0).find('td');
var columnCounts = tableTitleTds.length;
var widthSum = 0;
for (var i = 0; i < columnCounts; i++) {
var title = $(tableTitleTds[i]);
var value = $(tableValuesTds[i]);
var titleWidth = title.width();
var valueWidth = value.width();
var width = titleWidth > valueWidth ? titleWidth : valueWidth;
width += 10;
widthSum += width;
title.width(width);
value.width(width);
}
$("#header-table").width(widthSum);
$("#tbHistroyValue").width(widthSum);
}, 100);
$('#empty-tips').hide();
$('#table-panel').show();
$('#echarts-container').show();
}else {
$('#table-panel').hide();
$('#echarts-container').hide();
$('#empty-tips').show();
}
}
}
});
}
/**
* 筛选条件发生变化
*/
function filterSelectionChanged(ret, err) {
var result = ret.value;
typeIds = result.typeIds;
interval = result.interval;
intervalDesc = result.intervalDesc;
ddNumber = result.ddNumber;
locName = result.locName;
typeNames = result.typeNames;
// Add start 2018/8/23 14:00 kangzhi
// 存储‘选择查看类型曲线’的数据
typeChartName = result.typeChartName;
// Add end 2018/8/23 14:00 kangzhi
$("#btn-location").attr("value", locName);
$("#btn-ddnumber").attr("value", (ddNumber ? ddNumber : "-"));
$("#btn-time").attr("value", intervalDesc);
//开始请求历史数据
queryData();
}
// Add start 2018/8/23 14:00 kangzhi
/**
* 初始化 echarts 表
*/
function initechart(data) {
var chart = echarts.init($('#echarts-container')[0]);
var option = {
title: {
text: '',
textStyle: {
color: '#000',
fontSize: 20,
fontWeight: '100'
},
top: '0%',
left: 'center',
bottom: '30%'
},
tooltip: {
show: true,
trigger: 'axis',
axisPointer: {
type: 'line',
axis: 'auto',
snap: true
}
},
legend: {
data:[],
left: 'center',
top: '10%'
},
xAxis: {
type: 'category',
data: []
},
yAxis: {
name: '',
type: 'value',
min: 'dataMin',
nameTextStyle: {
color: '#5a5a5a',
fontSize: 18
},
},
grid: {
left: '3%',
bottom: '0%',
height: '50%',
top: '32%',
// Add start 2018/9/29 16:31 kangzhi
containLabel: true
// Add end 2018/9/29 16:31 kangzhi
},
series: [{
data: [],
type: 'line',
smooth: true,
itemStyle: {
color: 'red'
},
lineStyle: {
color: 'red'
}
}]
};
// 先筛选出'查看类型曲线'中选中的项
var aimCategory = data.categories.filter(function (item) {
return item.categotyName === typeChartName;
});
// 修改echarts的 option中的legend选项
for (var i = 0; i < aimCategory[0].vars.length; i++) {
var legendDataStr = aimCategory[0].vars[i].tagKey;
option.legend.data.push(legendDataStr);
}
// 修改 echarts 的 option 中 title.fontSize 和 yAxis.nameTextStyle.fontSize
var fontSize = parseInt($('html').css('font-size'));
option.title.textStyle.fontSize = Math.floor(fontSize * 16 / 12);
option.yAxis.nameTextStyle.fontSize = Math.floor(fontSize * 12 / 12);
// 修改echarts的 option中的xAxis选项
var myTimeList = [];
// 格式化日期
for (var j = 0; j < data.timeList.length; j++) {
var date = new Date(data.timeList[j]);
var timeStr = '';
var month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1);
var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
timeStr = month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
myTimeList.push(timeStr);
}
option.xAxis.data = myTimeList;
// 修改echarts的 option中的yAxis选项
if (aimCategory[0].vars[0].unit) {
option.yAxis.name = '单位:' + aimCategory[0].vars[0].unit;
} else {
option.yAxis.name = '单位:无';
}
// 修改 echarts 的 options 中的 title 选项
option.title.text = typeChartName;
// 修改echarts的 option中的series选项
var seriesData = [];
// 将折现显示的颜色存储到一个数组中
var colorArr = ['#ff1918', '#fab409', '#07f5fa'];
// 循环生成series选项
for (var k = 0; k < aimCategory[0].vars.length; k++){
// 首先初始化一个series中元素的对象
var seriesNum = {
itemStyle: {
normal: {
color: '',
lineStyle: {
color: ''
}
}
},
};
// 纵坐标数据值如果是NaN将此处的数据显示成0
var arr = aimCategory[0].vars[k].values.map(function (value) {
if (value === 'NaN') {
return 0;
} else {
return value;
}
});
seriesNum.data = arr;
seriesNum.type = 'line';
seriesNum.itemStyle.normal.color = colorArr[k];
seriesNum.itemStyle.normal.lineStyle.color = colorArr[k];
seriesNum.smooth = true;
seriesNum.name = aimCategory[0].vars[k].tagKey;
seriesData.push(seriesNum);
}
option.series = seriesData;
// 使用刚指定的配置项和数据显示echarts图表
chart.setOption(option);
}
// Add end 2018/8/23 14:00 kangzhi
/**
* 侧边栏通过主界面toast提示的事件
* @param {*} ret
* @param {*} err
*/
function historyDtRemoteToast(ret, err) {
var result = ret.value;
toast(result.msg);
$('#table-panel').hide();
$('#echarts-container').hide();
$('#empty-tips').show();
}
apiready = function () {
var ctrl = {
init: {},
bind: {}
}
// 适配安卓状态栏
CommonModel.fitInStatusBar();
var searcherTop = $('#heightHeader').height();
$('#searcher').css('top',searcherTop);
ctrl.init = function () {
prId = $api.getStorage('powerRoom').prId;
ctrl.bind();
//设置默认开始时间和结束时间
resetDefaultDateTime();
updateDateTimeView();
//初始化与边栏的通信事件机制
//筛选条件发生变化
api.addEventListener({ name: 'filterSelectionChanged' }, filterSelectionChanged);
api.addEventListener({ name: 'viewappear' }, viewAppear);
api.addEventListener({ name: 'historyDtRemoteToast' }, historyDtRemoteToast);
//初始化表格容器的高度
var winHeight = api.winHeight;
var winWidth = api.winWidth;
var headerHeight = $("#header").height();
var searcherHeight = $("#searcher").height();
var tableHeight = winHeight - (headerHeight + searcherHeight);
$("#table-panel").height(tableHeight);
$("#table-panel").css("top", (headerHeight + searcherHeight) + "px");
//计算table-head-right的宽度和位置
var tableHeadLeftWidth = $("#table-head-left").width() - 1;//由于四舍五入 可能多出1像素 -1 保证没有缝隙
$("#table-head-right").width(winWidth - tableHeadLeftWidth);
$("#table-head-right").css("left", tableHeadLeftWidth + "px");
//算出table-body的高度和位置
var tableHeadHeight = $("#table-head").height();
var tableBodyHeight = tableHeight - tableHeadHeight;
$("#table-body").height(tableBodyHeight);
$("#table-body").css("top", (tableHeadHeight + 3) + "px"); //3像素的border
$("#table-body-left").height(tableBodyHeight);
$("#table-body-right").css("left", tableHeadLeftWidth + "px");
$("#table-body-right").height(tableBodyHeight);
$("#table-body-right").width(winWidth - tableHeadLeftWidth);
}
ctrl.bind = function () {
//用户点击了返回按钮
$(".back").on("touchend", function () {
api.closeWin();
});
//用户点击了位置按钮
$("#btn-location").on("touchend", function () {
showRightPanel();
});
//用户点击了调度号按钮
$("#btn-ddnumber").on("touchend", function () {
showRightPanel();
});
//用户点击了时间间隔按钮
$("#btn-time").on("touchend", function () {
showRightPanel();
});
//用户点击了筛选按钮
$("#btn-filter").on("touchend", function () {
showRightPanel();
});
//用户点击了查询按钮
$("#btn-quary").on("touchend", function () {
queryData();
});
//用户点击了开始时间
$("#divStartTime").on("touchend", function () {
api.openPicker({
type: 'date',
date: momentFormat(startTime),
title: '选择时间'
}, function (ret, err) {
if (ret) {
startTime.date(ret.day);
startTime.month(ret.month - 1);
startTime.year(ret.year);
startTime = startTime.startOf('day');
// alert(momentFormat(startTime, "YYYY-MM-DD HH:mm:ss"));
updateDateTimeView()
} else {
alert(JSON.stringify(err));
}
});
});
//用户点击了结束时间
$("#divEndTime").on("touchend", function () {
api.openPicker({
type: 'date',
date: momentFormat(endTime),
title: '选择时间'
}, function (ret, err) {
if (ret) {
endTime.date(ret.day);
endTime.month(ret.month - 1);
endTime.year(ret.year);
endTime.endOf('day');
// alert(momentFormat(endTime, "YYYY-MM-DD HH:mm:ss"));
updateDateTimeView()
} else {
alert(JSON.stringify(err));
}
});
});
//监听表的滚动事件 同步各区域滚动
$("#table-body-right").on("scroll", function () {
var top = $(this).scrollTop();
var left = $(this).scrollLeft();
$("#table-body-left").scrollTop(top);
$("#table-head-right").scrollLeft(left);
})
$("#table-body-left").on("scroll", function () {
var top = $(this).scrollTop();
$("#table-body-right").scrollTop(top);
})
$("#table-head-right").on("scroll", function () {
var left = $(this).scrollLeft();
$("#table-body-right").scrollLeft(left);
})
}
ctrl.init();
}
})()