Save last

This commit is contained in:
2024-09-22 04:27:05 +05:00
parent 0e645d20e2
commit ef797b23df
377 changed files with 14540 additions and 5819 deletions

121
Site/analog.html Normal file
View File

@@ -0,0 +1,121 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta charset="utf-8" />
<title>ВДП</title>
<link rel="stylesheet" href="./lib/Bootstrap/css/bootstrap.css">
<link rel="stylesheet" href="./lib/Font-Awesome/css/fontawesome-all.css" />
<link rel="stylesheet" href="./css/MainSau.css">
</head>
<body>
<div class="container">
<header class="row align-items-center justify-content-center">
<div class="col text-center pt-2">
<h3>Аналоги</h3>
</div>
</header>
<!--Меню выбра-->
<div class="row border-top" id="manipulate_buttons" hidden>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_pasport_button" type="button">
Паспорта
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary disabled" id="menu_analog_button" type="button">
Аналоги
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_descret_button" type="button">
Дискреты
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_tech_cycle_button" type="button">
Технологический цикл
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_protect_button" type="button">
Защиты
</button>
</div>
</div>
<!--Голова паспорта-->
<div class="row border-top" id="pasport_label" hidden>
<div class="col-12 text-center">
<h5>Паспорт</h5>
</div>
</div>
<!--Заданные параметры печи и даты-->
<div class="row" id="pasport_date" hidden>
<div class="col-auto">
<button class="btn btn-primary" data-toggle="modal" data-target="#filter_modal" type="button">
Фильтр
</button>
</div>
<div class="col-auto">
Печь № <span></span>
</div>
<div class="col-auto">
Время начала: <span></span>
</div>
<div class="col-auto">
Время конца: <span></span>
</div>
</div>
<div class="row border-bottom pb-1" id="load_line">
<div class="col-12">
<div class="progress">
<div class="progress-bar progress-bar-striped progress-bar-animated"
role="progressbar"
aria-valuenow="100"
aria-valuemin="0"
aria-valuemax="100"
style="width: 100%"></div>
</div>
</div>
</div>
<div class="row border-bottom pb-1" id="analog_diag_body">
<div class="col-12">
<div id="analog_diag" style="height: 600px; width: 100%;"></div>
</div>
</div>
</div>
<div class="modal fade" id="filter_modal" tabindex="-1" role="dialog" aria-labelledby="filter_modal_label" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Выберите элементы для отображения</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="filter_table">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
<button type="button" class="btn btn-primary" id="change_filter">Снять все</button>
<button type="button" class="btn btn-primary" id="aply_filter" data-dismiss="modal">Применить фильтр</button>
</div>
</div>
</div>
</div>
<script src="./lib/JQuery/jquery-3.3.1.js"></script>
<script src="./lib/Popper/umd/popper.js"></script>
<script src="./lib/Bootstrap/js/bootstrap.bundle.js"></script>
<script src="./lib/canvasjs.min.js"></script>
<script src="./js/pasport.js"></script>
<script src="./js/menu.js"></script>
<script src="./js/analog.js"></script>
</body>
</html>

133
Site/discret.html Normal file
View File

@@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta charset="utf-8" />
<title>ВДП</title>
<link rel="stylesheet" href="./lib/Bootstrap/css/bootstrap.css">
<link rel="stylesheet" href="./lib/Font-Awesome/css/fontawesome-all.css" />
<link rel="stylesheet" href="./css/MainSau.css">
</head>
<body>
<div class="container">
<header class="row align-items-center justify-content-center">
<div class="col text-center pt-2">
<h3>Дискреты</h3>
</div>
</header>
<!--Меню выбра-->
<div class="row border-top" id="manipulate_buttons" hidden>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_pasport_button" type="button">
Паспорта
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_analog_button" type="button">
Аналоги
</button>
</div>
<div class="col-auto pt-1 pb-1 disabled">
<button class="btn btn-primary" id="menu_descret_button" type="button">
Дискреты
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_tech_cycle_button" type="button">
Технологический цикл
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_protect_button" type="button">
Защиты
</button>
</div>
</div>
<!--Голова паспорта-->
<div class="row border-top" id="pasport_label" hidden>
<div class="col-12 text-center">
<h5>Паспорт</h5>
</div>
</div>
<!--Заданные параметры печи и даты-->
<div class="row" id="pasport_date" hidden>
<div class="col-auto">
<button class="btn btn-primary" data-toggle="modal" data-target="#filter_modal" type="button">
Фильтр
</button>
</div>
<div class="col-auto">
Печь № <span></span>
</div>
<div class="col-auto">
Время начала: <span></span>
</div>
<div class="col-auto">
Время конца: <span></span>
</div>
</div>
<div class="row border-bottom pb-1" id="discret_table">
<div class="col-12" style="overflow : auto; max-height : 600px">
<table class="table table-active">
<thead>
<tr>
<th></th>
<th>Индекс</th>
<th>Время начала</th>
<th>Название</th>
<th>Состояние</th>
</tr>
</thead>
<tbody style="background-color: #ffffff">
</tbody>
</table>
</div>
</div>
<div class="row border-bottom pb-1" id="load_line">
<div class="col-12">
<div class="progress">
<div class="progress-bar progress-bar-striped progress-bar-animated"
role="progressbar"
aria-valuenow="100"
aria-valuemin="0"
aria-valuemax="100"
style="width: 100%"></div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="filter_modal" tabindex="-1" role="dialog" aria-labelledby="filter_modal_label" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Выберите элементы для отображения</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="filter_table">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
<button type="button" class="btn btn-primary" id="change_filter">Снять все</button>
<button type="button" class="btn btn-primary" id="aply_filter">Применить фильтр</button>
</div>
</div>
</div>
</div>
<script src="./lib/JQuery/jquery-3.3.1.js"></script>
<script src="./lib/Popper/umd/popper.js"></script>
<script src="./lib/Bootstrap/js/bootstrap.bundle.js"></script>
<script src="./js/pasport.js"></script>
<script src="./js/menu.js"></script>
<script src="./js/discret.js"></script>
</body>
</html>

View File

