// Глобальные переменные и операции
if (!window.location.origin) {
window.location.origin = window.location.protocol + "//" +
window.location.hostname +
(window.location.port ? ':' + window.location.port : '');
}
var curUrl = window.location.pathname.split('/');
window.onunload = function() {
localStorage['JustCRM_lastURL'] = document.location;
};
// Запоминаем последнего клиента, который был просмотрен в справочнике клиентов, или call-центра
// При это это не должна быть дочерняя страница, например почтовый клиент
if (curUrl.length > 2 && curUrl.length < 5 && (curUrl[1] == 'clients' || curUrl[1] == 'callcenter')) sessionStorage['JustCRM_lastClient_id'] = curUrl[3];
// Если указано, что необходимо вернуться по определенному URL, то определяем глобальную переменную и удаляем куки
if (getCookie('toBack')) {
var toBack = getCookie('toBack');
deleteCookie('toBack');
}
// Изменение в функционале ядра jQuery
// Регистронезависимый метод contains
$.expr[":"].contains = $.expr.createPseudo(function(arg) {
return function(elem) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
// Событие появления элемента
(function($) {
var defaults = {
callback: function() {},
runOnLoad: true,
frequency: 100,
previousVisibility: null
};
var methods = {};
methods.checkVisibility = function(element, options) {
if (jQuery.contains(document, element[0])) {
var previousVisibility = options.previousVisibility;
var isVisible = element.is(':visible');
options.previousVisibility = isVisible;
if (previousVisibility == null) {
if (options.runOnLoad) {
options.callback(element, isVisible);
}
} else if (previousVisibility !== isVisible) {
options.callback(element, isVisible);
}
setTimeout(function() {
methods.checkVisibility(element, options);
}, options.frequency);
}
};
$.fn.visibilityChanged = function(options) {
var settings = $.extend({}, defaults, options);
return this.each(function() {
methods.checkVisibility($(this), settings);
});
};
})(jQuery);
// Изменение в функционале ядра jQuery - Конец
$(function() {
// Глобальный таймер событий
setInterval(function() {
// Запрос на число новыйх сообщений в чате
var urii = window.location;
var urlMessage = urii.protocol + '//' + urii.hostname + '/api/chat1/sse/apiChat.php?GUID=' + guid + '&allNewMessage=true';
$.ajax({
url: urlMessage,
type: 'GET',
data: '',
cache: false,
success: function(respond, textStatus, jqXHR) {
if (respond != '0') {
$('#addMessengerMarker').text(respond).show();
} else {
$('#addMessengerMarker').text('0').hide();
}
},
error: function(jqxhr, status, errorMsg) {
console.log(jqxhr, status, errorMsg);
},
complete: function() {}
});
}, 3000);
// Распознавание адреса
$('.search-map').on('click', function() {
send_request($(this).parent().prev('input').val(), 'data-exchange', 'send_request_dadata');
var waiting = setInterval(function() {
if (typeof(dataResult) != 'undefined' && typeof(dataResult.suggestions) != 'undefined' && typeof(dataResult.suggestions[0]) != 'undefined') {
if (typeof(dataResult.error) != 'undefined') {
clearTimeout(waiting);
dataResult = {};
}
popup('good', 'Успешно!', 'Адрес распознан и обработан!', true, false);
$('#order-delivery-address').val(dataResult.suggestions[0].unrestricted_value);
$('#order-delivery-coords').val(dataResult.suggestions[0].data.geo_lat + ',' + dataResult.suggestions[0].data.geo_lon);
clearTimeout(waiting);
dataResult = {};
$('#order-delivery-address').trigger('input');
}
}, 100);
});
// Распознавание адреса с целью определения региона
$('.search-map1').on('click', function() {
send_request($(this).parent().prev('input').val(), 'data-exchange', 'send_request_dadata');
var waiting = setInterval(function() {
if (typeof(dataResult) != 'undefined' && typeof(dataResult.suggestions) != 'undefined' && typeof(dataResult.suggestions[0]) != 'undefined') {
if (typeof(dataResult.error) != 'undefined') {
clearTimeout(waiting);
dataResult = {};
}
popup('good', 'Успешно!', 'Адрес распознан и обработан!', true, false);
$('#address').val(dataResult.suggestions[0].unrestricted_value);
$('#address_city').val(dataResult.suggestions[0].data.city);
clearTimeout(waiting);
dataResult = {};
}
if (typeof(dataResult) != 'undefined' && typeof(dataResult.suggestions) != 'undefined' && typeof(dataResult.suggestions[0]) == 'undefined') {
popup('bad', 'Внимание!', 'Не удалось распознать адрес! Введите координаты вручную.', true, false);
clearTimeout(waiting);
dataResult = {};
}
}, 100);
});
// Пикеры даты и времени и прочее...
$('.date').datepicker({
minDate: '0',
beforeShow: function(input, obj) {
$(input).after($(input).datepicker('widget'));
}
});
$('.date1').datepicker({
beforeShow: function(input, obj) {
$(input).after($(input).datepicker('widget'));
}
});
$('.date11').datepicker();
$('.date2').datepicker({
minDate: '1',
beforeShow: function(input, obj) {
$(input).after($(input).datepicker('widget'));
}
});
$('.time').on('click', function() {
$(this).clockInput(false);
});
// Закрываем таймпикер, если кликнули вне его пределов
$(document).click(function(event) {
if ($(event.target).closest('.time').length == 0 && $(event.target).closest('.jq-ci').length == 0) {
$('.jq-ci').remove();
}
});
$('.select22').select2();
// Часы
digitalClock();
// Тек. год в футер
$('#yearCur').text(new Date().getFullYear());
// Textarea c HTML-форматированием
if ($('.editableHTML')) {
$('.editableHTML').each(function(index, element) {
$(element).parent('div').append('
');
});
$('.editable').each(function(index, element) {
$(element).html($(element).prev().text());
this.contentEditable = true;
});
}
$(document).on('change keyup focus', '.editable', function() {
$(this).prev('.editableHTML').html($(this).html());
});
// // Выделение пункта меню в зависимости от модуля
// if (typeof(module) == 'undefined') module = 'main';
// $('[data-menu="' + module + '"]').children('.point').css({ 'background': '#8018a7', 'color': '#ffffff' }).children('i').css({ 'color': '#ffffff' });
// Выделение пункта меню в зависимости от модуля
if (typeof(module) == 'undefined' || module.length === 0) module = 'tasks';
var currentModule = ($('[data-menu="' + module + '"]').length > 0) ? $('[data-menu="' + module + '"]') : $('[data-menu="' + module + '/' + submodule + '"]');
if (currentModule.length === 0) currentModule = $('[data-menu="' + module + '_' + moduleFilter + '"]');
currentModule.children('.point').addClass('selected').css({ 'background': '#8018a7', 'color': '#ffffff' }).children('i').css({ 'color': '#ffffff' });
// Если это меню с подпунктами
// Раскладываем подменю
currentModule.closest('[data-sub-menu]').css('display', 'inline');
// Не переходить по ссылке, если есть субменю, а раскрыть/сложить его
$('[data-main-menu]').on('click', function(e) {
e.preventDefault();
if ($(this).next('[data-sub-menu]').css('display') == 'inline') {
$(this).next('[data-sub-menu]').hide();
return;
}
$('[data-sub-menu]').hide();
$(this).next('[data-sub-menu]').show();
});
// Если это пункты меню с переходом в один раздел (работают как фильтры)
$('[data-menu]').on('click', function(e) {
if ($(this).attr('href').indexOf('_filter') !== -1) {
if (e.target.tagName == 'I') return;
e.preventDefault();
var hrefFilter = $(this).attr('href').split('_');
location.href = hrefFilter[0] + '?filter_parametres=' + hrefFilter[1] + '_' + hrefFilter[2];
}
});
// Панель статистики менеджера
$('#my_stats').on('click', function(e) {
$('#manager-stat').show();
});
$('#manager-stat-close').on('click', function(e) {
$('#manager-stat').hide();
});
// Скрыть/показать главное меню
if (getCookie("hideMenu") == "true") {
//$('#main-page .c').last().css({'padding-left':'1.8em'});
$('#slide').css({ 'display': 'block' });
}
$('body').on('click', '#slideOut', function() {
$('#main-page .c').last().css({ 'padding-left': '0.7em' });
$('#menu-cell').addClass('menu-hide');
$('#slideIn').fadeIn(250);
$('#slide').css({ 'left': '-14.5em', 'display': 'block' });
setCookie("hideMenu", "true");
});
$('body').on('click', '#slideIn', function() {
$('#main-page .c').last().css({ 'padding-left': '0.5em' });
$('#menu-cell').removeClass('menu-hide').removeClass('menu-over');
$('#slideOut').fadeIn(100);
$('#slideIn').fadeOut(100);
$('#slide').css({ 'display': 'none' });
setCookie("hideMenu", "false");
});
$('#slide').on('mouseenter', function() {
$('#main-page .c').last().css({ 'padding-left': '1.8em' });
$('#slideOut').fadeOut(100);
$('#slideIn').fadeOut(100);
$('#menu-cell').removeClass('menu-hide').addClass('menu-over');
$('#slide').css({ 'left': 0 });
$(document).mousemove(function(e) {
if (e.pageX >= 320) {
$('#slide').css({ 'left': '-14.5em', 'display': 'block' });
$('#slideIn').fadeIn(100);
$('#menu-cell').addClass('menu-hide');
$(document).unbind('mousemove');
}
});
});
// Добавление задачи
$('#add_tasks').on('click', function() {
if (document.location.pathname.indexOf('/_') >= 0) {
setTimeout(function() {
$('[name="tasks_object_url"').val(document.location);
var name = $('body').find('h2').first().text();
if (!$('#tasks_object_dop').length) $('#tasks_object').append('');
$('#_tasks_object').val(name);
}, 250);
}
});
// Если в исполнители выбрали всех, то выбираем всех
$('.select22-select-all').on('click', function() {
$('.select22 > option').prop('selected', true);
$('.select22').trigger('change');
});
$('.select22-unselect-all').on('click', function() {
$('.select22 > option').prop('selected', false);
$('.select22').trigger('change');
});
// Выбор иконки статуса
$('body').on('change', '.status-select', function() {
var val = $(this).val();
var i = $(this).parent().find('i');
var color = JSON.parse(i.attr('data-color'));
var icon = JSON.parse(i.attr('data-icon'));
i.css({ 'color': color[val] });
i.attr('class', 'fa fa-' + icon[val] + ' fa-lg status');
$(this).css({ 'border-color': color[val] });
});
// Перехватываем нажания клавиш
$(window).on('keydown', function(e) {
if (e.which === 13) {
var butt = $(document).find('[rel="yesconfirm"]');
butt.trigger('click');
}
});
// Очистка переменных сессии фильтра без отправки формы
$('body').on('click', '#clear', function() {
var uri = window.location;
uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '/clear';
});
// Редактирование списка телефонов
$('body').on('click', '.select-edit', function(e) {
var content = '';
var phone = '';
var obj = $(this).parent().prevAll("select");
var type = JSON.parse(obj.attr('data-type'));
var id = obj.attr('id');
var json = obj.parents('form').find('#' + id + 'JSON').val();
var data = (json) ? json : '[["","0"]]';
data = JSON.parse(data.replace(/\s+/g, ''));
// Формируем контент для вывода редактирования списка со свойствами
$.each(data, function(key, value) {
var content1 = '';
var content2 = '';
var option = '';
phone = (!value[0]) ? '' : value[0];
var lastPhoneNumber = '';
if (getCookie('last_client')) lastPhoneNumber = '';
content1 += '
' +
'' +
'' +
lastPhoneNumber + '
' +
'
' +
'' +
'' +
'' +
'
';
content += content1 + option + content2;
});
// Показываем всплывающее сообщение c телефонами
popup('atten', 'Редактирование',
'',
true, false, id, 'save_select', 'phone_form');
drag('select-edit');
});
// Добавить телефон
$('body').on('click', '.add-select', function(e) {
drag('select-edit');
if ($('#select-edit').children('section').length === 10) {
popup('bad', '', 'Максимум 10 номеров.', true, false);
return;
}
var obj = $(this).parents('section');
var objNew = obj.clone();
objNew.find('input').val('');
obj.after(objNew);
});
// Удалить телефон
$('body').on('click', '.del-select', function(e) {
if ($('#select-edit').children('section').length === 1) {
popup('bad', '', 'Минимум 1 строка.', true, false);
return;
}
$(this).parents('section').remove();
});
// Подстановка номера телефона для звонка
$('#phone').on('change', function() {
$(this).siblings('span').attr('data-call', $('option:selected', this).val());
});
// Вставить в поле последний входящий телефон
$(document).on('click', '.add-phone', function() {
$(this).parent('div').children('input').val(getCookie('last_client'));
});
// Открываем страницу с контентом по имени и id
$('body').on('click', '[data-id]', function(e) {
e.stopPropagation();
//$(this).attr('data-id');
// Для элемента формы, когда надо выбрать строку (например radio)
if (e.target.className.indexOf('select') !== -1) return;
var uri = window.location;
var m = ($(this).attr('data-module')) ? $(this).attr('data-module') : module;
uri.href = uri.protocol + '//' + uri.hostname + '/' + m + '/' + $(this).attr('data-id');
});
// Копирование записи
$('body').on('click', '[data-copy]', function(e) {
e.stopPropagation();
popup('atten', 'Внимание!', 'Запись будет скопирована.', true, false, $(this).attr('data-copy') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-copy');
});
// Удаление записи
$('body').on('click', '[data-trash]', function(e) {
e.stopPropagation();
popup('atten', 'Внимание!', 'Данное действие необратимо! Вы подтверждаете удаление записи?', true, false, $(this).attr('data-trash') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-trash');
});
// Удаление записи
$('body').on('click', '[data-trash-science]', function(e) {
e.stopPropagation();
popup('atten', 'Внимание!', 'Данное действие необратимо! Вы подтверждаете удаление записи?', true, false, $(this).attr('data-trash-science') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-trash-science');
});
// Удаление записи без отправки на пред. документ
$('body').on('click', '[data-trash-no-back]', function(e) {
e.stopPropagation();
popup('atten', 'Внимание!', 'Данное действие необратимо! Вы подтверждаете удаление записи?', true, false, $(this).attr('data-trash-no-back') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-trash-no-back');
});
// Редактирование записи
$('body').on('click', '[data-edit]', function(e) {
e.stopPropagation();
var formFormType = $(this).parents('table').attr('data-form-type');
var formName = $(this).parents('table').attr('data-form');
var formType = $(this).parents('table').attr('data-type');
var url = $(this).attr('data-edit');
var uri = window.location;
var formType = (formFormType) ? '/' + formFormType : '';
uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '/' + formName + '/' + url + formType;
});
// Если задана переменная и есть такая форма, то отображаем её
if (typeof curUrl[2] !== 'undefined') {
if ($('#' + curUrl[2] + ' article').length > 0) {
popup('form', '', curUrl[2], false, false);
$('.status-select').change();
}
}
// Если задана переменная in-form, то также отображаем данную форму
// Может использоваться в нетипичных случаях, например в почтовом клиенте, размещенным в карточке клиента
var inForm = findGetParameter('in-form');
if (inForm && $('#' + inForm).length > 0) {
popup('form', '', inForm, false, false);
$('.status-select').change();
}
// Проигрывание аудио-записи
$('.play-record').on('click', function() {
$(this).html('');
});
//---- Аккордеон и виджет
$('.accordion h3').click(function() {
closeOpen($(this));
saveWidgetStatus($(this).parents('.accordion'), $(this));
});
function closeOpen(t) {
var hS = t.parent('section').outerHeight() - 20; // Зависит от padding
var h = t.next('div').children('.spanContent').height() + hS;
var curGroup = t.parents('.accordion').attr('data-group');
$('.accordion[data-group="' + curGroup + '"]').each(function(index, element) {
$(element).find('.acrdCont').css('height', '0px');
})
$('.accordion h3').removeClass('next');
t.addClass('next');
var hN = t.next('div');
if (hN.height() < 50) { hN.css('height', h); }
}
// Активируем перетаскивание виджета с сортировкой
$('.drag').on('mousedown', function() {
$('.drags').sortable({ revert: true, stop: dragReorder }).disableSelection();
$('.drags').sortable('enable');
});
// Изменение размера виджета
$('.resize').click(function() {
$(this).parents('.accordion').toggleClass('half-size');
resizeWidget(this);
saveWidgetStatus($(this).parents('.accordion'), $(this));
});
// Скрытие виджета
$('.hides').click(function() {
var cur = $(this).parents('.accordion');
cur.addClass('accordion-hide');
saveWidgetStatus(cur, $(this));
// Выводим в соседнем табе настройки видимости виджетов
var check = '' + cur.children('section').find('h3').text() + '';
$('.config').append(check);
});
// Аккордеон и виджет считываем информацию
if ($('.drags')) {
if (!localStorage['JustCRM_accordion']) localStorage['JustCRM_accordion'] = '{}';
var curStat = JSON.parse(localStorage['JustCRM_accordion']);
if (curStat[curUrl[1]]) {
var pageObj = curStat[curUrl[1]];
for (key in pageObj) {
for (k in pageObj[key]) {
var cur = $('[rel="' + k + '"]');
// Устанавливаем порядковый индекс отображения виджета
cur.attr('data-index', pageObj[key][k].index);
// Размер по ширине
if (pageObj[key][k].size === true) cur.addClass('half-size');
// Сложен/разложен
if (pageObj[key][k].slideopen === true) closeOpen(cur.children('section').find('h3'));
// Скрыт/отображен
if (pageObj[key][k].visible === false) {
cur.addClass('accordion-hide');
// Выводим в соседнем табе настройки видимости виджетов
var check = '' + cur.children('section').find('h3').text() + '';
$('.config').append(check);
}
}
}
} else {
$('.accordion h3').first().trigger('click');
}
// Сортируем виджеты по индексам и отображаем
var widjet = $('.drags'),
widjetObj = widjet.children('.accordion');
widjetObj.sort(function(a, b) {
var an = a.getAttribute('data-index'),
bn = b.getAttribute('data-index');
if (an > bn) return 1;
if (an < bn) return -1;
return 0;
});
widjetObj.detach().appendTo(widjet);
}
// Запись данных о состоянии виджета
function saveWidgetStatus(obj, action) {
var curAccordion = {};
if (localStorage['JustCRM_accordion']) curAccordion = JSON.parse(localStorage['JustCRM_accordion']);
if (!curAccordion[curUrl[1]]) curAccordion[curUrl[1]] = {};
if (!curAccordion[curUrl[1]][obj.attr('data-group')]) curAccordion[curUrl[1]][obj.attr('data-group')] = {};
if (!curAccordion[curUrl[1]][obj.attr('data-group')][obj.attr('rel')]) curAccordion[curUrl[1]][obj.attr('data-group')][obj.attr('rel')] = {};
var visible = (obj.find('.acrdCont').height() !== 0) ? false : true;
if (action.get(0).tagName != 'H3') visible = curAccordion[curUrl[1]][obj.attr('data-group')][obj.attr('rel')].slideopen;
curAccordion[curUrl[1]][obj.attr('data-group')][obj.attr('rel')] = {
'size': obj.hasClass('half-size'),
'visible': obj.is(':visible'),
'slideopen': visible,
'index': obj.index()
}
obj.attr('data-index', obj.index());
// Сворачиваем виджеты в группе
if (action.get(0).tagName == 'H3') {
for (var key in curAccordion[curUrl[1]][obj.attr('data-group')]) {
if (obj.attr('rel') != key) {
curAccordion[curUrl[1]][obj.attr('data-group')][key].slideopen = 'false';
}
}
}
localStorage['JustCRM_accordion'] = JSON.stringify(curAccordion);
}
function dragReorder() {
$('.drags').sortable('disable');
$('.drags').children('.accordion').each(function(index, element) {
saveWidgetStatus($(element), $(this));
});
}
function resizeWidget(obj) {
var curObj = $(obj).parents('.accordion').find('.acrdCont');
if (obj.scrollHeight > obj.clientHeight && curObj.height() > 0) {
curObj.css({ 'height': $(obj).parents('.accordion').find('.spanContent').height() + 20 });
}
}
// Показываем нужный виджет при клике на панели скрытых
$('body').on('click', '.view', function() {
var hideAccordion = {};
hideAccordion = JSON.parse(localStorage['JustCRM_accordion']);
hideAccordion[curUrl[1]][$(this).attr('data-group')][$(this).attr('rel')].visible = true;
localStorage['JustCRM_accordion'] = JSON.stringify(hideAccordion);
$('.accordion[rel="' + $(this).attr('rel') + '"').removeClass('accordion-hide');
$(this).parent().remove();
});
//---- Аккордеон и виджет - Конец
// Табы
$('.tabs-zag').click(function() {
var i = $(this).index('.tabs-zag');
$('.tabs').hide();
$('.tabs:eq(' + i + ')').show();
});
//---- Формы
// Действия при отметке доп. поле формы
$('form').on('change', ':checkbox', function() {
if ($(this).hasClass('d')) {
if ($(this).is(':checked')) {
$('.dop').slideDown(300);
} else {
$('.dop').slideUp(300);
}
}
});
$('#user_form').find('#userGroup').on('change', function() {
if ($('#userGroup').val() == 2) {
$('.dop').slideDown(300);
} else {
$('.dop').slideUp(300);
}
});
// Вывод и сбор данных с чекбоксов
// Выделить все чекбоксы
$('.check_all').on('click', function() {
if ($(this).children('input').prop("checked") === true) {
$(this).children('input').prop("checked", false);
} else {
$(this).children('input').prop("checked", true);
}
$(this).parent('div').find('[type="checkbox"]').each(function(index, element) {
if ($(element).prop("checked") === true) {
$(element).prop("checked", false);
} else {
$(element).prop("checked", true);
}
});
});
// Расставляем чекбоксы
if ($('form').find('.data-check')) var checkObj = $('form').find('.data-check');
checkObj.each(function(indx, element) {
var value = $(element).val();
if ($(element).val().indexOf('{') < 0) $(element).val('');
var vars = ($(element).val() && $(element).val().indexOf('{') >= 0) ? JSON.parse($(element).val()) : '{}';
for (key in vars) {
$('[name = "' + key + '"]').prop("checked", true);
}
});
// Собираем значения чекбоксов
var checkAll = {};
$('.check-back, .check-back-line').find('input[type="checkbox"]').on('click', function() {
var checkArr = $(this).attr('id').split('_');
var checkId = $(this).attr('id');
var blockName = checkArr[0] + '_' + checkArr[1];
var valAll = ($('[name = "' + blockName + '"]').val()) ? $('[name = "' + blockName + '"]').val() : '{}';
checkAll = JSON.parse(valAll);
if ($(this).is(':checked')) {
checkAll[checkId] = true;
} else {
delete checkAll[checkId];
}
$('[name = "' + blockName + '"]').val(JSON.stringify(checkAll));
});
// Вывод и сбор данных с чекбоксов - Конец
// Глобальная переменная куда будут располагаться данные файлов.
var files = '';
// Получить выбранные файлы
$('form').on('change', 'input[type="file"]', function(e) {
var upload = document.getElementById($(this).attr('id'));
files = this.files;
function getFileNames() {
return Array.prototype.map.call(upload.files, function(file) {
return ' ' + file.name;
});
}
console.log('!!!', e);
$(this).prev('label').children('div').html(getFileNames());
});
// Проверка и отправка данных формы
$('form').validationEngine('attach', {
promptPosition: 'bottomLeft',
onValidationComplete: function(form, status) {
if (status === true) {
var formId = $(form).attr('id');
var datas = $(form).serializeArray();
switch (formId) {
case 'send_request':
// Если отправка данных заявки
send_request(datas, formId);
return;
break;
case 'add_furniture':
// Если добавление фурнитуры
saveFurniture(datas);
return;
break;
case 'send_purchase_payment':
// Если запрос отчета по взаиморасчетам
send_request(datas, formId);
return;
break;
case 'tasks_form':
// Если форма добавления задач
send_request(datas, 'data-exchange', 'data-add-task');
return;
break;
case 'push_message_form':
// Если форма отправки Push-сообщений
send_request(datas, 'data-exchange', 'data-send-push');
return;
break;
default:
dataSend(formId, datas, files);
}
}
}
});
// Функция отправки данных и файлов
function dataSend(url, datas, files) {
var resetForm = false;
// Отображаем прелоадер
preloader('show');
// Создадим данные формы и добавим в них данные файлов из files
var data = new FormData();
$.each(files, function(key, value) {
data.append(key, value);
});
// Создадим данные формы и добавим в них данные из других полей ввода
$.each(datas, function(key, value) {
// Если был выбран сброс формы с перезагрузкой
if (value.name == 'reset-form') resetForm = true;
data.append(value.name, value.value);
});
// Правило для формы авторизации
var uri = (url == 'login_form') ? '/' : '/' + module + '/' + url;
// Правило для форм с классическим типом отправки данных
if (url.indexOf('filter') === 0) {
$('#' + url).unbind('submit').submit();
return;
}
// Отправляем запрос
$.ajax({
url: uri + '?sharkey=' + sharkey,
type: 'POST',
data: data,
cache: false,
async: false,
processData: false,
contentType: false,
success: function(respond, textStatus, jqXHR) {
if (resetForm) {
delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]);
return;
}
switch (url) {
case 'get_price':
var date = new Date();
var dd = date.getDate();
if (dd < 10) dd = '0' + dd;
var mm = date.getMonth() + 1;
if (mm < 10) mm = '0' + mm;
var yy = date.getFullYear();
if (yy < 10) yy = '0' + yy;
popup('good', 'Успешно!', 'Файл доступен для скачивания по этой ссылке.', true, false);
break;
case 'login_form':
window.location.href = window.location.origin;
break;
case 'file_upload':
popup('good', 'Успешно!', 'Файл данных загружен и обработан.', true, false);
break;
case 'file_upload_nn':
popup('good', 'Успешно!', 'Файл данных загружен и обработан.', true, false);
break;
case 'pays':
popup('good', 'Успешно!', 'Система оплаты картами находится в разработке не активна!', true, false);
break;
case 'tasks-comments_form':
switch (jqXHR.status) {
case 201:
popup('good', 'Успешно!', 'Задача завершена.', true, false);
delayClosePopup(1000);
delayReload(1000, uri);
break;
case 202:
popup('good', 'Внимание!', 'Вы отклонили выполнение задачи.', true, false);
delayClosePopup(1000);
delayReload(1000, uri);
break;
}
return;
break;
case 'sms_form':
popup('good', 'Успешно!', 'Сообщение отправлено.', true, false);
delayClosePopup(1000);
delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]);
break;
case 'mail_new_form':
popup('good', 'Успешно!', 'Письмо отправлено.', true, false);
delayClosePopup(1000);
delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]);
break;
case 'photocom_form':
popup('good', 'Успешно!', 'Документ сохранен.', true, false);
delayClosePopup(1000);
//delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]);
location.href = '/' + module + '/_details/' + curUrl[3];
break;
case 'pays_form':
popup('good', 'Успешно!', 'Документ сохранен.', true, false);
delayClosePopup(1000);
//delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]);
location.href = '/' + module + '/_details/' + curUrl[3];
break;
case 'recommendations_clients_form':
case 'recommendations_clients1_form':
case 'recommendations_clients2_form':
case 'recommendations_clients3_form':
case 'recommendations_clients4_form':
case 'recommendations_clients11_form':
case 'recommendations_clients22_form':
case 'recommendations_clients44_form':
popup('good', 'Успешно!', 'Рекомендации назначены.', true, false);
delayClosePopup(1000);
delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]);
break;
case 'timeline_clients_form':
case 'timeline1_clients_form':
case 'timeline11_clients_form':
popup('good', 'Успешно!', 'Данные изменены.', true, false);
delayClosePopup(1000);
delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]);
break;
case 'recommendations_clients_edit_form':
popup('good', 'Успешно!', 'Рекомендация изменена.', true, false);
delayClosePopup(1000);
delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3] + '#recommendations');
break;
case 'recommendations_client_message_form':
popup('good', 'Успешно!', 'Уведомление сохранено.', true, false);
delayClosePopup(1000);
delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]);
break;
default:
// Если указано, что необходимо вернуться по определенному URL
if (toBack) {
window.location.href = toBack;
return;
}
// Если редактировали форму на странице полной информации, то возвращаемся обратно на эту страницу
if (document.referrer.indexOf('/_') >= 0 && data.get('GUID') != '') window.history.go(-1);
delayClosePopup(100);
delayReload(100, uri);
}
return;
},
error: function(jqxhr) {
switch (url) {
case 'login_form':
switch (jqxhr.status) {
case 401:
popup('bad', 'Ошибка!', 'Неверное значение в поле логин/пароль.', true, false);
break;
case 501:
popup('bad', 'Ошибка!', 'Ваш аккаунт еще не активирован администрацией.', true, false);
break;
case 423:
popup('bad', 'Ошибка!', 'Аккаунт заблокирован! Свяжитесь с Вашим менеджером.', false, true);
break;
case 412:
popup('bad', 'Ошибка!', 'Неверное значение поля защиты от спама!', true, false);
break;
}
break;
case 'file_upload':
switch (jqxhr.status) {
case 409:
popup('bad', 'Ошибка!', 'Число файлов не может превышать 1-го.', true, false);
break;
case 500:
popup('bad', 'Отправка прервана!', 'Один, или несколько файлов невозможно обработать. Размер файлов не должен превышать 3Mb.', true, false);
break;
case 413:
popup('bad', 'Ошибка!', 'Размер файлов не должен превышать 3Mb!', true, false);
break;
case 406:
popup('bad', 'Ошибка!', 'Нет файла для обработки!', true, false);
break;
default:
popup('bad', '', 'Неизвестная ошибка!', true, false);
}
break;
case 'user_form':
switch (jqxhr.status) {
case 412:
popup('bad', 'Ошибка!', 'Данный e-mail уже зарегистрирован.', true, false);
break;
default:
popup('bad', '', 'Неизвестная ошибка!', true, false);
}
break;
default:
popup('bad', '', 'Нет связи с сервером!', true, false);
}
return;
},
complete: function() {
preloader();
}
});
}
//---- Формы - Конец
});
// Часы
function digitalClock() {
var tag = 'div.time';
var dots = digits = '';
var digit = tag + ' span';
var span = digit + ':nth-child';
for (i = 1; i < 6; i++)
for (k = 1; k < 6; k++) dots += '';
for (i = 0; i < 8; i++) digits += '';
jQuery(tag).append(digits);
jQuery(digit).append(dots);
jQuery(span + '(3), ' + span + '(6)').removeAttr('class').addClass('colon');
function time() {
var date = new Date();
var hou = date.getHours().toString();
var min = date.getMinutes().toString();
var sec = date.getSeconds().toString();
hou = (hou < 10) ? 0 + hou : hou;
min = (min < 10) ? 0 + min : min;
sec = (sec < 10) ? 0 + sec : sec;
jQuery(digit + '.colon').css({ opacity: 1 }).each(function() {
jQuery(this).delay(400).animate({ opacity: 0 }, 250);
})
jQuery(digit).removeAttr('class');
jQuery(span + '(1)').addClass('d' + hou.slice(0, 1));
jQuery(span + '(2)').addClass('d' + hou.slice(1, 2));
jQuery(span + '(3)').addClass('colon');
jQuery(span + '(4)').addClass('d' + min.slice(0, 1));
jQuery(span + '(5)').addClass('d' + min.slice(1, 2));
jQuery(span + '(6)').addClass('colon');
jQuery(span + '(7)').addClass('d' + sec.slice(0, 1));
jQuery(span + '(8)').addClass('d' + sec.slice(1, 2));
setTimeout(time, 1000);
}
time();
}
// Действия при события загрузки, изменения размера и ориентации страницы
$(window).on('load resize orientationchange', function() {
resize();
});
function resize() {
var allW = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var allH = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
$('#main-content').height(allH - $('#main-footer').innerHeight());
}
// Генерация GUID
function newGuid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
// Снимает все checkbox
function uncheckAll() {
var w = document.getElementsByTagName('input');
for (var i = 0; i < w.length; i++) {
if (w[i].type == 'checkbox') {
w[i].checked = false;
}
}
}
// Активируем перетаскивание с сортировкой
function drag(obj) {
setTimeout(function() {
$('#' + obj).sortable({ revert: true });
}, 500);
}
//---- Popup-окна
function popup(type, head, message, fix, background, obj, func, storage, command) {
$('html').css({ 'overflow-y': 'hidden' });
var backPop = (background) ? 'background: transparent' : '';
var backWind = (background) ? 'top: 20%; margin: auto; width: 40%;' : '';
var icon = (!background) ? '' : '';
var fixe = (fix) ? 'width: 40%;' : '';
$('body').append('
' + icon + '
');
var thisH = $('.popup .wind .head').last();
var thisC = $('.popup .wind .cont').last();
switch (type) {
case 'good':
thisH.addClass('good').append(head);
thisC.append(message);
break;
case 'bad':
thisH.addClass('bad').append(head);
thisC.append(message);
break;
case 'atten':
thisH.addClass('atten').append(head);
thisC.append(message);
thisC.append('');
break;
case 'form':
if ($('#' + message + '_head')) {
head = $('#' + message + '_head').html();
}
thisH.addClass('form').append(head);
thisC.append($('#' + message));
break;
default:
thisH.append(head);
thisC.append(message);
}
// Проверяем наличие поля, и если оно есть, то даем ему фокус
//$('.popup').last().find('input').first().focus().select();
}
function delayClosePopup(time) {
setTimeout(function() { $('body').find('.popup').last().find('.close').trigger('click'); }, time);
}
function delayReload(time, url) {
setTimeout(function() {
if (url) {
window.location.href = url;
} else {
window.location.reload();
}
}, time);
}
// Закрываем окно
$(document).on('click', '.close, .close-but', function(e) {
var formGuid = $('.popup').find('[name="GUID"]').val();
try {
var form = $(this).attr('style').indexOf('transparent');
} catch (e) {}
var obj = e.target.className;
if ((obj !== 'close' && obj !== 'popup' && obj !== 'close-but') || form > 0) return;
$('html').css({ 'overflow-y': 'unset' });
var t = $(this).parents('.popup');
t.children('.wind').removeClass('zoomIn').addClass('zoomOut');
t.fadeOut('slow', function() { t.remove(); });
var curClass = $('.popup .wind .head').last().attr('class');
if (curClass.indexOf('good') < 0 && curClass.indexOf('bad') < 0 && curClass.indexOf('atten') < 0) {
$('#_wrap').append($('.popup').find('article'));
}
// Подменяем текущий URL на предыдущий (если это не справочник), чтобы при нажатии кнопки Back в браузере не открывалось окно
var uri = window.location;
if (uri.pathname.indexOf('/_') < 0) window.history.replaceState({}, window.location, uri.protocol + '//' + uri.hostname + '/' + module);
// Если был использован режим отображения одного документа без учета фильтров в справочнике,
// ограничивающий доступ к документам, то запоминаем ?one=true и добавляем у URL
var oneDoc = '';
if (document.referrer.indexOf('one=true') >= 0) oneDoc = '?one=true';
// Если форма открыта для создания документа, то остаемся на этой страницы
if (typeof formGuid == "undefined" || formGuid == '') return;
// Если вызвали документ на редактирование со страницы полной информациии и popup-окно было открыто одно
if (document.referrer.indexOf('/_') >= 0 && $('.popup').length < 2 && $('.popup').find('.form').length > 0) {
console.log(curUrl, document.referrer);
if (document.referrer.indexOf('/_details-templates') >= 0) {
// Если это раздел с несколькими тимплейтами/карточками документов нескольких типов, например рассылки
location.href = '/' + module + '/_details-templates/' + curUrl[3] + '/' + curUrl[4] + oneDoc;
} else {
// Для все остальных
location.href = '/' + module + '/_details/' + curUrl[3] + oneDoc;
}
//window.history.go(-1);
}
});
/*
// Закрываем окно
$(document).on('click', '.popup, .close', function(e) {
// Если есть соответствующий класс, то перегружаем страницу
if ($(e.target).hasClass('popup') || $(e.target).hasClass('close')) {
setTimeout(function() {
var verifyReload = $('body').find('.close-and-reload').length;
if (verifyReload > 0) document.location.reload(true);
}, 1000);
}
var formGuid = $('.popup').find('[name="GUID"]').val();
try {
var form = $(this).attr('style').indexOf('transparent');
} catch (e) {}
var obj = e.target.className;
if ( (obj !== 'close' && obj !== 'popup' && obj !== 'close-but') || form > 0 ) return;
$('html').css({'overflow-y':'unset'});
var t = $(this);
t.children('.wind').removeClass('zoomIn').addClass('zoomOut');
t.fadeOut('slow', function() { t.remove(); });
var curClass = $('.popup .wind .head').last().attr('class');
if (curClass.indexOf('good') < 0 && curClass.indexOf('bad') < 0 && curClass.indexOf('atten') < 0) {
$('#_wrap').append($('.popup').find('article'));
}
// Подменяем текущий URL на предыдущий (если это не справочник), чтобы при нажатии кнопки Back в браузере не открывалось окно
var uri = window.location;
if (uri.pathname.indexOf('/_') < 0) window.history.replaceState( {}, window.location, uri.protocol+'//'+uri.hostname+'/'+module);
// Если форма открыта для создания документа, то остаемся на этой страницы
if (typeof formGuid == "undefined" || formGuid == '' ) return;
// Если вызвали документ на редактирование со страницы полной информациии и popup-окно было открыто одно
if (document.referrer.indexOf('/_') >= 0 && $('.popup').length < 2 && $('.popup').find('.form').length > 0) window.history.go(-1);
});
*/
// Если изображение
$(document).on('click', '.img', function(e) {
if (!$('img').is('#popupImg')) {
var i = new Image();
i.src = $(this).attr('src');
var width = i.width;
var height = i.height;
popup('', '', '');
}
});
// Подтверждение действия
function popupConfirmYes(fName, one, two, three, four, five) {
try {
eval(fName)(one, two, three, four, five);
} catch (e) {
console.log('Ошибка при вызове: ' + fName + ' | ' + e.name);
}
}
// Если в окне форма и она вызвана для добавления документа, то очищаем её поля
$(document).on('click', '.clear', function(e) {
uncheckAll();
$('.popup').last().find('input, textarea, select').each(function(indx, element) {
// Если поле имеет аттрибут data-command="no-clear", то не удаляем из него значение
if ($(this).attr('data-command') == 'no-clear') return;
if ($(this)[0].type != 'radio' && $(this)[0].nodeName != 'TEXTAREA') $(this).val(''); // У 'radio' и 'TEXTAREA' нельзя обнулять value
if ($(this)[0].nodeName == 'TEXTAREA') $(this).text('');
if ($(this)[0].nodeName == 'SELECT') {
if ($(this).attr('data-new') == 'new') $(this).children('option').remove();
$(this)[0].selectedIndex = 0;
$(this).change();
// Условие при добавлении задач
if ($(this).attr('id') == 'tasks_object' && $(this)[0].length > 1) {
$(this).val(2).change();
} else if ($(this).attr('id') == 'tasks_object') {
$(this).val(1).change();
}
}
});
// Если есть список телефонов, то чистим специфические атрибуты
if ($('[data-call]')) $('[data-call]').attr('data-call', '');
});
//---- Popup-окна - Конец
// Пангинация
function page(direction) {
var url = Number($('#page_counter').val());
if (isNaN(Number($('#page_counter').val()))) return;
var uri = window.location;
if (direction == 'left') {
if ((url - 1) < 1) return;
uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '/page/' + (url - 1);
} else {
if (url > (maxPage - 1)) return;
uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '/page/' + (url + 1);
}
}
// Сохранение списка
function save_select(obj, form) {
if ($('#' + form).validationEngine('validate')) {
var content = '';
var elements = $('#' + form).find('input, select');
var val = [];
for (i = 0; i < elements.length; i++) {
if ((i + 1) % 2 && elements[i].value != '') {
content += '';
var temp = [elements[i].value, elements[i + 1].value];
val.push(temp);
} else {
continue;
}
}
$('#' + obj).html(content);
$('#' + obj).parents('form').find('#' + obj + 'JSON').val(JSON.stringify(val));
delayClosePopup(100);
}
}
// Preloader
function preloader(action) {
if (action === 'show') {
$('body').append('
Подождите...
');
} else {
var obj = $('.preloader');
obj.fadeOut('slow', function() { obj.remove(); });
}
}
// Preloader - Конец
// Функции для работы с куки
function setCookie(name, value) {
document.cookie = name + '=' + value + '; path=/;';
}
function getCookie(name) {
var r = document.cookie.match("(^|;) ?" + name + "=([^;]*)(;|$)");
if (r) return r[2];
else return "";
}
function deleteCookie(name) {
var date = new Date(); // Берём текущую дату
date.setTime(date.getTime() - 100); // Возвращаемся в "прошлое"
document.cookie = name + "=; path=/; expires=" + date.toGMTString(); // Устанавливаем cookie пустое значение и срок действия до прошедшего уже времени
}
// Функции для работы с куки - Конец
// Иерархическое дерево с вложениями
var data = [];
$(document).on('click', '#tree li', function(e) {
if (this.className == 'plus') {
$(this).siblings().each(function(index, element) {
if (element.tagName == 'UL') {
$(element).show();
}
});
// Добавляем название объекта по которому был клик
data.push('
' + $(this).text() + '
');
// Рекурсивно перебираем все остальные объекты
eachObj($(this).siblings());
// Добавляем данные в таблицу
$('#tree-data').html(data);
data = [];
}
if (this.className == 'minus') {
$(this).siblings().each(function(index, element) {
$(element).hide();
});
}
$(this).toggleClass('plus').toggleClass('minus');
});
// Перебираем все вложенные объекты
function eachObj(obj) {
obj.each(function(index, element) {
if ($(element).find('*').length > 1) {
eachObj($(element).find('*'));
} else {
if (this.className != 'hold' && !$(element).prev().hasClass('hold')) {
var temp;
//var tempFlag = [];
var tempFlag;
if ($(element).attr('data-art')) {
var e = $(element);
//var pres = e.attr('data-pres').replace('[', '').replace(']', '').split(',');
//for (key in pres) {
// tempFlag[key] = (pres[key] == '1') ? '' : '';
//}
tempFlag = (e.attr('data-pres') == '1') ? 'Да' : 'Нет';
temp = '
' +
'
' + e.attr('data-art') + '
' +
'
' + e.text() + '
' +
'
' + e.attr('data-unit') + '
' +
'
' + tempFlag + '
' +
'
';
} else {
temp = '
' + $(element).text() + '
';
}
data.push(temp);
}
}
});
}
// Иерархическое дерево с вложениями - Конец
// Корзина заказа
$(document).on('dblclick', '[data-form="new_request"] tr', function(e) {
if (!$(this).attr('data-ids')) return;
var guid = $(this).attr('data-ids');
// Показываем всплывающее сообщение для добавления кол-ва
popup('atten', 'Добавить в корзину?', $('li[data-ids="' + guid + '"]').text() + '', true, false, guid, 'add_position');
});
// Добавляем номенклатуру в корзину
function add_position(itemGuid) {
var quant = $('#cur_quant').val();
var items = {};
var crmCurCart = {};
// Если есть запись в хранилище, то извлекаем чтобы можно было туда добавить новую
if (localStorage.getItem('crmCartTemp')) {
var crmCurCart = JSON.parse(localStorage.getItem('crmCartTemp'));
}
// Формируем новую запись
var guid = itemGuid;
var nomen = $('li[data-ids="' + guid + '"]');
items['data-ids'] = guid;
items['data-art'] = nomen.attr('data-art');
items['data-unit'] = nomen.attr('data-unit');
items['data-cur'] = nomen.attr('data-cur');
items['data-price'] = nomen.attr('data-price');
items['data-pres'] = nomen.attr('data-pres');
items['data-quantity'] = (quant > 1) ? quant : 1;
items['data-name'] = nomen.text();
crmCurCart[guid] = items;
localStorage.setItem('crmCartTemp', JSON.stringify(crmCurCart));
viewCartTemp('tree-data-temp');
delayClosePopup(100);
}
// Если корзина не пуста, то выводим её
$(function() {
if (curUrl[1] == 'request') {
viewCartTemp('tree-data-cart');
viewCartTemp('tree-data-temp');
viewFurniture();
}
});
function viewCartTemp(table) {
// Если есть запись в хранилище, то извлекаем все для вывода
var storageObj = (table == 'tree-data-temp') ? 'crmCartTemp' : 'crmCart';
var crmCurCart = {};
if (localStorage.getItem(storageObj)) {
crmCurCart = JSON.parse(localStorage.getItem(storageObj));
} else {
if (storageObj == 'crmCartTemp') {
clearCartTemp();
} else {
clearCart();
}
return;
}
var temp = '';
for (key in crmCurCart) {
var price = (crmCurCart[key]['data-quantity'] > 1) ? crmCurCart[key]['data-price'] * crmCurCart[key]['data-quantity'] : crmCurCart[key]['data-price'];
var prices = (!isNaN(price)) ? Number(price).toFixed(2) : '-';
//var pres = crmCurCart[key]['data-pres'].replace('[', '').replace(']', '').split(',');
var tempFlag;
//for (k in pres) {
// tempFlag[k] = (pres[k] == '1') ? '' : '';
//}
tempFlag = (crmCurCart[key]['data-pres'] == '1') ? 'Да' : 'Нет';
temp += '
' +
'
' + crmCurCart[key]['data-art'] + '
' +
'
' + crmCurCart[key]['data-name'] + '
' +
'
' + crmCurCart[key]['data-unit'] + '
' +
'
' + tempFlag + '
' +
'
' +
'' +
'
' +
'
' +
'
';
}
// Добавляем данные в таблицу
$('#' + table).html(temp);
}
// Очистка временной корзины
function clearCartTemp() {
localStorage.removeItem('crmCartTemp');
$('#tree-data-temp').html('