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'); } }