@@ -10,23 +10,25 @@
</head>
<body>
<div class="container">
<!--Голова-->
<header class="row align-items-center justify-content-center">
<div class="col text-center pt-2">
<h3>РМТ "САУ ВДП" и "КОРПУС"</h3>
</div>
</header>
<!--Меню выбора печи и времени-->
<div class="row pt-2 pb-3">
<!--Поиск по паспорту-->
<div class="col-sm-12 col-md-5 border">
<div class="row">
<div class="col-12">
<strong>Поиск по дате:</strong>
</div>
<div class="col-auto">
<input class="form-control" id="Search1_date" type="date">
<input class="form-control" id="pasport_date_list" type="date">
</div>
<div class="col">
<button class="btn btn-primary" id="Search1_button" type="button">
<button class="btn btn-primary" id="search_button" type="button">
Поиск
</button>
</div>
@@ -35,15 +37,16 @@
<strong>Список паспортов:</strong>
</div>
<div class="col-auto">
<select class="form-control" id="Search1_list_pasport"></select>
<select class="form-control" id="pasport_list"></select>
</div>
<div class="col-auto">
<button class="btn btn-primary" id="Pasport_button_LoadAll" type="button" hidden>
Загрузка
<button class="btn btn-primary" id="pasport_select_button" type="button" hidden>
Выбрать
</button>
</div>
</div>
</div>
<!--Указание печи и интервала времени-->
<div class="col-sm-12 col-md-7 border">
<div class="row">
<div class="col-12">
@@ -53,7 +56,7 @@
Печь №
</div>
<div class="col-auto">
<select class="form-control" id="Search2_select_vdp"></select>
<select class="form-control" id="vdp_select"></select>
</div>
<div class="w-100"></div>
@@ -62,45 +65,78 @@
</div>
<div class="col-auto">
<input class="form-control" type="date" id="Search2_date_start">
<input class="form-control" type="date" id="vdp_date_start">
</div>
<div class="col-auto">
<input class="form-control" type="time" id="Search2_time_start" step="1">
<input class="form-control" type="time" id="vdp_time_start" step="1">
</div>
<div class="w-100"></div>
<div class="col-auto pt-2">
Конец:
</div>
<div class="col-auto">
<input class="form-control" id="Search2_date_end" type="date">
<input class="form-control" id="vdp_date_end" type="date">
</div>
<div class="col-auto">
<input class="form-control" type="time" id="Search2_time_end" step="1">
<input class="form-control" type="time" id="vdp_time_end" step="1">
</div>
<div class="w-100"></div>
<div class="col-auto pt-1">
<button class="btn btn-primary" id="Search2_button_load" type="button">
Загрузка
<button class="btn btn-primary" id="vdp_select_button" type="button">
Выбрать
</button>
</div>
</div>
</div>
</div>
<div class="row border-top" id="Pasport_Lable" hidden>
<!--Меню выбра-->
<div class="row border-top" id="manipulate_buttons" hidden>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary disabled" id="menu_pasport_button" type="button">
Паспорта
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_analog_button" type="button">
Аналоги
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_descret_button" type="button">
Дискреты
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_tech_cycle_button" type="button">
Технологический цикл
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_protect_button" type="button">
Защиты
</button>
</div>
</div>
<!--Голова паспорта-->
<div class="row border-top" id="pasport_label" hidden>
<div class="col-12 text-center">
<h5>Паспорт</h5>
</div>
</div>
<div class="row" id="Pasport_Date" hidden>
<div class="col-sm-12 col-md-6 col-lg-4">
<!--Заданные параметры печи и даты-->
<div class="row" id="pasport_date" hidden>
<div class="col-auto">
Печь № <span></span>
</div>
<div class="col-auto">
Время начала: <span></span>
</div>
<div class="col-sm-12 col-md-6 col-lg-4">
<div class="col-auto">
Время конца: <span></span>
</div>
</div>
<div class="row border-bottom pb-1" id="Pasport_Info" hidden>
<!--Паспорт, если выбрали-->
<div class="row border-bottom pb-1" id="pasport_info" hidden>
<div class="col-sm-12 col-lg-6">
Сплав: <span></span>
</div>
@@ -136,99 +172,71 @@
</div>
</div>
<div class="row border-top" id="AnalogChart_label" hidden>
<div class="col-12 text-center">
<h5>Аналоговые сигналы</h5>
</div>
</div>
<div id="AnalogChart_Global" class="row" hidden>
<div class="col-sm-12 col-md-2" style="font-size:12px">
<div class="row">
<div class="col-12">
<input id="AnalogChart_Update" class="btn btn-primary" type="button" value="Обновить" />
</div>
<div class="col-12" style=" max-height: 570px; overflow: auto;">
<div id="AnalogChart_Checkbox" class="form-check"></div>
</div>
</div>
</div>
<div class="col-sm-12 col-md-10">
<div id="AnalogChart" style="height: 600px;"></div>
</div>
</div>
<div class="row border-top" id="Discret_label" hidden>
<div class="col-12 text-center">
<h5>Дискретные сигналы</h5>
</div>
</div>
<div id="Discret_Global" class="row" hidden>
<div class="col-sm-12 col-md-2" style="font-size:12px">
<div class="row">
<div class="col-12">
<input id="Discret_Update" class="btn btn-primary" type="button" value="Обновить" />
</div>
<div class="col-12" style=" max-height: 570px; overflow: auto;">
<div id="Discret_Checkbox" class="form-check"></div>
</div>
</div>
</div>
<div class="col-sm-12 col-md-10" style="overflow : auto; max-height : 600px">
<table class="table table-active">
<thead>
<tr>
<th>
<button class="btn btn-primary fas fa-sort-amount-down" id="Discret_Sort" type="button"></button>
</th>
<th>Время начала</th>
<th>Название</th>
<th>Статус</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
<div class="row" hidden>
<div class="col-auto">
<button class="btn btn-primary" id="test_button" type="button">
Тест
</button>
</div>
</div>
<div class="row border-top" id="Tech_Cycle_Lable" hidden>
<div class="col-12 text-center">
<h5>Технологический цикл</h5>
</div>
</div>
<div class="row border-bottom pb-1" id="Tech_Cycle_Table" hidden>
<div class="col-12" style="overflow : auto; max-height : 600px">
<table class="table table-active">
<thead>
<tr>
<th>
<button class="btn btn-primary fas fa-sort-amount-down" id="Tech_Cycle_Sort" type="button"></button>
</th>
<th>Время начала</th>
<th>Операция</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<!--УДАЛИТЬ
<div class="row border-top" id="AnalogChart_label" hidden>
<div class="col-12 text-center">
<h5>Аналоговые сигналы</h5>
</div>
</div>
<div id="AnalogChart_Global" class="row" hidden>
<div class="col-sm-12 col-md-2" style="font-size:12px">
<div class="row">
<div class="col-12">
<input id="AnalogChart_Update" class="btn btn-primary" type="button" value="Обновить" />
</div>
<div class="col-12" style=" max-height: 570px; overflow: auto;">
<div id="AnalogChart_Checkbox" class="form-check"></div>
</div>
</div>
</div>
<div class="col-sm-12 col-md-10">
<div id="AnalogChart" style="height: 600px;"></div>
</div>
</div>
<div class="row border-top" id="Discret_label" hidden>
<div class="col-12 text-center">
<h5>Дискретные сигналы</h5>
</div>
</div>
<div id="Discret_Global" class="row" hidden>
<div class="col-sm-12 col-md-2" style="font-size:12px">
<div class="row">
<div class="col-12">
<input id="Discret_Update" class="btn btn-primary" type="button" value="Обновить" />
</div>
<div class="col-12" style=" max-height: 570px; overflow: auto;">
<div id="Discret_Checkbox" class="form-check"></div>
</div>
</div>
</div>
<div class="col-sm-12 col-md-10" style="overflow : auto; max-height : 600px">
<table class="table table-active">
<thead>
<tr>
<th>
<button class="btn btn-primary fas fa-sort-amount-down" id="Discret_Sort" type="button"></button>
</th>
<th>Время начала</th>
<th>Название</th>
<th>Статус</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
-->
</div>
<script src="./lib/JQuery/jquery-3.3.1.js"></script>
<script src="./lib/Popper/umd/popper.js"></script>
<script src="./lib/Bootstrap/js/bootstrap.bundle.js"></script>
<script src="./lib/canvasjs.min.js"></script>
<script src="./js/Pasport.js"></script>
<script src="./js/AnalogChart.js"></script>
<script src="./js/main.js"></script>
<script src="./js/pasport.js"></script>
<script src="./js/menu.js"></script>
<script src="./js/index.js"></script>
</body>
</html>

