323 lines
8.8 KiB
JavaScript
323 lines
8.8 KiB
JavaScript
|
var analog_diag_body = $('#analog_diag_body');
|
|||
|
var analog_diag = $('#analog_diag');
|
|||
|
var filter_table = $('#filter_table');
|
|||
|
var axis_table = $('#axis_table');
|
|||
|
|
|||
|
var aply_filter = $('#aply_filter');
|
|||
|
var change_filter = $('#change_filter');
|
|||
|
|
|||
|
var aply_axis = $('#aply_axis');
|
|||
|
|
|||
|
var data_analog = null;
|
|||
|
var data_analog_params = null;
|
|||
|
var data_metrics = null;
|
|||
|
|
|||
|
|
|||
|
function ValueDateFormatter(e) {
|
|||
|
var hours = 1000 * 60 * 60;
|
|||
|
if (e.trigger === "reset") {
|
|||
|
e.chart.options.axisX.valueFormatString = "MM.DD HH";
|
|||
|
}
|
|||
|
else if (e.trigger === "zoom") {
|
|||
|
//Hour (Comparing Hours)
|
|||
|
if ((((e.axisX[0].viewportMaximum - e.axisX[0].viewportMinimum) / (hours)) < 24)) {
|
|||
|
e.chart.options.axisX.valueFormatString = "HH:mm:ss";
|
|||
|
}
|
|||
|
//Day (Comparing Days)
|
|||
|
else if (((e.axisX.viewportMaximum - e.axisX.viewportMinimum) / (hours)) < 48) {
|
|||
|
e.chart.options.axisX.valueFormatString = "HH:mm";
|
|||
|
}
|
|||
|
//Year (Comparing Years)
|
|||
|
else if (((e.axisX[0].viewportMaximum - e.axisX[0].viewportMinimum) / (hours * 24)) < 2) {
|
|||
|
e.chart.options.axisX.valueFormatString = "MM.DD HH";
|
|||
|
}
|
|||
|
else {
|
|||
|
e.chart.options.axisX.valueFormatString = "MM.DD";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
var a_chart = new CanvasJS.Chart("analog_diag", {
|
|||
|
toolTip: {
|
|||
|
fontSize: 12,
|
|||
|
shared: true,
|
|||
|
contentFormatter: function (e) {
|
|||
|
var str = "";
|
|||
|
if (e.entries.length < 1)
|
|||
|
return str;
|
|||
|
var lastdate = e.entries[0].dataPoint.x;
|
|||
|
var data = e.chart._dataInRenderedOrder;
|
|||
|
for (var i = 0; i < data.length; i++) {
|
|||
|
var y = null;
|
|||
|
|
|||
|
for (var j = 0; j < data[i].dataPoints.length; j++) {
|
|||
|
var t = data[i].dataPoints[j].x - lastdate;
|
|||
|
if (t <= 0)
|
|||
|
y = data[i].dataPoints[j].y;
|
|||
|
else
|
|||
|
break;
|
|||
|
t = data[i].dataPoints[(data[i].dataPoints.length - 1) - j].x - lastdate;
|
|||
|
if (t <= 0) {
|
|||
|
y = data[i].dataPoints[(data[i].dataPoints.length - 1) - j].y;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
var temp =
|
|||
|
data[i].name + ': <strong style="color:' +
|
|||
|
data[i].color + ';">' +
|
|||
|
y + ' </strong>' + data[i].axisY.suffix + "<br/>";
|
|||
|
str = str.concat(temp);
|
|||
|
}
|
|||
|
return (str);
|
|||
|
}
|
|||
|
},
|
|||
|
animationEnabled: true,
|
|||
|
animationDuration: 1000,
|
|||
|
exportFileName: "Analog Signals",
|
|||
|
exportEnabled: true,
|
|||
|
zoomEnabled: true,
|
|||
|
theme: "light1",
|
|||
|
backgroundColor: "#FFFFFF",
|
|||
|
colorSet: "colorSet1",
|
|||
|
culture: "ru",
|
|||
|
title: {},
|
|||
|
legend: {},
|
|||
|
|
|||
|
rangeChanging: ValueDateFormatter,
|
|||
|
axisX: {
|
|||
|
labelFontSize: 12,
|
|||
|
margin: 1,
|
|||
|
tickLength: 3,
|
|||
|
tickThickness: 1,
|
|||
|
lineThickness: 1,
|
|||
|
gridThickness: 0.3,
|
|||
|
valueFormatString: "MM.DD HH"
|
|||
|
},
|
|||
|
axisY: [],
|
|||
|
data: []
|
|||
|
});
|
|||
|
|
|||
|
//Первая загрузка страницы
|
|||
|
|
|||
|
$(document).ready(
|
|||
|
async function () {
|
|||
|
show_load();
|
|||
|
|
|||
|
var flag_pasport_load = await get_url_params();
|
|||
|
pasport_fill_label();
|
|||
|
pasport_show_lable();
|
|||
|
if (!flag_pasport_load) {
|
|||
|
hide_load();
|
|||
|
return;
|
|||
|
}
|
|||
|
if (!pasport_fill_date()) {
|
|||
|
hide_load();
|
|||
|
return;
|
|||
|
}
|
|||
|
show_menu();
|
|||
|
pasport_show_date();
|
|||
|
|
|||
|
var ap = load_data_analog_params();
|
|||
|
var m = load_data_metrics();
|
|||
|
await Promise.all([ap]);
|
|||
|
var ad = load_data_analog();
|
|||
|
if (ap)
|
|||
|
fill_filter_analog();
|
|||
|
await Promise.all([ad, m]);
|
|||
|
if (ap) {
|
|||
|
if (ad) {
|
|||
|
fill_analog_char_data();
|
|||
|
}
|
|||
|
}
|
|||
|
a_chart.render();
|
|||
|
hide_load();
|
|||
|
}
|
|||
|
);
|
|||
|
|
|||
|
aply_filter.click(async function () {
|
|||
|
read_filter();
|
|||
|
await load_data_analog();
|
|||
|
fill_analog_char_data();
|
|||
|
a_chart.render();
|
|||
|
});
|
|||
|
var change_filter_flag = true;
|
|||
|
change_filter.click(function () {
|
|||
|
change_filter.empty();
|
|||
|
if (change_filter_flag)
|
|||
|
change_filter.append("Установить все");
|
|||
|
else
|
|||
|
change_filter.append("Снять все");
|
|||
|
for (var i = 0; i < data_analog_params.length; i++) {
|
|||
|
var check_label = filter_table.find('#analog_filter_id_' + data_analog_params[i].index);
|
|||
|
if (change_filter_flag)
|
|||
|
check_label.removeAttr('checked');
|
|||
|
else
|
|||
|
check_label.attr('checked', true);
|
|||
|
}
|
|||
|
change_filter_flag = !change_filter_flag;
|
|||
|
});
|
|||
|
|
|||
|
function fill_filter_analog() {
|
|||
|
filter_table.empty();
|
|||
|
if (data_analog_params == undefined ||
|
|||
|
data_analog_params == null)
|
|||
|
return;
|
|||
|
for (var i = 0; i < data_analog_params.length; i++) {
|
|||
|
filter_table.append(
|
|||
|
'<div class= "form-check">' +
|
|||
|
'<input class="form-check-input" type="checkbox" value="' + data_analog_params[i].index +
|
|||
|
'" id="analog_filter_id_' + data_analog_params[i].index + '" ' +
|
|||
|
(data_analog_params[i].showDefault ? 'checked' : '') + '>' +
|
|||
|
'<label class="form-check-label" for="analog_filter_id_' + data_analog_params[i].index + '">' +
|
|||
|
data_analog_params[i].index + ' ' + data_analog_params[i].name +
|
|||
|
'</label></div>'
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
function read_filter() {
|
|||
|
for (var i = 0; i < data_analog_params.length; i++) {
|
|||
|
if (filter_table.find('#analog_filter_id_' + data_analog_params[i].index).is(':checked'))
|
|||
|
data_analog_params[i].showDefault = true;
|
|||
|
else
|
|||
|
data_analog_params[i].showDefault = false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
async function load_data_analog_params() {
|
|||
|
try {
|
|||
|
var name_vdp = "0" + pasport_data.numVDP;
|
|||
|
name_vdp = name_vdp.substr(name_vdp.length - 2);
|
|||
|
var res = await $.ajax({
|
|||
|
type: "POST",
|
|||
|
url: 'https://vsmpo.mbucb.ru/api/params/getanalogs',
|
|||
|
contentType: "application/json; charset=utf-8",
|
|||
|
dataType: "json",
|
|||
|
data: JSON.stringify({ "name": name_vdp })
|
|||
|
});
|
|||
|
data_analog_params = res.analog_params;
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (err) {
|
|||
|
data_protect = null;
|
|||
|
alert("Ошибка загрузки структуры аналогов");
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
async function load_data_metrics() {
|
|||
|
try {
|
|||
|
var res = await $.ajax({
|
|||
|
type: "POST",
|
|||
|
url: 'https://vsmpo.mbucb.ru/api/params/getmetrics',
|
|||
|
contentType: "application/json; charset=utf-8",
|
|||
|
dataType: "json",
|
|||
|
data: JSON.stringify({ })
|
|||
|
});
|
|||
|
data_metrics = res.metrics;
|
|||
|
for (var i = 0; i < data_metrics; i++)
|
|||
|
data_metrics[i].show = false;
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (err) {
|
|||
|
data_protect = null;
|
|||
|
alert("Ошибка загрузки метрик осей");
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
async function load_data_analog() {
|
|||
|
try {
|
|||
|
data_analog = null;
|
|||
|
if (data_analog_params == undefined ||
|
|||
|
data_analog_params == null)
|
|||
|
return false;
|
|||
|
var selected_analog = select_analogs = data_analog_params.filter(item => item.showDefault == true);
|
|||
|
var ask_array = [];
|
|||
|
for (var i = 0; i < selected_analog.length; i++)
|
|||
|
ask_array.push(selected_analog[i].index)
|
|||
|
var res = await $.ajax({
|
|||
|
type: "POST",
|
|||
|
url: 'https://vsmpo.mbucb.ru/api/date/getanalogs',
|
|||
|
contentType: "application/json; charset=utf-8",
|
|||
|
dataType: "json",
|
|||
|
data: JSON.stringify({
|
|||
|
"vdp": pasport_data.numVDP,
|
|||
|
"index": ask_array,
|
|||
|
"start": pasport_data.dStart,
|
|||
|
"end": pasport_data.dEnd
|
|||
|
})
|
|||
|
});
|
|||
|
data_analog = res.analogs;
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (err) {
|
|||
|
data_analog = null;
|
|||
|
alert("Ошибка загрузки дискретов.");
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function fill_analog_char_data() {
|
|||
|
var d = [];
|
|||
|
a_chart.options.axisY = [];
|
|||
|
a_chart.options.data = [];
|
|||
|
for (var i = 0; i < data_analog.length; i++) {
|
|||
|
|
|||
|
var a_p = data_analog_params.find(item => item.index == data_analog[i].index);
|
|||
|
var a_p_exist = a_p != undefined && a_p != null;
|
|||
|
|
|||
|
var axis = {
|
|||
|
labelFontSize: 12,
|
|||
|
labelAngle: -90,
|
|||
|
margin: 0,
|
|||
|
tickLength: 3,
|
|||
|
tickThickness: 1,
|
|||
|
lineThickness: 1,
|
|||
|
gridThickness: 0.1,
|
|||
|
suffix: "УЕ",
|
|||
|
logarithmic: false
|
|||
|
}
|
|||
|
|
|||
|
if (a_p_exist) {
|
|||
|
var m = data_metrics.find(item => item.name = a_p.metric)
|
|||
|
if (m != undefined && m != null) {
|
|||
|
axis.suffix = m.name;
|
|||
|
axis.logarithmic = m.log;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
var axis_y_idx = a_chart.options.axisY.findIndex(item => item.suffix == axis.suffix);
|
|||
|
if (axis_y_idx == undefined || axis_y_idx == null || axis_y_idx == -1) {
|
|||
|
a_chart.options.axisY.push(axis);
|
|||
|
axis_y_idx = a_chart.options.axisY.length - 1;
|
|||
|
}
|
|||
|
|
|||
|
var d_a_line = {
|
|||
|
type: "stepLine",
|
|||
|
markerType: "none",
|
|||
|
name: a_p_exist ? a_p.sname : "Сигнал №" + data_analog[i].index,
|
|||
|
suffix: axis.suffix,
|
|||
|
axisYIndex: axis_y_idx,
|
|||
|
dataPoints: []
|
|||
|
};
|
|||
|
|
|||
|
var l_d_a = data_analog[i].analogs;
|
|||
|
|
|||
|
for (var j = 0; j < l_d_a.length; j++) {
|
|||
|
var rdt = null
|
|||
|
if (l_d_a[j].start != undefined && l_d_a[j].start != null) {
|
|||
|
var dta = l_d_a[j].start.split(' ');
|
|||
|
if (dta.length == 2) {
|
|||
|
dtd = dta[0].split('.');
|
|||
|
dtt = dta[1].split(':');
|
|||
|
if (dtd.length == 3 && dtt.length === 3)
|
|||
|
rdt = new Date(dtd[0], dtd[1], dtd[2], dtt[0], dtt[1], dtt[2]);
|
|||
|
}
|
|||
|
}
|
|||
|
d_a_line.dataPoints.push({
|
|||
|
x: rdt,
|
|||
|
y: l_d_a[j].value
|
|||
|
});
|
|||
|
}
|
|||
|
a_chart.options.data.push(d_a_line);
|
|||
|
}
|
|||
|
};
|