var DEVICE_CLASSES = {}
function getSelectedText(elementId) {
let elt = document.getElementById(elementId);
let index = elt.selectedIndex;
if (index < 1) {
return null;
}
return elt.options[index].text;
}
function createDevice() {
let extraFieldsArray = [];
let extraFieldsFromDataTable0 = DevPropTableNew.rows().data();
for (let i = 0; i < extraFieldsFromDataTable0.length; i++) {
extraFieldsArray[i] = extraFieldsFromDataTable0[i];
}
$.ajax({
type: "POST",
url: '/api/devices/',
data: JSON.stringify({
"deviceName": document.getElementById("name").value,
"groupName": document.getElementById("groupName").value,
"deviceClass": document.getElementById("class").value,
"deviceType": document.getElementById("type").value,
"driverName": getSelectedText('driverDevice'),
"ipAddress": document.getElementById("host").value,
"port": document.getElementById("port").value,
"description": document.getElementById("description").value,
"extraFields": extraFieldsArray
}),
contentType: "application/json; charset=utf-8",
success: function () {
startSelfTestOneDevice($('#name').val());
},
complete: function () {
tableDev.ajax.reload();
customHistory.back();
customHistory.back();
},
error: function (errMsg) {
console.log(errMsg);
alert("Ошибка при создании устройства: " + errMsg.responseText);
}
});
}
function fillClassesDevice(name) {
console.log("start fillClassesDevice");
return $.ajax({
type: "GET",
url: '/api/refs/device/classes/?type=' + name,
data: JSON.stringify("request"),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
let marks = "";
for (let i = 0; i < data.length; i++) {
let key = data[i].name;
let value = data[i].simpleName;
if (data[i].description) {
value = `${data[i].description} (${data[i].simpleName})`;
}
marks += ``;
DEVICE_CLASSES[key] = data[i];
}
$('#class').empty().append(marks);
},
error: function (errMsg) {
console.log(errMsg);
}
});
}
function handleDeviceClass(className) {
let deviceClass = DEVICE_CLASSES[className];
if (!deviceClass) return;
let deviceForm = $("#device-add-form");
if (deviceClass.driverRequired) {
fillDriversDevice(className);
let driverForm = $("#device-add-form").find('.primary-field').find('[name="driver"]');
driverForm.parent().show();
driverForm.prop('disabled', false);
} else {
let driverForm = $("#device-add-form").find('.primary-field').find('[name="driver"]');
driverForm.parent().hide();
driverForm.prop('disabled', true);
}
if (deviceClass.primaryFields.length === 0 ) {
deviceForm.find('.primary-field').find('input').prop('disabled', true).parent().hide();
}
deviceClass.primaryFields.forEach((primaryField) => {
let field = deviceForm.find('.primary-field').find(`[name=${primaryField.devicePropertyKey}]`)
if (primaryField.visible) {
field.parent().show();
} else {
field.val('').parent().hide();
}
field.prop('disabled', !primaryField.visible);
});
}
function fillDriversDevice(name) {
console.log("start fillDriversDevice");
return $.ajax({
type: "GET",
url: '/api/refs/driver/classes?className=' + name,
data: JSON.stringify("request"),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
console.log("SUCCESS fillDriversDevice")
let marks = "";
for (let i = 0; i < data.length; i++) {
marks += ``;
}
$('#driverDevice').empty().append(marks);
},
error: function (errMsg) {
console.log(errMsg);
alert("Нет доступного контроллера. Для создания устройства добавьте контроллер.")
customHistory.back();
}
});
}
function hideAllPrimaryFields(formId) {
$("#" + formId).find('.primary-field').find('input,select').prop('disabled', true).parent().hide();
}
function fillTypeDevice() {
console.log("start fillTypeDevice")
$.ajax({
type: "GET",
url: '/api/refs/device/types',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
console.log("success fillTypeDevice");
$('#type').empty().append(``);
for (let i = 0; i < data.length; i++) {
$('#type').append(``);
}
},
error: function (errMsg) {
console.log(errMsg);
}
});
}
function fillGroupName() {
return $.ajax({
type: "GET",
url: '/api/refs/device/groups/',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
let marks = "";
for (let i = 0; i < data.length; i++) {
marks += '';
}
$('#groupName').empty().append(marks);
},
error: function (errMsg) {
console.log(errMsg);
}
});
}
function newFormDevice() {
clearDeviceForm1();
fillTypeDevice();
fillGroupName();
pageselect('device-add-page');
}
function clearDeviceForm1() {
$("#name").val('');
$('#class').empty().append('');
$('#description').val('');
$('#host').val('').prop('disabled', false);
$('#port').val('').prop('disabled', false);
$('#driverDevice').empty().append(``).prop('disabled', false);
$('#groupName').empty().append(``);
let deviceForm = $("#device-add-form");
deviceForm.find('.primary-field').hide();
deviceForm.find('.primary-field').find('input,select').prop('disabled', true)
}
function validateIpAddress(value) {
return (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(value))
}
function validatePort(value) {
return (/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/.test(value))
}
function validateString(value) {
if (!value) return false;
return value.trim().length !== 0;
}
function validateFormField() {
if (this.disabled === false) {
if (this.name === 'host') {
if (!validateIpAddress(this.value)) $(this).addClass("failed");
} else if (this.name === 'port') {
if (!validatePort(this.value)) $(this).addClass("failed");
} else {
if (!validateString(this.value)) $(this).addClass("failed");
}
}
}
function validateDeviceAddForm() {
$("#goOnDeviceAddPage").prop('disabled', true);
$("#device-add-form .validate").removeClass("failed").each(validateFormField)
if ($("#device-add-form .validate.failed").length === 0) {
$("#goOnDeviceAddPage").prop('disabled', false);
return true;
}
return false;
}
$("#device-add-form .validate").change(function () {
validateDeviceAddForm();
});
function checkFieldsAndPageSelect() {
if (validateDeviceAddForm()) {
pageselect('device-property-new-page');
}
}