View File

@@ -191,7 +191,7 @@
markerType: "none",
name: d[i].sn == undefined ? "" : d[i].sn,
suffix: d[i].s,
axisYIndex: 0,
axisYIndex: -1,
}
this._data.push(data);

View File

@@ -1,272 +1,121 @@
class Pasport {
constructor() {
//html Elements
this._ajax;
this._pasp_lable = $('#Pasport_Lable');
this._pasp_date = $('#Pasport_Date');
this._pasp_info = $('#Pasport_Info');
this._pasp_button = $('#Pasport_button_LoadAll');
var pasport_lable = $('#pasport_label');
var pasport_date = $('#pasport_date');
var pasport_info = $('#pasport_info');
var pasport_data = null;
//private Elements
this._server_dir = "";
//public Elements
this.have_date = false;
this.have_pasport = false;
this.time_start = "";
this.time_end = "";
this.num_vdp = -1;
this.num_plav = "";
this.splav = "";
this.is = "";
this.pereplav = -1;
this.naznachenie = "";
this.kategory = "";
this.zakaz = "";
this.ves_slit = -1;
this.kompl = -1;
this.diam_krist = -1;
this.diam_electr = -1;
this.num_kontract = "";
this.ukazanie = "";
this.kod_npl = "";
this.rm = "";
this.notd = -1;
this.tin = "";
this.dzap = "";
this.dlog = -1;
this.last = -1;
this.dlper = -1;
this.izl = -1;
this.robm = -1;
this.rizol = 6;
this.pos = -1;
this.pril = 1;
}
Download(dir) {
if (dir == this._server_dir)
return;
var self = this;
this._server_dir = dir;
this.num_vdp = this._ParseDirToNumVDP(dir);
$.ajax({
type: "POST",
url: 'http://' + document.URL.split("/")[2] + '/api/pasport',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({ "pasport": this._server_dir }),
beforeSend: function (jqXHR, settings) {
self._pasp_button.attr('hidden', true);
},
success: function (date) {
self.have_date = date.have_date;
self.have_pasport = date.have_pasport;
self.time_start = date.time_start;
self.time_end = date.time_end;
if (!self.have_pasport)
return;
self.num_plav = date.num_plav;
self.splav = date.splav;
self.is = date.is;
self.pereplav = date.pereplav;
self.naznachenie = date.naznachenie;
self.kategory = date.kategory;
self.zakaz = date.zakaz;
self.ves_slit = date.ves_slit;
self.kompl = date.kompl;
self.diam_krist = date.diam_krist;
self.diam_electr = date.diam_electr;
self.num_kontract = date.num_kontract;
self.ukazanie = date.ukazanie;
self.kod_npl = date.kod_npl;
self.rm = date.rm;
self.notd = date.notd;
self.tin = date.tin;
self.dzap = date.dzap;
self.dlog = date.dlog;
self.last = date.last;
self.dlper = date.dlper;
self.izl = date.izl;
self.robm = date.robm;
self.rizol = date.rizol;
self.pos = date.pos;
self.pril = date.pril;
self.Show();
}
});
}
_ParseDirToNumVDP(dir) {
var t = dir.split('.');
if (t[t.length - 1] != "gz")
return parseInt(t[t.length - 1]);
t = t[0].split('-');
if (t.length == 2)
return parseInt(t[t.length - 1]);
if (t.length == 4)
return parseInt(t[2]);
return -1;
}
Show() {
this._pasp_lable.removeAttr('hidden');
if (this.have_date == undefined || !this.have_date) {
this._pasp_lable.find('h5').html('Ошибка получения паспорта');
return;
}
if (this.have_pasport == undefined || !this.have_pasport)
this._pasp_lable.find('h5').html('Паспорта нет');
else
this._pasp_lable.find('h5').html('Плавка №' + this.num_plav);
this._pasp_date.removeAttr('hidden');
this._pasp_date.find('span').eq(0).html(this.time_start);
this._pasp_date.find('span').eq(1).html(this.time_end);
this._pasp_button.removeAttr('hidden');
if (this.have_pasport == undefined || !this.have_pasport)
return;
this._pasp_info.removeAttr('hidden');
var temp = this._pasp_info.find('span');
temp.empty();
if (this.is != '-')
temp.eq(0).html(this.splav + ' ' + this.is);
else
temp.eq(0).html(this.splav);
temp.eq(1).html(this.pereplav);
temp.eq(2).html(this.naznachenie);
temp.eq(3).html(this.kategory);
temp.eq(4).html(this.zakaz);
temp.eq(5).html(this.ves_slit);
temp.eq(6).html(this.kompl);
temp.eq(7).html(this.diam_krist);
temp.eq(8).html(this.diam_electr);
temp.eq(9).html(this.num_kontract);
temp.eq(10).html(this.ukazanie);
}
Clear() {
this._pasp_lable.find('h5').empty();
this._pasp_lable.attr('hidden', true);
this._pasp_date.find('span').empty();
this._pasp_date.attr('hidden', true);
this._pasp_info.find('span').empty();
this._pasp_info.attr('hidden', true);
this._pasp_button.attr('hidden', true);
}
}
class TechCycle {
constructor() {
this._sort = false;
this._modal_load = $('#Modal_load');
this._tech_lable = $('#Tech_Cycle_Lable');
this._tech_table = $('#Tech_Cycle_Table');
this._tech_sort = $('#Tech_Cycle_Sort');
this._info_arr = [];
var self = this;
this._tech_sort.click(function () {
if (self._sort == undefined)
self._sort == true;
self._sort = !self._sort;
self._tech_table.find('tbody').empty();
self.Show();
});
}
Download(pasp) {
var self = this;
this._info_arr = [];
this.Clear();
$.ajax({
type: "POST",
url: 'http://' + document.URL.split("/")[2] + '/api/techcycle',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"vdp": pasp.num_vdp,
"timeStart": pasp.time_start,
"timeEnd": pasp.time_end
}),
success: function (date) {
if (date == undefined || date.length == 0)
return;
self._info_arr = date;
self.Show();
}
//complete: function () { }
});
}
DownloadFormTime(vdp, tStart, tEnd) {
var self = this;
this._modal_load.modal('show');
this._info_arr = [];
this.Clear();
$.ajax({
type: "POST",
url: 'http://' + document.URL.split("/")[2] + '/api/techcycle',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"vdp": vdp,
"timeStart": tStart,
"timeEnd": tEnd
}),
success: function (date) {
if (date == undefined || date.length == 0)
return;
self._info_arr = date;
self.Show();
}
//complete: function () { }
});
}
Show() {
if (this._info_arr == undefined || this._info_arr.length == 0)
return;
this._tech_sort.removeClass('fa-sort-amount-down fa-sort-amount-up');
this._tech_sort.addClass(this._sort ? 'fa-sort-amount-up' : 'fa-sort-amount-down');
for (var i = 0; i < this._info_arr.length; i++) {
var j = this._sort ? this._info_arr.length - 1 - i : i;
this._tech_table.find('tbody').append(
'<tr style="background-color : rgba(' + this._info_arr[j].color + ', 0.15);">' +
'<td>' + (j + 1) +
'</td>' +
'<td>' + this._info_arr[j].date +
'</td>' +
'<td>' + this._info_arr[j].value +
'</td>' +
'</tr>');
}
this._tech_table.find('td').addClass('p-1');
this._tech_lable.removeAttr('hidden');
this._tech_table.removeAttr('hidden');
}
Clear() {
this._tech_lable.attr('hidden', true);
this._tech_table.find('tbody').empty();
this._tech_table.attr('hidden', true);
}
async function pasport_load(date, name) {
try {
var res = await $.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/pasport/getpasport',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"date": date,
"name": name
})
})
pasport_data = res;
pasport_data.search_date = date;
pasport_data.search_name = name;
return true;
}
catch (err) {
pasport_data = null;
alert("Ошибка загрузки паспорта:\n" +
"\tДата: " + date + "\n" +
"\tПаспорт: " + name);
return false;
}
};
function pasport_custom_set(vdp, dStart, dEnd) {
pasport_data = {};
pasport_data.numVDP = vdp;
pasport_data.dStart = dStart;
pasport_data.dEnd = dEnd;
}
function pasport_fill_label() {
try {
if (pasport_data == undefined ||
pasport_data == null ||
(
!pasport_data.hasOwnProperty('nplav') &&
!pasport_data.hasOwnProperty('numVDP')
)
)
throw 'Ошибка';
if (pasport_data.hasOwnProperty('nplav'))
pasport_lable.find('h5').html('Паспорт №' + pasport_data.nplav);
else
pasport_lable.find('h5').html('Печь №' + pasport_data.numVDP);
return true;
}
catch (err) {
pasport_lable.find('h5').html('Ошибка получения паспорта');
return false;
}
}
function pasport_fill_date() {
try {
if (pasport_data == undefined ||
pasport_data == null)
throw "Ошибка";
pasport_date.find('span').eq(0).html(pasport_data.numVDP);
pasport_date.find('span').eq(1).html(pasport_data.dStart);
pasport_date.find('span').eq(2).html(pasport_data.dEnd);
return true;
}
catch {
return false;
}
}
function pasport_fill_info() {
try {
var temp = pasport_info.find('span');
if (pasport_data.is != '-')
temp.eq(0).html(pasport_data.splav + ' ' + pasport_data.is);
else
temp.eq(0).html(pasport_data.splav);
temp.eq(1).html(pasport_data.prpl);
temp.eq(2).html(pasport_data.nazn);
temp.eq(3).html(pasport_data.kat);
temp.eq(4).html(pasport_data.zakaz);
temp.eq(5).html(pasport_data.vessl);
temp.eq(6).html(pasport_data.kompl);
temp.eq(7).html(pasport_data.dkr);
temp.eq(8).html(pasport_data.diam);
temp.eq(9).html(pasport_data.nkon);
temp.eq(10).html(pasport_data.ukaz);
return true;
}
catch {
return false;
}
}
function pasport_show_lable() {
try {
pasport_lable.removeAttr('hidden');
} catch { }
}
function pasport_show_date() {
try {
pasport_date.removeAttr('hidden');
} catch { }
}
function pasport_show_info() {
try {
pasport_info.removeAttr('hidden');
} catch { }
}
function pasport_hide_all() {
try {
pasport_lable.attr('hidden', true);
} catch { }
try {
pasport_date.attr('hidden', true);
} catch { }
try {
pasport_info.attr('hidden', true);
} catch { }
}

