const PACK_CODE_EMPTY_STRING = "ОТСУТСТВУЕТ"; var activeConfig = ""; var inited = false; var tab = 0; var devices = []; var counters = []; var tasks = []; var filteredTasks = []; let filterDateTask = new Date(); var errorChangeTimer = null; var errorCount = 0; var systemProperties = null; var systemStatus = null; let rowCountView = 5; let currentPalletId; let currentPalletEdit; let currentPallet; let currentLayer; let currentLayerEdit; let GROUPS_DEVICE = { 'Marker Group': {groupName : 'Marker Group', idHtml : "#marking-group", short: "marking"}, 'Scanners Group': {groupName : 'Scanners Group', idHtml : "#scanning-group", short: "scanning"}, 'Camera Group': {groupName : 'Camera Group', idHtml : "#aggregating-group", short: "aggregating"}, 'Pallet Group': {groupName : 'Pallet Group', idHtml : "#pallet-group", short: "pallet"}, 'System Group': {groupName : 'System Group', idHtml : "#system-group", short: "system"} }; let STREAM_NAME = { STREAM_1: {name: "STREAM_1", counter: "-1", idHtml: "#stream-group-1", streamTxt: "поток 1"}, STREAM_2: {name: "STREAM_2", counter: "-2", idHtml: "#stream-group-2", streamTxt: "поток 2"}, STREAM_3: {name: "STREAM_3", counter: "-3", idHtml: "#stream-group-3", streamTxt: "поток 3"}, STREAM_0: {name: "STREAM_0", counter: "-0", idHtml: "#stream-group", streamTxt: ""}, STREAM_ALL: {name: "", counter: "AllStream", idHtml: "#stream-group", streamTxt: ""} }; /// DEBUG SECTION var debug_en = false; var consoleHolder = console; let debug_log = false; var HistoryAPI = function () { this.state = null; this.history = []; }; HistoryAPI.prototype.pushState = function (state) { this.history.push(this.state); this.state = state; }; HistoryAPI.prototype.back = function () { if (this.history.length > 0) { this.state = this.history.pop(); } if (this.state) { if (this.state === 'page2' && testHaveError) this.state = 'page1'; _pageselect(this.state); } }; window.customHistory = new HistoryAPI(); function debug(bool) { debug_en = bool; if (!bool) { consoleHolder = console; console = {}; Object.keys(consoleHolder).forEach(function (key) { console[key] = function () { }; }) } else { console = consoleHolder; } } //debug(false); /// END DEBUG SECTION function pageselect(pageName) { _pageselect(pageName); customHistory.pushState(pageName); } function _pageselect(pageName) { if (pageName) { console.log("open page:", pageName); $(".page").addClass('hide'); var page = $('#' + pageName); page.removeClass('hide'); page.trigger("showPage"); if (pageName == "page4") { //initChart(); // uiupdate1(); } if (pageName == "page3") { $('#config > .active').removeClass('active'); } if(pageName === 'page-packEdit') $("#page-packEdit .topList input.stamp").focus(); if(pageName === 'page-palletEdit') $("#page-palletEdit .topList input").focus(); if(pageName === 'value-editor-page') $("#editor-value").focus(); if(pageName === 'value-editor-page') $("#editor-value").focus(); } } function uiupdate1() { //updateChart(counters[tab].read, counters[tab].notRead); // $("#sensorlist").empty(); for (var i = 0; i < counters.length; i++) { var template = "
\ " + counters[i].localizedName + "
" + (counters[i].status == "OFF" ? "
Выключен
" : "
Считано
\
" + fNum(counters[i].read) + "
\
Не считано
\
" + fNum(counters[i].notRead) + "
") + "
"; $("#sensorlist").append(template); } $("#tab_title").text(counters[tab].localizedName); $("#breadgood").text(fNum(counters[tab].read)); $("#breadbad").text(fNum(counters[tab].notRead)); $("#pic").attr("src", tabimage[tab]); } function fNum(number) { return new Intl.NumberFormat('ru-RU').format(number); } var tabimage = [ "img/PDF417.png", "img/dm.png", "img/barcode.png", "img/pallet.png" ]; function updateChart(good, bad) { if (config) { config.data.datasets[0].data = [bad, good]; window.myPie.update(); } } var config; // config pie chart function initChart() { var ctxP = document.getElementById("pieChart").getContext('2d'); config = { type: 'pie', data: { labels: ["Ошибки", "Успешно"], datasets: [ { data: [0, 0], backgroundColor: ["#F7464A", "green"], hoverBackgroundColor: ["#FF5A5E", "green"] } ] }, options: { tooltips: { enabled: false }, legend: { display: false }, responsive: true } }; window.myPie = new Chart(ctxP, config); } function uiupdate() { var formatted = new Date().toTimeString().match(/^([0-9]{2}:[0-9]{2}:[0-9]{2})/)[0]; $(".current-time").text(formatted); } function changeConfPage(side) { var p = confpage + side; if (p <= Math.ceil(filteredTasks.length / rowCountView) && p > 0) { confpage = p; confFill(); } } var confpage = 1; function confFill() { filterStartDateTask(filterDateTask) $("#btnStartModal").prop("disabled", true); $("#btnEndTaskModal").attr("disabled", true); $("#btnTaskReport").attr("disabled", true); $("#confs").empty(); if (filteredTasks.length > rowCountView) { $("#paging").removeClass("hide"); } $("#pageleft").prop("disabled", confpage == 1); $("#pageright").prop("disabled", confpage == Math.ceil(filteredTasks.length / rowCountView)); for (var i = ((confpage - 1) * rowCountView); i < (confpage * rowCountView); i++) { if (i < filteredTasks.length) { let conf = filteredTasks[i]; console.log("***", conf); $("#confs").append(`
${conf.localizedName}
${conf.localizedStatus}
`); } else { $("#confs").append("
"); } } $("#confs").on("click", ".data", function () { let $this = $(this); let index = $this.data('taskIndex'); let task = filteredTasks[index]; let enableStart = task.status === 'ASSIGNED' || task.status === 'PROCESSING'; let enableEnd = task.type === 'SINGLE' && enableStart; activeConfig = $this.data('alias'); $('#confs > .active').removeClass('active'); $this.addClass('active'); $("#btnStartModal").prop("disabled", !enableStart); $("#btnEndTaskModal").attr("disabled", !enableEnd); $("#btnTaskReport").attr("disabled", false); }); } function closeWindow() { stompClient.send("/app/stop"); window.close(); } function cleanErrors() { $("#errors").empty(); $(".errorCount").text(0); $(".errorCount").hide(); errorCount = 0; $(".btn-errors-page").attr("disabled", true); } function closePallet() { stompClient.send("/app/pallet/close", {}, currentPalletId); customHistory.back(); } function closePalletOnStart() { let palletId = $("#noClosedPallet").data("palletId"); subscribeOnce("/topic/pallet/close").then(startConveyour); stompClient.send("/app/pallet/close", {}, palletId); } function closePack() { stompClient.send("/app/pack/close"); customHistory.back(); } function pauseSectionModal(section, streamName) { let groupName = ""; let streamTxt = ''; if (!streamName) { streamName = ''; streamTxt = STREAM_NAME['STREAM_ALL'].streamTxt; } else { streamTxt = STREAM_NAME[streamName].streamTxt; } switch (section) { case "Scanners Group": groupName = `Остановить группу сканирования ${streamTxt}?`; break; case "Camera Group": groupName = `Остановить группу агрегирования ${streamTxt}?`; break; case "Pallet Group": groupName = `Остановить группу палетирования ${streamTxt}?`; break; case "Marker Group": groupName = `Остановить группу маркировки ${streamTxt}?`; break; default: groupName = section; break; } $("#groupStop").text(groupName); $("#spanPause").text(section); $("#streamPause").text(streamName); pageselect("modalPause"); } function resetSectionModal(section, streamName) { let groupName = ""; if (!streamName) streamName = 'STREAM_0'; let streamTxt = STREAM_NAME[streamName].streamTxt; switch (section) { case "Scanners Group": groupName = `Сбросить группу сканирования ${streamTxt}?`; break; case "Camera Group": groupName = `Сбросить группу агрегирования ${streamTxt}?`; break; case "Pallet Group": groupName = `Сбросить группу палетирования ${streamTxt}?`; break; case "Marker Group": groupName = `Сбросить группу маркировки ${streamTxt}?`; break; default: groupName = section; break; } $("#groupReset").text(groupName); $("#spanReset").text(section); $("#streamReset").text(streamName); pageselect("modalReset"); } function resetRejectorSectionModal(section, streamName) { let groupName = ""; if (!streamName) streamName = 'STREAM_0'; let streamTxt = STREAM_NAME[streamName].streamTxt; switch (section) { case "Scanners Group": groupName = `Сбросить бракиратор группы сканирования ${streamTxt}?`; break; case "Camera Group": groupName = `Сбросить бракиратор группы агрегирования ${streamTxt}?`; break; case "Pallet Group": groupName = `Сбросить бракиратор группы палетирования ${streamTxt}?`; break; default: groupName = section; break; } $("#groupResetRejector").text(groupName); $("#spanResetRejector").text(section); $("#streamRejector").text(streamName); pageselect("modalResetRejector"); } //запись лога на странице бэкапа function writeToLog(message, target) { let formatted = new Date().toTimeString().match(/^([0-9]{2}:[0-9]{2}:[0-9]{2})/)[0]; let wtf = $('#' + target); wtf.append(formatted + " : " + message + "\r\n"); let height = wtf[0].scrollHeight; wtf.scrollTop(height); } function clearLog(target) { $("#" + target).empty(); } function closeTask() { let taskId = $('#modalEndTask .taskText').data('taskId'); stompClient.send("/app/task/close", {}, taskId); customHistory.back(); $('#loading').removeClass('hide'); } function openModalEndTask() { let taskName = $('#page2 #confs .data.active').text(); let taskId = $('#page2 #confs .data.active').data('taskId'); $('#modalEndTask .taskText').html(taskName); $('#modalEndTask .taskText').data('taskId', taskId); pageselect("modalEndTask"); } function downloadTaskReport(format, taskId) { $.ajax({ type: 'GET', url: '/api/reports/task/' + taskId, data: { format: format }, success: function (data, textStatus, jqXHR) { let disposition = jqXHR.getResponseHeader('Content-Disposition'); let type = jqXHR.getResponseHeader('Content-Type'); fileDownload(jqXHR.responseText, disposition, type); }, error: function (jqXHR, textStatus, errorThrown) { console.log("ERROR : ", jqXHR.responseText); viewError("page2", jqXHR.responseText); } }); } function fileDownload(data, disposition, type) { let filename = "report.xml"; if (disposition && disposition.indexOf('attachment') !== -1) { let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/; let matches = filenameRegex.exec(disposition); if (matches != null && matches[1]) { filename = matches[1].replace(/['"]/g, ''); filename = filename.replace(/UTF-8/g, ''); } } const blob = new Blob([data], {type: type}); const url = window.URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.setAttribute('download', decodeURI(filename)); link.click(); } function counterProcess(data) { let counterList = JSON.parse(data.body.toString()); for (let counter of counterList) { let isPalletCounter = counter.name.indexOf('PalletCounter') != -1; if (counter.status == "ON") { $("." + counter.name + " .good").text(counter.read); $("." + counter.name + " .verified").text(counter.verified); $("." + counter.name + " .bad").text(counter.notRead); $("." + counter.name + "> .packed").text(counter.packed); $("." + counter.name + "> .unpacked").text(counter.unpacked); $("." + counter.name).parent().removeClass("disable"); if (isPalletCounter) { $("." + counter.name + " .packed").text(counter.packed); $("." + counter.name).parent().parent().removeClass("disable"); if (counter.unpacked > 0) $("." + counter.name + " .good").text(`${counter.read} из ${counter.unpacked}`); } } } } function resetCounter() { for (let counter of counters) { let isPalletCounter = counter.name.indexOf('PalletCounter') != -1; $("." + counter.name + " .good").text(0); $("." + counter.name + " .verified").text(0); $("." + counter.name + " .bad").text(0); $("." + counter.name + "> .packed").text(0); $("." + counter.name + "> .unpacked").text(0); if (isPalletCounter) { $("." + counter.name + " .packed").text(0); if (counter.unpacked > 0) $("." + counter.name + " .good").text(`${0} из ${0}`); $("." + counter.name).parent().parent().addClass("disable"); } $("." + counter.name).parent().addClass("disable"); } } function viewCounter() { for (let counter of counters) { let isPalletCounter = counter.name.indexOf('PalletCounter') != -1; $("." + counter.name).parent().removeClass("disable"); if (isPalletCounter) { $("." + counter.name).parent().parent().removeClass("disable"); } } } function itemCounterProcess(data) { let counterList = JSON.parse(data.body.toString()); for (let counter of counterList) { let currentValue = counter.currentValue; let maxValue = counter.maxValue; $("." + counter.name + " .title").text(counter.title !== 'null' ? counter.title : 'ОТСУТСВУЕТ'); if (counter.itemStatus == 'DEFECTIVE') { $("." + counter.name + " .subtitle").addClass('bad'); } else { $("." + counter.name + " .subtitle").removeClass('bad'); } $("." + counter.name + " .subtitle").text(counter.subtitle); $("." + counter.name + " .currentValue").text(currentValue); $("." + counter.name + " .subValue").text(counter.subValue); $("." + counter.name + " .maxValue").text(maxValue); if (counter.status == "ON") $("." + counter.name).parent().removeClass("disabled"); else $("." + counter.name).parent().addClass("disabled"); let progressBar = $("." + counter.name + " .progress-bar") .attr('aria-valuenow', currentValue) .attr('aria-valuemax', maxValue); if (maxValue != 0) { var percentage = currentValue * 100 / maxValue; progressBar.css('width', percentage + '%') .parent() .removeClass("active"); $("." + counter.name + " .from").show(); $("." + counter.name + " .maxValue").show(); } else { progressBar.css('width', '100%') .parent() .addClass("active"); $("." + counter.name + " .from").hide(); $("." + counter.name + " .maxValue").hide(); } } } function pauseSection(groupName, streamName) { if (!streamName) streamName = null; if (streamName === '') streamName = null; let groupStream = { groupName: groupName, streamName: streamName}; stompClient.send("/app/pause", {}, JSON.stringify(groupStream)); customHistory.back(); } function resetSection(section, streamName) { let groupStream = { groupName: section, streamName: streamName}; stompClient.send("/app/reset", {}, JSON.stringify(groupStream)); customHistory.back(); } function resetRejectorSection(section, streamName) { let groupStream = { groupName: section, streamName: streamName}; stompClient.send("/app/reset/rejector", {}, JSON.stringify(groupStream)); customHistory.back(); } function resumeSection(section, streamName) { if (!streamName) streamName = null; if (streamName === '') streamName = null; let groupStream = { groupName: section, streamName: streamName}; stompClient.send("/app/resume", {}, JSON.stringify(groupStream)); } function processPauseMessage(data) { pauseResume(JSON.parse(data.body.toString()), false); } function processResumeMessage(data) { pauseResume(JSON.parse(data.body.toString()), true); } function pauseResume(groupStream, state) { // state = 0/false-pause, 1/true-resume let streamList; if (groupStream.streamName) streamList = [groupStream.streamName] else { streamList = JSON.parse(JSON.stringify(systemProperties.streamNameList)); streamList.push("STREAM_ALL") } streamList.forEach(streamName => { let cnt; let stream = STREAM_NAME[streamName].counter; switch (groupStream.groupName) { case "Pallet Group": case "PALLET": cnt = "actionPalletBtn" + stream; $(".btnClosePalletModal").prop("disabled", !state); break; case "Scanners Group": case "SCANNER": cnt = "StampCounter" + stream; $("." + cnt).parent().removeClass((state ? "inforow" : "inforowOff")); $("." + cnt).parent().addClass((state ? "inforowOff" : "inforow")); break; case "Camera Group": case "PACK": cnt = "PackCounter" + stream; $("#btnClosePackModal").prop("disabled", !state); // Если есть бракиратор в группе агрегирования if (devices.find(device => { return device.type == "REJECTOR" && device.groupName == groupStream.groupName; })) { $("." + cnt).parent().find(".but > .btn-reset-rejector").removeClass("invisible"); } if (!state) $('#pack-view-page').find('.' + streamName).addClass('PAUSED'); else $('#pack-view-page').find('.' + streamName).removeClass('PAUSED'); let pack_group_not_paused = $('#pack-view-page').find('.PAUSED').length === 0; $(".PackCounterAllStream").parent().find(".but > ." + (pack_group_not_paused ? "on" : "off")).removeClass("hide"); $(".PackCounterAllStream").parent().find(".but > ." + (pack_group_not_paused ? "off" : "on")).addClass("hide"); break; case "Marker Group": case "MARKER": cnt = "MarkerCounter" + stream; $("." + cnt).parent().removeClass((state ? "inforow" : "inforowOff")); $("." + cnt).parent().addClass((state ? "inforowOff" : "inforow")); break; default: break; } if (cnt) { $("." + cnt).parent().find(".but > ." + (state ? "on" : "off")).removeClass("hide"); $("." + cnt).parent().find(".but > ." + (state ? "off" : "on")).addClass("hide"); } }) } function cursorToEnd(obj) { var start, end; start = end = obj.value.length; if (obj.setSelectionRange) { obj.focus(); obj.setSelectionRange(start, end); } else if (obj.createTextRange) { var range = obj.createTextRange(); range.collapse(obj); range.moveEnd('character', end); range.moveStart('character', start); range.select(); } } function unclosedPallet(data) { $("#noClosedPallet").addClass("hide"); $("#btnStart").removeClass("hide"); $("#btnCloseCurrentPallet").addClass("hide"); $("#startText").removeClass("hide"); $("#configText").removeClass("hide"); let pallet = JSON.parse(data.body.toString()); let taskName = ""; let taskId = $('#page2 #confs .data.active').data('taskId'); for (let i = 0; i < (tasks.length); i++) { let conf = tasks[i]; if (conf.id == pallet.taskId) { taskName = conf.name; break; } } let currentPalletStatus = pallet.status; let packs = pallet.packs.length; if (currentPalletStatus == "INCOMPLETE" && packs != 0) { if (taskId != pallet.taskId) { $("#noClosedPallet").removeClass("hide"); $('#noClosedPallet').data('palletId', pallet.id); $("#noClosedPallet").html("В задании " + taskName + " есть незавершённая палета № " + pallet.palletNumber + ". Завершить палету и запустить задание " + $("#configText").html() + " ?"); $("#btnStart").addClass("hide"); $("#configText").addClass("hide"); $("#btnCloseCurrentPallet").removeClass("hide"); $("#startText").addClass("hide"); } } pageselect("modalStart"); } function getPropertyPalletGroupPauseEnabled() { if (systemProperties == null) return true; // совместимость со старыми версиями return (systemProperties.palletGroupPauseEnabled !== false); } function sendFileAjax(selectFile, url) { // Create a Deferred let deferred = $.Deferred(); if (typeof selectFile == 'undefined') { deferred.reject("Не выбран файл"); } else { let data = new FormData(); data.append('fileXml', selectFile); $.ajax({ type: "POST", enctype: 'multipart/form-data', url: url, data: data, processData: false, contentType: false, cache: false, timeout: 1000000, success: function (data, textStatus, jqXHR) { console.log("SUCCESS : ", data); deferred.resolve(); }, error: function (jqXHR, textStatus, errorThrown) { console.log("ERROR : ", jqXHR.responseText); viewError("page3_1", jqXHR.responseText); deferred.reject(jqXHR.responseText); } }); } return deferred; } function fixGroupSeparatorCharacters(selector) { let altValue = ''; selector.keydown(function (e) { console.log(`keyCode= ${e.keyCode}, altKey= ${e.altKey}, ctrlKey=${e.ctrlKey}, shiftKey= ${e.shiftKey}, key=${e.key}`); if (e.altKey) { // Код самой клавиши Alt if (e.which != 18) { altValue += e.which } // Сравниваем набор кодов после нажатия клавиши Alt с цифровым кодом 029 (коды клавиатуры 96, 98, 105) // или последовательностью Insert, Arrow Down, Page Up (коды клавиатуры 45, 40, 33) if (altValue === '969698105' || altValue === '9698105' || altValue === '454033') { this.value += String.fromCharCode(29); } e.preventDefault(); e.stopPropagation(); } else if (e.ctrlKey) { // Сравниваем код после нажатия клавиши Ctrl с кодом клавиатуры 221 if (e.which == 221) { this.value += String.fromCharCode(29); e.preventDefault(); e.stopPropagation(); } } }); selector.keyup(function (e) { if (e.altKey === false) { altValue = ''; } }); } var entityMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/', '`': '`', '=': '=' }; function escapeHtml (string) { return String(string).replace(/[&<>"'`=\/]/g, function (s) { return entityMap[s]; }); } function hashCode(s) { return s.split("").reduce(function (a, b) { a = ((a << 5) - a) + b.charCodeAt(0); return a & a }, 0); } function filterCurrentTimeTask() { filterDateTask = new Date(); confFill() } function filterAllTask() { filterDateTask = null; confFill() } function filterStartDateTask(date) { if (date) { let filterDate = dateFormat(date) filteredTasks = tasks.filter((task, index) => { return dateFormat(new Date(task.dueDate)) === filterDate }) } else { filteredTasks = tasks; } } function isNewDayFilter() { if (filterDateTask) { return filterDateTask.getDate() !== new Date().getDate(); } } function filterTaskNewDay() { if(isNewDayFilter()) { filterDateTask = new Date() confFill() } } function getSystemInfo() { subscribeOnce("/app/systemInfo").then(sysInfoProcess); } // Скрываем блок вспомогательного кода function isSingle() { if (systemProperties.single) { $('.link-mode').addClass("hide"); } else { $('.link-mode').removeClass("hide"); } } // Скрываем единиц продукции в палет function isAddItemToPallet() { console.log("777777",systemProperties.addItemToPallet) if (systemProperties.addItemToPallet === true) { $('.addItemToPallet').removeClass("hide"); $('#page-palletEdit .filter input').attr('placeholder', "коробка" + " / единица продукции") $('#page-palletEdit .btnAddPackItemToPallet').html(" Добавить коробку
или продукцию") } else { $('.addItemToPallet').addClass("hide"); $('#page-palletEdit .filter input').attr('placeholder', "коробка") $('#page-palletEdit .btnAddPackItemToPallet').html(' Добавить коробку') } } function viewHideCounters(counterList) { console.log("**********", counterList); for (let streamnameKey in STREAM_NAME) { let stream = STREAM_NAME[streamnameKey].counter; showHideCounterPrev( 'StampCounter' + stream, counterList.findIndex(counter => counter.name === 'StampCounter' + stream) != -1); showHideCounterNext( 'AggregationStampCounter' + stream, counterList.findIndex(counter => counter.name === 'AggregationStampCounter' + stream) != -1); showHideCounterPrev( 'PackCounter' + stream, counterList.findIndex(counter => counter.name === 'PackCounter' + stream) != -1); showHideCounterNext( 'PackItemCounter' + stream, counterList.findIndex(counter => counter.name === 'PackItemCounter' + stream) != -1); showHideCounterNext( 'StampLinkPackCounter' + stream, counterList.findIndex(counter => counter.name === 'StampLinkPackCounter' + stream) != -1); showHideCounterPrev( 'PalletCounter' + stream, counterList.findIndex(counter => counter.name === 'PalletCounter' + stream) != -1); showHideCounterNext( 'PalletItemCounter' + stream, counterList.findIndex(counter => counter.name === 'PalletItemCounter' + stream) != -1); showHideCounterNext( 'PalletStampCounter' + stream, counterList.findIndex(counter => counter.name === 'PalletStampCounter' + stream) != -1, ''); showHideCounterPrev( 'PalletScannerCounter' + stream, counterList.findIndex(counter => counter.name === 'PalletScannerCounter' + stream) != -1, ''); showHideCounterPrev( 'MarkerCounter' + stream, counterList.findIndex(counter => counter.name === 'MarkerCounter' + stream) != -1); } } function showHideCounterPrev(counterName, visible, page) { if (page === undefined) page = '#page4'; let counter = $(page + ' .' + counterName); if (visible) { counter.removeClass("hide"); counter.prev().removeClass("span2"); } else { counter.addClass("hide"); counter.prev().addClass("span2"); } } function showHideCounterNext(counterName, visible, page) { if (page === undefined) page = '#page4'; let counter = $(page + ' .' + counterName); if (visible) { counter.removeClass("hide"); counter.next().removeClass("hide"); } else { counter.addClass("hide"); counter.next().addClass("hide"); } } function extractSSCCCode(value) { const SSCC_AI = '00'; try { const answer = parseBarcode(value); const ssccItem = answer.parsedCodeItems.find(codeItem => codeItem.ai === SSCC_AI); if (ssccItem) { let code = SSCC_AI + ssccItem.data; if (code.match(/00\d{18}/g) !== null) return code; } } catch (e) { console.log(`Ошибка при разборе кода ${value}: ${e}`); } return value; } // Открываем используемые группы устройств function excludeCategory() { let streamList = systemProperties.streamNameList; Object.values(GROUPS_DEVICE).forEach(group => { $(group.idHtml).addClass("hide"); }); counters.forEach(counter => { $(GROUPS_DEVICE[counter.groupName].idHtml).removeClass("hide"); }); streamList.forEach(streamName => { Object.values(GROUPS_DEVICE).forEach(group => { viewGroupCounters(group, streamName); }) }) } function viewGroupCounters(group, streamName) { let streamTxt = STREAM_NAME[streamName].counter if (counters.findIndex(counter => counter.groupName === group.groupName && counter.streamName === streamName) !== -1) { $(group.idHtml + streamTxt).removeClass("hide"); } else { $(group.idHtml + streamTxt).addClass("hide"); } } function sendCheckLineStatusAjax() { let deferred = $.Deferred(); $.ajax({ type: 'GET', data: {}, url: '/line/check', success: function (data) { console.log("SUCCESS", data); viewErrorReset('manual-page'); $('.btn_line_off_disable').removeClass('disabled'); if(!data.kit) { $('.manual_kit').addClass('disabled'); $('.task_kit_view').hide(); } else { $('.task_kit_view').show(); } if(!data.pack) { $('.manual_pack').addClass('disabled'); $('.task_pack_view').hide(); } else { $('.task_pack_view').show(); } if(!data.pallet){ $('.manual_pallet').addClass('disabled'); $('.task_pallet_view').hide(); } else { $('.task_pallet_view').show(); } deferred.resolve(data); }, error: function (jqXHR, data) { console.log("ERROR : ", jqXHR.responseText); viewErrorReset('manual-page'); viewError("manual-page", jqXHR.responseText); $('.btn_line_off_disable').addClass('disabled'); deferred.reject(data); } }); return deferred.promise(); } function startLogConsole() { if (console.everything === undefined && debug_log) { console.everything = []; console.defaultLog = console.log.bind(console); console.log = function(){ console.everything.push({"type":"log", "datetime":Date().toLocaleString(), "value":Array.from(arguments)}); console.defaultLog.apply(console, arguments); } console.defaultError = console.error.bind(console); console.error = function(){ console.everything.push({"type":"error", "datetime":Date().toLocaleString(), "value":Array.from(arguments)}); console.defaultError.apply(console, arguments); } console.defaultWarn = console.warn.bind(console); console.warn = function(){ console.everything.push({"type":"warn", "datetime":Date().toLocaleString(), "value":Array.from(arguments)}); console.defaultWarn.apply(console, arguments); } console.defaultDebug = console.debug.bind(console); console.debug = function(){ console.everything.push({"type":"debug", "datetime":Date().toLocaleString(), "value":Array.from(arguments)}); console.defaultDebug.apply(console, arguments); } stompClient.debug = (log) => { if (JSON.stringify(log).includes('SUBSCRIBE')) { return; } console.log(log); }; } } function saveLogConsole() { download(JSON.stringify(console.everything), "consoleLog.txt", 'text/plain') } function download(data, filename, type) { var file = new Blob([data], {type: type}); if (window.navigator.msSaveOrOpenBlob) // IE10+ window.navigator.msSaveOrOpenBlob(file, filename); else { // Others var a = document.createElement("a"), url = URL.createObjectURL(file); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); setTimeout(function() { document.body.removeChild(a); window.URL.revokeObjectURL(url); }, 0); } } function debugConsoleLogShow() { if (systemProperties.stopTaskOnDebugConsoleLog) { debug_log = true; $('#debug-log').show(); } else { debug_log = false; $('#debug-log').hide(); } } function showSettingsPage() { pageselect("page3"); }