var numbers = []; var sms = []; $(document).ready(function () { noticer = new Noticer; $("button").button(); $("#tabs").tabs({ activate: function( event, ui ) { ({ 0: () => { showNumbers($("#accordion-numbers .ui-accordion-content-active")) }, 1: () => { showSMS($("#accordion-sms .ui-accordion-content-active")) }, 2: () => {}, 3: () => {} })[$(this).tabs( "option", "active" )](); $("#add-number").button( "option", "disabled", $(this).tabs( "option", "active" ) > 0 ); } }); $("#update").button("option", "icon", "ui-icon-refresh"); $("#add-number").button("option", "icon", "ui-icon-plusthick"); $("#logout").button("option", "icon", "ui-icon-power"); $("#update").click(() => { ({ 0: () => { generateGroupNumbers($("#accordion-numbers .ui-accordion-content-active")) }, 1: () => { generateListSMS($("#accordion-sms .ui-accordion-content-active")) }, 2: () => { noticer.success('Вкладка "USSD"') }, 3: () => { noticer.success('Вкладка "Сервер"') } })[$("#tabs").tabs( "option", "active" )]() }); $("#add-number").click(() => { addNumber($("#accordion-numbers .ui-accordion-content-active")) }); $("body").fadeTo(500, 1); $("#search").on("input", function () { ({ 0: () => { showNumbers($("#accordion-numbers .ui-accordion-content-active")) }, 1: () => { showSMS($("#accordion-sms .ui-accordion-content-active")) }, 2: () => {}, 3: () => {} })[$("#tabs").tabs( "option", "active" )]() }).keydown(function (e) { e.key == "Escape" && ($(this).val(""), ({ 0: () => { showNumbers($("#accordion-numbers .ui-accordion-content-active")) }, 1: () => { showSMS($("#accordion-sms .ui-accordion-content-active")) }, 2: () => {}, 3: () => {} })[$("#tabs").tabs( "option", "active" )]() ) }); loadNumbers(); loadSMS(); }) async function request(query, type, queryData = {}) { let response = await fetch('.', { method: 'POST', headers: { 'Content-Type': 'application/json;charset=utf-8' }, body: JSON.stringify({ ...queryData, query: query }) }); if (!response.ok) throw new Error(`Произошла неизвестаня ошибка: ${response.status}`); const data = await response[type](); return data; } function isJSON(str) { try { return (JSON.parse(str) && !!str); } catch (e) { return false; } } function isNumeric(value) { return /^-?\d+$/.test(value); } function loadNumbers() { request('listsgroups', 'text').then(data => { data.error ? noticer.error(data.message) : generateListsGroups(data); }).catch(error => { noticer.error(error.message); }); } function loadSMS() { request('smsnumbers', 'text').then(data => { data.error ? noticer.error(data.message) : generateListsSMSNumber(data); }).catch(error => { noticer.error(error.message); }); } function generateListsSMSNumber(data) { if (!$(data).children().length) { $("#tabs-sms").html('

SMS отсутствуют

'); return; } $("#tabs-sms").html(data); $("#accordion-sms").accordion({ heightStyle: "content", create: function( event, ui ) { generateListSMS(ui.panel); }, beforeActivate: function( event, ui ) { generateListSMS(ui.newPanel); } }) } function generateListSMS(panel) { if (!$("#accordion-sms").children().length) { noticer.warning("SMS отсутствуют"); $("#tabs-sms").html('

SMS отсутствуют

'); return; } request('listsms', 'json', { to: panel.data("to") }).then(data => { if (isJSON(data) && JSON.parse(data).error) noticer.error(JSON.parse(data).message); else { sms = data; showSMS(panel); } }).catch(error => { noticer.error(error.message); }); } function showSMS(panel, data = sms.filter(e => e.from.includes($("#search").val()))) { (new divNotFoundNumbers).remove(); let body = panel.find('.body').html(''); $(data).each((i, j) => { let row = $(``); row.append(`${j.date}`); row.append(`${j.from}`); row.append(`${j.text}`); body.append(row); row.click(function() { viewSMS(panel, $(this).data('sms-id'), j.from); }); }); if (!body.children().length) (new divNotFoundNumbers).push(); } function viewSMS(panel, id, number) { request('viewsms', 'text', {id: id}).then(data => { if (isJSON(data) && JSON.parse(data).error) noticer.error(JSON.parse(data).message); else { showViewSMS(data, [ { id: "btn-delete", text: "Удалить", icon: "ui-icon-trash", click: function() { delSMS(panel, $(this)); } } ], `SMS от ${number}`); } }).catch(error => { noticer.error(error.message); }); } function showViewSMS(data, actionButton, title) { let form = $(data); form.appendTo('body').dialog({ title: title, height: 'auto', width: 'auto', resizable: false, modal: true, show: { effect: "fade", duration: 500 }, close: function(event, ui) { $(this).dialog('destroy').remove() }, buttons: [ ...actionButton, { text: "Отмена", icon: "ui-icon-cancel", click: function() { $(this).dialog("close"); } } ] }); } function delSMS(panel, currentWindow) { let id = $('#sms-content').data('id'); let from = $('#sms-content').data('from'); request('delsms', 'json', { id: id }).then(data => { if (data.error) noticer.error(data.message); else { noticer.success(`SMS от ${from} было удалено`); generateListSMS(panel); currentWindow.dialog("close"); } }).catch(error => { noticer.error(error.message); }); } function generateListsGroups(data) { if (!$(data).children().length) { $("#tabs-numbers").html('

Номера телефонов отсутствуют

'); return; } $("#tabs-numbers").html(data); $("#accordion-numbers").accordion({ heightStyle: "content", create: function( event, ui ) { generateGroupNumbers(ui.panel); }, beforeActivate: function( event, ui ) { generateGroupNumbers(ui.newPanel); } }); } function generateGroupNumbers(panel) { if (!$("#accordion-numbers").children().length) { noticer.warning("Номера телефонов отсутствуют"); $("#tabs-numbers").html('

Номера телефонов отсутствуют

'); return; } request('groupnumbers', 'json', { group: panel.data("group-name") }).then(data => { if (isJSON(data) && JSON.parse(data).error) noticer.error(JSON.parse(data).message); else { numbers = data; showNumbers(panel); } }).catch(error => { noticer.error(error.message); }); } function showNumbers(panel, data = numbers.filter(e => e.number.includes($("#search").val()))) { (new divNotFoundNumbers).remove(); let body = panel.find('.body').html(''); $(data).each((i, j) => { let row = $(``); row.append(`${j.number}`); row.append(`${j.list}`); row.append(`${j.all_cc}`); row.append(`${j.white_cc}`); row.append(`${j.black_cc}`); row.append(`${j.comment}`); body.append(row); row.click(function() { editNumber(panel, $(this).data('number')); }); }); if (!body.children().length) (new divNotFoundNumbers).push(); } function divNotFoundNumbers() { let notFound = $('.failNumbers'); let divTable = $('.body-rows'); let divFound = $('
'); divFound.css({ "color": "#333", "text-align": "center", "padding": "20px 0 20px 0" }); this.push = function(text = 'Нет номеров') { divTable.append(divFound.html(text)); } this.remove = function() { notFound.remove(); } } function editNumber(panel, number) { request('editnumber', 'text', {number: number}).then(data => { if (isJSON(data) && JSON.parse(data).error) noticer.error(JSON.parse(data).message); else { showEditNumber(data, [ { id: "btn-save", text: "Сохранить", icon: "ui-icon-check", click: function() { actionNumber(panel, $(this), 'updatenumber'); } }, { id: "btn-delete", text: "Удалить", icon: "ui-icon-trash", click: function() { delNumber(panel, $(this)); } } ], `Редактирование номера ${number}`); } }).catch(error => { noticer.error(error.message); }); } function showEditNumber(data, actionButton, title) { let form = $(data); form.appendTo('body').dialog({ title: title, height: 'auto', width: 'auto', resizable: false, modal: true, show: { effect: "fade", duration: 500 }, close: function(event, ui) { $(this).dialog('destroy').remove() }, buttons: [ ...actionButton, { text: "Отмена", icon: "ui-icon-cancel", click: function() { $(this).dialog("close"); } } ] }); $('#number-group, #number-list').selectmenu({ width: 200 }); } function actionNumber(panel, currentWindow, query) { let pattern_number = /^\+7\d{10}$/g; let number = $('#number-number').val(); let group = $('#number-group').val(); let list = $('#number-list').val(); let all_cc = $('#number-all-cc').val(); let white_cc = $('#number-white-cc').val(); let black_cc = $('#number-black-cc').val(); let comment = $('#number-comment').val(); let error = false; if (number.match(pattern_number) === null) { noticer.warning("Номер не соответствует формату +7XXXXXXXXXX"); error = true; } if (!isNumeric(all_cc)) { noticer.warning("Общее количество звонков должно быть числом"); error = true; } if (all_cc < 0) { noticer.warning("Общее количество звонков не может быть отрицательным"); error = true; } if (!isNumeric(white_cc)) { noticer.warning("Белое количество звонков должно быть числом"); error = true; } if (white_cc < 0) { noticer.warning("Белое количество звонков не может быть отрицательным"); error = true; } if (!isNumeric(black_cc)) { noticer.warning("Черное количество звонков должно быть числом"); error = true; } if (black_cc < 0) { noticer.warning("Черное количество звонков не может быть отрицательным"); error = true; } if (error) return; request(query, 'json', { number: number, group: group, list: list, all_cc: parseInt(all_cc), white_cc: parseInt(white_cc), black_cc: parseInt(black_cc), comment: comment }).then(data => { if (data.error) noticer.error(data.message); else { query == 'write' ? noticer.success(`Номер ${number} был добавлен`) : noticer.success(`Номер ${number} был обновлен`); generateGroupNumbers(panel); currentWindow.dialog("close"); } }).catch(error => { noticer.error(error.message); }); } function addNumber(panel) { request('addnumber', 'text', { group: panel.data("group-name") }).then(data => { if (isJSON(data) && JSON.parse(data).error) noticer.error(JSON.parse(data).message); else { showEditNumber(data, [{ id: "btnSave", text: "Добавить", icon: "ui-icon-check", click: function() { actionNumber(panel, $(this), 'writenumber'); } }], "Добавление нового номера"); } }).catch(error => { noticer.error(error.message); }); } function delNumber(panel, currentWindow) { let number = $('#number-number').val(); let error = false; if (!number.length) { noticer.warning('Номер не может быть пуст'); error = true; } if (error) return; request('delnumber', 'json', { number: number }).then(data => { if (data.error) noticer.error(data.message); else { noticer.success(`Номер ${number} был удален`); generateGroupNumbers(panel); currentWindow.dialog("close"); } }).catch(error => { noticer.error(error.message); }); }