322
Site/js/analog.js Normal file
View File

@@ -0,0 +1,322 @@
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);
}
};

326
Site/js/discret.js Normal file
View File

@@ -0,0 +1,326 @@
var discret_table = $('#discret_table');
var filter_table = $('#filter_table');
var aply_filter = $('#aply_filter');
var change_filter = $('#change_filter');
var data_discret = null;
var data_discret_params = null;
var params_state_struct = null;
//Первая загрузка страницы
$(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 ds = load_data_discret();
var dsp = load_data_discret_params();
var dsss = load_params_state_struct();
await Promise.all([ds, dsp, dsss]);
if (dsp)
fill_filter_discret();
if (ds)
fill_table_discret();
hide_load();
}
);
aply_filter.click(function () {
read_filter();
fill_table_discret();
});
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_discret_params.length; i++) {
var check_label = filter_table.find('#discret_filter_id_' + data_discret_params[i].index);
if (change_filter_flag)
check_label.removeAttr('checked');
else
check_label.attr('checked', true);
}
change_filter_flag = !change_filter_flag;
});
async function load_data_discret() {
try {
var res = await $.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/date/getdiscret',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"vdp": pasport_data.numVDP,
"start": pasport_data.dStart,
"end": pasport_data.dEnd
})
});
data_discret = res.discret;
return true;
}
catch (err) {
data_discret = null;
alert("Ошибка загрузки дискретов.");
return false;
}
}
async function load_data_discret_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/getdiscret',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({ "name": name_vdp })
});
data_discret_params = res.discret_params;
var i = 0;
while (i < data_discret_params.length) {
if (data_discret_params[i].skip) {
data_discret_params.splice(i, 1);
continue;
}
data_discret_params[i].show = true;
i++;
}
return true;
}
catch (err) {
data_discret_params = null;
alert("Ошибка загрузки структуры дискретов");
return false;
}
}
async function load_params_state_struct() {
try {
var res = await $.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/params/getstatestruct',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({})
});
params_state_struct = res.stateStruct;
return true;
}
catch (err) {
params_state_struct = null;
alert("Ошибка загрузки состояний");
return false;
}
}
function fill_table_discret() {
try {
discret_table.find('tbody').empty();
if (data_discret == undefined ||
data_discret == null ||
data_discret_params == undefined ||
data_discret_params == null)
return;
for (var i = 0; i < data_discret.length; i++) {
var state = data_discret_params.find(item => item.index == data_discret[i].index);
if (state == undefined || state == null || !state.show)
continue;
var state_idx = params_state_struct.find(item => item.name == state.stateStruct);
if (state_idx == undefined || state_idx == null) {
state_idx = {};
state_idx.color = "#ffffff";
state_idx.name = "Состояние №" + data_discret[i].state;
} else {
state_idx = state_idx.states.find(item => item.index == data_discret[i].state);
if (state_idx == undefined || state_idx == null) {
state_idx = {};
state_idx.color = "#ffffff";
state_idx.name = "Состояние №" + data_discret[i].state;
}
}
discret_table.find('tbody').append(
'<tr style="background-color : ' + state_idx.color + '20;">' +
'<td>' + (i + 1) +
'</td>' +
'<td>' + data_discret[i].index +
'</td>' +
'<td>' + data_discret[i].start +
'</td>' +
'<td>' + state.name +
'</td>' +
'<td>' + state_idx.name +
'</td>' +
'</tr>');
}
}
catch {
alert("Ошибка заполнения таблицы.");
}
}
function fill_filter_discret() {
filter_table.empty();
if (data_discret_params == undefined ||
data_discret_params == null)
return;
for (var i = 0; i < data_discret_params.length; i++) {
filter_table.append(
'<div class= "form-check">' +
'<input class="form-check-input" type="checkbox" value="' + data_discret_params[i].index +
'" id="discret_filter_id_' + data_discret_params[i].index + '" ' +
(data_discret_params[i].show ? 'checked' : '') + '>' +
'<label class="form-check-label" for="discret_filter_id_' + data_discret_params[i].index + '">' +
data_discret_params[i].index + ' ' + data_discret_params[i].name +
'</label></div>'
);
}
}
function read_filter() {
for (var i = 0; i < data_discret_params.length; i++) {
if (filter_table.find('#discret_filter_id_' + data_discret_params[i].index).is(':checked'))
data_discret_params[i].show = true;
else
data_discret_params[i].show = false;
}
}
function load_discret() {
$.ajax({
type:
"POST",
url:
'https://' +
//document.URL.split("/")[2] +
'vsmpo.mbucb.ru' +
'/api/discret/getdiscrets',
contentType:
"application/json; charset=utf-8",
dataType:
"json",
data:
JSON.stringify(
{
"vdp": pasport_data == null ? global_vdp : pasport_data.numVDP,
"start": pasport_data == null ? global_dStart : pasport_data.dStart,
"end": pasport_data == null ? global_dEnd : pasport_data.dEnd
}
),
failure:
function (errMsg) {
hide_load();
alert("Не смог зугрузить массив данных. \n" + errMsg.name + ":" + errMsg.message + "\n" + errMsg.stack);
},
success: function (date) {
if (
date === undefined ||
date.discrets === undefined ||
date.stateParams === undefined ||
date.discretParams === undefined
) {
alert("Неверные данные")
return;
}
for (var i = 0; i < date.discrets.length; i++) {
var discret_row = {};
discret_row.id = i + 1;
discret_row.index = date.discrets[i].index;
discret_row.name = "Дискрет №" + date.discrets[i].index;
discret_row.color = "#ffffff";
discret_row.state = "Неизвестный №" + date.discrets[i].state;
discret_row.date_time = date.discrets[i].start;
var discretParams = date.discretParams.find(item => item.index == date.discrets[i].index);
if (discretParams != undefined) {
discret_row.name = discretParams.name;
var stateParam =
date.stateParams.find(item =>
item.name == discretParams.stateStruct &&
item.states.find(item => item.index == date.discrets[i].state) != undefined
)
if (stateParam != undefined) {
var state_tmp = stateParam.states.find(item => item.index == date.discrets[i].state);
discret_row.state = state_tmp.name;
discret_row.color = state_tmp.color;
}
}
var discret_filter = {};
discret_filter.index = discret_row.index;
discret_filter.name = discret_row.name;
discret_filter.show = true;
if (local_filter.find(item => item.index == discret_filter.index) === undefined)
local_filter.push(discret_filter);
local_date.push(discret_row);
}
local_filter.sort(function (a, b) { return a.index - b.index; });
update_filter();
update_table();
hide_load();
}
});
}
function update_filter() {
filter_table.empty();
for (var i = 0; i < local_filter.length; i++) {
filter_table.append(
'<div class= "form-check">' +
'<input class="form-check-input" type="checkbox" value="' + local_filter[i].index +
'" id="discret_filter_id_' + local_filter[i].index + '" ' +
(local_filter[i].show ? 'checked' : '') + '>' +
'<label class="form-check-label" for="discret_filter_id_' + local_filter[i].index + '">' +
local_filter[i].index + ' ' + local_filter[i].name +
'</label></div>'
);
}
}
function update_table() {
discret_table.find('tbody').empty();
for (var i = 0; i < local_date.length; i++) {
var check = local_filter.find(item => item.index == local_date[i].index);
if (check != undefined && !check.show)
continue;
discret_table.find('tbody').append(
'<tr style="background-color : ' + local_date[i].color + '20;">' +
'<td>' + (i + 1) +
'</td>' +
'<td>' + local_date[i].index +
'</td>' +
'<td>' + local_date[i].date_time +
'</td>' +
'<td>' + local_date[i].name +
'</td>' +
'<td>' + local_date[i].state +
'</td>' +
'</tr>');
}
}

1
Site/js/global_params.js Normal file
View File

@@ -0,0 +1 @@
var global_pasport;

221
Site/js/index.js Normal file
View File

@@ -0,0 +1,221 @@
var pasport_date_list = $('#pasport_date_list');
var search_button = $('#search_button');
var pasport_list = $('#pasport_list');
var pasport_select_button = $('#pasport_select_button');
var vdp_select = $('#vdp_select');
var vdp_date_start = $('#vdp_date_start');
var vdp_date_end = $('#vdp_date_end');
var vdp_time_start = $('#vdp_time_start');
var vdp_time_end = $('#vdp_time_end');
var vdp_select_button = $('#vdp_select_button');
//Первая загрузка страницы
$(document).ready(
async function () {
//fill elements
for (var i = 1; i < 51; i++)
vdp_select.append('<option value="' + i + '">' + i + '</option>');
for (var i = 91; i < 95; i++)
vdp_select.append('<option value="' + i + '">' + i + '</option>');
var d = new Date();
pasport_date_list.val(getDate(d));
vdp_date_end.val(getDate(d));
d.setDate(d.getDate() - 3);
vdp_date_start.val(getDate(d));
vdp_time_start.val('00:00:00');
vdp_time_end.val('23:59:59');
await get_url_params();
if (
pasport_data == undefined ||
pasport_data == null
)
return;
if (pasport_data.search_date != null) {
pasport_date_list.val(pasport_data.search_date);
if (pasport_data.search_name != null) {
func_search_button(
pasport_data.search_date,
pasport_data.search_name
);
func_pasport_select_button(
pasport_data.search_date,
pasport_data.search_name
);
}
else
search_button.click();
}
if (pasport_data.numVDP != null)
$('#vdp_select option[value=' + pasport_data.numVDP + ']').prop('selected', true);
if (pasport_data.dStart != null && pasport_data.dEnd != null) {
var st = pasport_data.dStart.split(' ');
var std = st[0].split('.');
var ed = pasport_data.dEnd.split(' ');
var edd = ed[0].split('.');
if (std.length == 1)
vdp_date_start.val(std[0]);
else
vdp_date_start.val(std[0] + '-' + std[1] + '-' + std[2]);
if (edd.length == 1)
vdp_date_end.val(edd[0]);
else
vdp_date_end.val(edd[0] + '-' + edd[1] + '-' + edd[2]);
vdp_time_start.val(st[1]);
vdp_time_end.val(ed[1]);
vdp_select_button.click();
}
else {
var d = new Date();
vdp_date_end.val(
getDate(d)
);
d.setDate(d.getDate() - 3);
vdp_date_start.val(
getDate(d)
);
vdp_time_start.val('00:00:00');
vdp_time_end.val('23:59:59');
}
pasport_fill_label()
pasport_show_lable();
if (pasport_fill_date())
pasport_show_date();
if (pasport_fill_info())
pasport_fill_info();
show_menu();
}
);
//Конвертация даты в строку
function getDate(date) {
var d = (date === undefined) ? new Date() : date;
t =
d.getFullYear() + "-" +
("0" + (d.getMonth() + 1)).slice(-2) + "-" +
("0" + d.getDate()).slice(-2);
return t;
}
//Изменение даты для поиска
pasport_date_list.change(
function () {
pasport_list.empty();
pasport_select_button.attr('hidden', true);
}
);
//Кнопка поиска списка по дате
search_button.click(
function () {
func_search_button(
pasport_date_list.val()
);
}
);
function func_search_button(data, name) {
$.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/pasport/getlist',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"date": data
}),
failure:
function (errMsg) {
pasport_select_button.attr('hidden', true);
alert("Не смог зугрузить список плавок. \n" + errMsg.name + ":" + errMsg.message + "\n" + errMsg.stack);
},
beforeSend:
function (jqXHR, settings) {
pasport_select_button.attr('hidden', true);
pasport_list.empty();
},
success: function (date) {
if (date === undefined || date.name === undefined || date.time === undefined) {
pasport_list.append('<option>Ошибка</option>');
return;
}
if (date.name === null || date.name.length === 0) {
pasport_list.append('<option>Плавок нет</option>');
return;
}
for (var i = 0; i < date.name.length; i++)
pasport_list.append('<option value="' + date.time[i] + '-' + date.name[i] + '">' + date.name[i] + '</option>');
if (name != undefined)
$('#pasport_list option[value=' + name + ']').prop('selected', true);
pasport_select_button.removeAttr('hidden');
}
});
}
pasport_select_button.click(
function () {
func_pasport_select_button(
pasport_date_list.val(),
pasport_list.find(':selected').val()
);
}
)
async function func_pasport_select_button(data, name) {
var res_load = await pasport_load(data, name);
pasport_fill_label();
pasport_show_lable();
if (!res_load)
return;
pasport_fill_date();
pasport_fill_info();
pasport_show_date();
pasport_show_info();
show_menu();
}
vdp_select_button.click(
function () {
func_vdp_select_button(
vdp_select.find(':selected').val(),
vdp_date_start.val(),
vdp_time_start.val(),
vdp_date_end.val(),
vdp_time_end.val()
);
}
)
function func_vdp_select_button(vdp, ds, ts, de, te) {
pasport_hide_all();
hide_menu();
var d_s = ds.split('-');
var t_s = ts.split(':');
var d_e = de.split('-');
var t_e = te.split(':');
var s_d_s = new Date(d_s[0], d_s[1], d_s[2], t_s[0], t_s[1], t_s[2]);
var s_d_e = new Date(d_e[0], d_e[1], d_e[2], t_e[0], t_e[1], t_e[2]);
if (s_d_s >= s_d_e) {
alert('Неверно указаны даты.');
return;
}
pasport_custom_set(
vdp,
d_s[0] + '.' + d_s[1] + '.' + d_s[2] + ' ' + ts,
d_e[0] + '.' + d_e[1] + '.' + d_e[2] + ' ' + te
);
pasport_fill_label();
pasport_fill_date();
pasport_show_lable();
pasport_show_date();
show_menu();
}

104
Site/js/menu.js Normal file
View File

@@ -0,0 +1,104 @@
var menu_pasport_button = $('#menu_pasport_button');
var menu_analog_button = $('#menu_analog_button');
var menu_descret_button = $('#menu_descret_button');
var menu_tech_cycle_button = $('#menu_tech_cycle_button');
var menu_protect_button = $('#menu_protect_button');
menu_pasport_button.click(
function () {
create_redirect(0);
}
);
menu_analog_button.click(
function () {
create_redirect(1);
}
);
menu_descret_button.click(
function () {
create_redirect(2);
}
);
menu_tech_cycle_button.click(
function () {
create_redirect(3);
}
);
menu_protect_button.click(
function () {
create_redirect(4);
}
);
function create_redirect(id) {
var url = 'https://' + document.URL.split("/")[2];
if (id === undefined || id == 0) {
url += '/index.html';
} else if (id == 1) {
url += '/analog.html';
} else if (id == 2) {
url += '/discret.html';
} else if (id == 3) {
url += '/tech_cycle.html';
} else if (id == 4) {
url += '/protect.html';
}
urlSP = new URL(url);
if (
pasport_data.hasOwnProperty('search_date') &&
pasport_data.hasOwnProperty('search_name')
) {
urlSP.searchParams.set('pasport_date', pasport_data.search_date);
urlSP.searchParams.set('pasport_name', pasport_data.search_name);
} else {
urlSP.searchParams.set('vdp', pasport_data.numVDP);
urlSP.searchParams.set('dstart', pasport_data.dStart);
urlSP.searchParams.set('dend', pasport_data.dEnd);
}
document.location.href = urlSP;
}
async function get_url_params() {
var url = new URL(document.URL);
var url_pasport_date = url.searchParams.get('pasport_date');
var url_pasport_name = url.searchParams.get('pasport_name');
if (
url_pasport_date != null &&
url_pasport_name != null
) {
return await pasport_load(url_pasport_date, url_pasport_name);
}
var url_vdp = url.searchParams.get('vdp');
var url_dstart = url.searchParams.get('dstart');
var url_dend = url.searchParams.get('dend');
if (
url_vdp != null &&
url_dstart != null &&
url_dend != null
)
{
pasport_custom_set(
url_vdp,
url_dstart,
url_dend
);
return true;
}
return false;
}
var load_line = $('#load_line');
function show_load() {
load_line.removeAttr('hidden');
}
function hide_load() {
load_line.attr('hidden', true);
}
var manipulate_buttons = $('#manipulate_buttons');
function show_menu() {
manipulate_buttons.removeAttr('hidden');
}
function hide_menu() {
manipulate_buttons.attr('hidden', true);
}

View File

@@ -1 +0,0 @@


193
Site/js/protect.js Normal file
View File

@@ -0,0 +1,193 @@
var protect_table = $('#protect_table');
var filter_table = $('#filter_table');
var aply_filter = $('#aply_filter');
var change_filter = $('#change_filter');
var data_protect = null;
var data_protect_state = null;
var params_state_struct = null;
//Первая загрузка страницы
$(document).ready(
async function () {
var flag_pasport_load = await get_url_params();
pasport_fill_label();
pasport_show_lable();
if (!flag_pasport_load)
return;
if (!pasport_fill_date())
return;
show_menu();
pasport_show_date();
var pt = load_data_protect();
var pts = load_data_protect_state();
var ptss = load_params_state_struct();
await Promise.all([pt, pts, ptss]);
if (pts)
fill_filter_protect();
if (pt)
fill_table_protect();
}
);
aply_filter.click(function () {
read_filter();
fill_table_protect();
});
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_protect_state.length; i++) {
var check_label = filter_table.find('#protect_filter_id_' + data_protect_state[i].index);
if (change_filter_flag)
check_label.removeAttr('checked');
else
check_label.attr('checked', true);
}
change_filter_flag = !change_filter_flag;
});
async function load_data_protect() {
try {
var res = await $.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/date/getprotect',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"vdp": pasport_data.numVDP,
"start": pasport_data.dStart,
"end": pasport_data.dEnd
})
});
data_protect = res.protect;
return true;
}
catch (err) {
data_protect = null;
alert("Ошибка загрузки защит");
return false;
}
}
async function load_data_protect_state() {
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/getprotectstate',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({"name": name_vdp})
});
data_protect_state = res.protectState;
for (var i = 0; i < data_protect_state.length; i++)
data_protect_state[i].show = true;
return true;
}
catch (err) {
data_protect = null;
alert("Ошибка загрузки структуры защит");
return false;
}
}
async function load_params_state_struct() {
try {
var res = await $.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/params/getstatestruct',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({})
});
params_state_struct = res.stateStruct;
return true;
}
catch (err) {
params_state_struct = null;
alert("Ошибка загрузки состояний");
return false;
}
}
function fill_table_protect() {
try {
protect_table.find('tbody').empty();
if (data_protect == undefined ||
data_protect == null ||
data_protect_state == undefined ||
data_protect_state == null)
return;
for (var i = 0; i < data_protect.length; i++) {
var state = data_protect_state.find(item => item.index == data_protect[i].index);
if (state == undefined || state == null || !state.show)
continue;
var state_idx = params_state_struct.find(item => item.name == state.stateStruct);
if (state_idx == undefined || state_idx == null) {
state_idx = {};
state_idx.color = "#ffffff";
state_idx.name = "Операция №" + data_protect[i].state;
} else {
state_idx = state_idx.states.find(item => item.index == data_protect[i].state);
if (state_idx == undefined || state_idx == null) {
state_idx = {};
state_idx.color = "#ffffff";
state_idx.name = "Операция №" + data_protect[i].state;
}
}
protect_table.find('tbody').append(
'<tr style="background-color : ' + state_idx.color + '20;">' +
'<td>' + (i + 1) +
'</td>' +
'<td>' + data_protect[i].index +
'</td>' +
'<td>' + data_protect[i].start +
'</td>' +
'<td>' + state.name +
'</td>' +
'<td>' + state_idx.name +
'</td>' +
'</tr>');
}
}
catch {
alert("Ошибка заполнения таблицы.");
}
}
function fill_filter_protect() {
filter_table.empty();
if (data_protect_state == undefined ||
data_protect_state == null)
return;
for (var i = 0; i < data_protect_state.length; i++) {
filter_table.append(
'<div class= "form-check">' +
'<input class="form-check-input" type="checkbox" value="' + data_protect_state[i].index +
'" id="protect_filter_id_' + data_protect_state[i].index + '" ' +
(data_protect_state[i].show ? 'checked' : '') + '>' +
'<label class="form-check-label" for="protect_filter_id_' + data_protect_state[i].index + '">' +
data_protect_state[i].index + ' ' + data_protect_state[i].name +
'</label></div>'
);
}
}
function read_filter() {
for (var i = 0; i < data_protect_state.length; i++) {
if (filter_table.find('#protect_filter_id_' + data_protect_state[i].index).is(':checked'))
data_protect_state[i].show = true;
else
data_protect_state[i].show = false;
}
}

111
Site/js/tech_cycle.js Normal file
View File

@@ -0,0 +1,111 @@
var tech_cycle_table = $('#tech_cycle_table');
var data_tech_cycle = null;
var params_tech_cycle_name = null;
var params_tech_cycle_color = null;
//Первая загрузка страницы
$(document).ready(
async function () {
var flag_pasport_load = await get_url_params();
pasport_fill_label();
pasport_show_lable();
if (!flag_pasport_load)
return;
show_menu();
if (!pasport_fill_date())
return;
pasport_show_date();
var tc_data = load_data_tech_cycle();
var tc_name = load_params_tech_cycle_name();
var tc_color = load_params_tech_cycle_color();
await Promise.all([tc_data, tc_name, tc_color]);
if (tc_data)
fill_table_tech_cycle();
}
);
async function load_data_tech_cycle() {
try {
var res = await $.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/date/gettechcycle',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"vdp": pasport_data.numVDP,
"start": pasport_data.dStart,
"end": pasport_data.dEnd
})
});
data_tech_cycle = res.techCycle;
return true;
}
catch (err) {
data_tech_cycle = null;
alert("Ошибка загрузки тех. цикла");
return false;
}
}
async function load_params_tech_cycle_name() {
try {
var res = await $.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/params/gettechcyclename',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({})
});
params_tech_cycle_name = res.name;
return true;
}
catch (err) {
params_tech_cycle_name = null;
alert("Ошибка загрузки имен тех. цикла");
return false;
}
}
async function load_params_tech_cycle_color() {
try {
var res = await $.ajax({
type: "POST",
url: 'https://vsmpo.mbucb.ru/api/params/gettechcyclecolor',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({})
});
params_tech_cycle_color = res.color;
return true;
}
catch (err) {
params_tech_cycle_color = null;
alert("Ошибка загрузки цветов тех. цикла");
return false;
}
}
function fill_table_tech_cycle() {
for (var i = 0; i < data_tech_cycle.length; i++) {
var color = params_tech_cycle_color != null ?
params_tech_cycle_color.find(item => item.index == data_tech_cycle[i].index) :
'#ffffff';
color = color != undefined ? color.color : '#ffffff';
var name = params_tech_cycle_name != null ?
params_tech_cycle_name.find(item => item.index == data_tech_cycle[i].index) :
'Технологический цикл №' + data_tech_cycle[i].index;
name = name != undefined ?
name = name.name :
'Технологический цикл №' + data_tech_cycle[i].index;
tech_cycle_table.find('tbody').append(
'<tr style="background-color : ' + color + '20;">' +
'<td>' + (i + 1) +
'</td>' +
'<td>' + data_tech_cycle[i].start +
'</td>' +
'<td>' + name +
'</td>' +
'</tr>');
}
}

1740
Site/lib/canvasjs.min.js vendored

File diff suppressed because it is too large Load Diff

118
Site/protect.html Normal file
View File

@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta charset="utf-8" />
<title>ВДП</title>
<link rel="stylesheet" href="./lib/Bootstrap/css/bootstrap.css">
<link rel="stylesheet" href="./lib/Font-Awesome/css/fontawesome-all.css" />
<link rel="stylesheet" href="./css/MainSau.css">
</head>
<body>
<div class="container">
<header class="row align-items-center justify-content-center">
<div class="col text-center pt-2">
<h3>Защиты</h3>
</div>
</header>
<!--Меню выбра-->
<div class="row border-top" id="manipulate_buttons" hidden>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_pasport_button" type="button">
Паспорта
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_analog_button" type="button">
Аналоги
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_descret_button" type="button">
Дискреты
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_tech_cycle_button" type="button">
Технологический цикл
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary disabled" id="menu_protect_button" type="button">
Защиты
</button>
</div>
</div>
<!--Голова паспорта-->
<div class="row border-top" id="pasport_label" hidden>
<div class="col-12 text-center">
<h5>Паспорт</h5>
</div>
</div>
<!--Заданные параметры печи и даты-->
<div class="row" id="pasport_date" hidden>
<div class="col-auto">
<button class="btn btn-primary" data-toggle="modal" data-target="#filter_modal" type="button">
Фильтр
</button>
</div>
<div class="col-auto">
Печь № <span></span>
</div>
<div class="col-auto">
Время начала: <span></span>
</div>
<div class="col-auto">
Время конца: <span></span>
</div>
</div>
<div class="row border-bottom pb-1" id="protect_table">
<div class="col-12" style="overflow : auto; max-height : 600px">
<table class="table table-active">
<thead>
<tr>
<th></th>
<th>Индекс</th>
<th>Время начала</th>
<th>Название</th>
<th>Состояние</th>
</tr>
</thead>
<tbody style="background-color: #ffffff">
</tbody>
</table>
</div>
</div>
</div>
<div class="modal fade" id="filter_modal" tabindex="-1" role="dialog" aria-labelledby="filter_modal_label" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Выберите элементы для отображения</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="filter_table">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button>
<button type="button" class="btn btn-primary" id="change_filter">Снять все</button>
<button type="button" class="btn btn-primary" id="aply_filter" data-dismiss="modal">Применить фильтр</button>
</div>
</div>
</div>
</div>
<script src="./lib/JQuery/jquery-3.3.1.js"></script>
<script src="./lib/Popper/umd/popper.js"></script>
<script src="./lib/Bootstrap/js/bootstrap.bundle.js"></script>
<script src="./js/pasport.js"></script>
<script src="./js/menu.js"></script>
<script src="./js/protect.js"></script>
</body>
</html>

90
Site/tech_cycle.html Normal file
View File

@@ -0,0 +1,90 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta charset="utf-8" />
<title>ВДП</title>
<link rel="stylesheet" href="./lib/Bootstrap/css/bootstrap.css">
<link rel="stylesheet" href="./lib/Font-Awesome/css/fontawesome-all.css" />
<link rel="stylesheet" href="./css/MainSau.css">
</head>
<body>
<div class="container">
<header class="row align-items-center justify-content-center">
<div class="col text-center pt-2">
<h3>Технологический цикл</h3>
</div>
</header>
<!--Меню выбра-->
<div class="row border-top" id="manipulate_buttons" hidden>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_pasport_button" type="button">
Паспорта
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_analog_button" type="button">
Аналоги
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_descret_button" type="button">
Дискреты
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary disabled" id="menu_tech_cycle_button" type="button">
Технологический цикл
</button>
</div>
<div class="col-auto pt-1 pb-1">
<button class="btn btn-primary" id="menu_protect_button" type="button">
Защиты
</button>
</div>
</div>
<!--Голова паспорта-->
<div class="row border-top" id="pasport_label" hidden>
<div class="col-12 text-center">
<h5>Паспорт</h5>
</div>
</div>
<!--Заданные параметры печи и даты-->
<div class="row" id="pasport_date" hidden>
<div class="col-auto">
Печь № <span></span>
</div>
<div class="col-auto">
Время начала: <span></span>
</div>
<div class="col-auto">
Время конца: <span></span>
</div>
</div>
<div class="row border-bottom pb-1" id="tech_cycle_table">
<div class="col-12" style="overflow : auto; max-height : 600px">
<table class="table table-active">
<thead>
<tr>
<th></th>
<th>Время начала</th>
<th>Операция</th>
</tr>
</thead>
<tbody style="background-color: #ffffff">
</tbody>
</table>
</div>
</div>
</div>
<script src="./lib/JQuery/jquery-3.3.1.js"></script>
<script src="./lib/Popper/umd/popper.js"></script>
<script src="./lib/Bootstrap/js/bootstrap.bundle.js"></script>
<script src="./js/pasport.js"></script>
<script src="./js/menu.js"></script>
<script src="./js/tech_cycle.js"></script>
</body>
</html>