Обновления формы: проверка полиса, автодополнение адресов, улучшения UX
- Перемещена проверка полиса в начало формы (перед телефоном и банком) - Поля телефона и банка скрыты до успешной проверки полиса - SMS не отправляется, если полис невалидный - Добавлено автодополнение адресов через DaData - Обновлен API ключ DaData - Изменена метка 'Код документа' на 'Документ, удостоверяющий личность' - Убраны цифры из отображения типов документов (коды отправляются в n8n) - Удалены отладочные console.log - Исправлена логика показа формы после подтверждения SMS - Улучшена валидация полиса
This commit is contained in:
150
js/common.js
150
js/common.js
@@ -1,6 +1,33 @@
|
||||
// Функция инициализации автодополнения адресов через DaData
|
||||
function initAddressSuggestions() {
|
||||
if (typeof $.fn.suggestions !== 'undefined') {
|
||||
// Инициализируем автодополнение адресов для поля с классом .js-adres
|
||||
$('.js-adres').each(function() {
|
||||
// Проверяем, не инициализировано ли уже
|
||||
if (!$(this).data('suggestions-initialized')) {
|
||||
$(this).suggestions({
|
||||
token: "d2fa8613e186d54c6c62fc321414552353ffdfa8",
|
||||
type: "ADDRESS",
|
||||
onSelect: function(suggestion) {
|
||||
// При выборе адреса заполняем поле
|
||||
$(this).val(suggestion.value);
|
||||
}
|
||||
});
|
||||
$(this).data('suggestions-initialized', true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$(function() {
|
||||
$(document).ready(function(){
|
||||
|
||||
// Блокируем кнопку "Отправить смс" по умолчанию, пока полис не проверен
|
||||
$('.js-send-sms').addClass('disabled');
|
||||
$('.js-send-sms').prop('disabled', true);
|
||||
|
||||
// Поля телефона и банка скрыты по умолчанию (через класс d-none в HTML)
|
||||
|
||||
$(".js-progress-mask").inputmask("99");
|
||||
$(".js-inn-mask").inputmask("999999999999");
|
||||
$(".js-inn-mask2").inputmask("9{10,12}");
|
||||
@@ -128,7 +155,13 @@ $(function() {
|
||||
let index=1;
|
||||
|
||||
$('.js-btn-next').on("click",function(e){
|
||||
e.preventDefault();
|
||||
e.preventDefault();
|
||||
|
||||
// Проверяем, не заблокирована ли кнопка из-за невалидного полиса
|
||||
if($(this).hasClass('disabled') || $(this).prop('disabled')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let isvalid=validate_step(index);
|
||||
|
||||
if(isvalid) {
|
||||
@@ -257,6 +290,8 @@ $(function() {
|
||||
res_array.push(field_fill);
|
||||
});
|
||||
|
||||
// Проверка валидности полиса теперь выполняется перед отправкой SMS, а не здесь
|
||||
|
||||
if((step_index==3) && $('.form-step[data-step='+step_index+']').find('input[type="checkbox"]:checked').length<1) {
|
||||
$('.form__warning').show();
|
||||
$('.form__warning').text('Необходимо согласие с политикой обработки персональных данных');
|
||||
@@ -264,7 +299,7 @@ $(function() {
|
||||
} else {
|
||||
$('.form__warning').text('Пожалуйста, заполните все обязательные поля');
|
||||
}
|
||||
|
||||
|
||||
if(!res_array.includes(false)){
|
||||
$('.form__warning').hide();
|
||||
return true;
|
||||
@@ -367,6 +402,14 @@ $(function() {
|
||||
$('.js-send-sms').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
// Проверка валидности полиса перед отправкой SMS
|
||||
var indatabase = $('.js-indatabase').val();
|
||||
if(indatabase == '0' || indatabase == '' || indatabase == undefined) {
|
||||
$('.form__warning').show();
|
||||
$('.form__warning').text('Пожалуйста, проверьте полис. Ваш полис не покрывает данный вид обращения.');
|
||||
return false;
|
||||
}
|
||||
|
||||
// Валидация поля банка перед отправкой SMS
|
||||
var bankInput = $('.js-bank-autocomplete');
|
||||
var bankId = $('input[name="bank_id"]').val();
|
||||
@@ -396,14 +439,28 @@ $(function() {
|
||||
e.preventDefault();
|
||||
if($('.sms-checking input[type="text"]').val() == sended_code) {
|
||||
$('.sms-success').removeClass('d-none');
|
||||
$('.form-step[data-step=1]').removeClass('disabled');
|
||||
|
||||
// Проверяем, был ли полис уже проверен
|
||||
var indatabase = $('.js-indatabase').val();
|
||||
if(indatabase == '1') {
|
||||
// Если полис валидный, сразу показываем форму для заполнения
|
||||
$('.db-success').removeClass('d-none');
|
||||
$('.form-step[data-step=1]').removeClass('disabled');
|
||||
// Инициализируем автодополнение адресов после показа формы
|
||||
setTimeout(function() {
|
||||
initAddressSuggestions();
|
||||
}, 500);
|
||||
}
|
||||
// Если полис не проверен, форма останется скрытой
|
||||
|
||||
$('.modal .js-send-sms').show();
|
||||
$('.sms-check .form-item > .js-send-sms').hide();
|
||||
$.fancybox.close();
|
||||
$.fancybox.close();
|
||||
$('.sms-check').addClass("disabled");
|
||||
$('.sms-check .form-item__warning').text("Вы успешно подтвердили номер");
|
||||
$('.sms-check .form-item__warning')
|
||||
.addClass('form-item__warning--success')
|
||||
.text("Вы успешно подтвердили номер");
|
||||
} else {
|
||||
$('.modal .form-item__warning').text("Неверный код");
|
||||
$('.sms-success').addClass('d-none');
|
||||
@@ -437,29 +494,22 @@ $(function() {
|
||||
var formData = new FormData();
|
||||
|
||||
let fileIndex = 0; // Счетчик для правильной индексации файлов
|
||||
// Отправляем файлы напрямую как бинарные данные (без предварительной загрузки через fileupload_v2.php)
|
||||
jQuery.each(jQuery('input[type=file].js-attach').not('.disabled'), function(i, file) {
|
||||
|
||||
if(!$(this).hasClass('disabled')) {
|
||||
let field_name=jQuery(this).data('crmname');
|
||||
// Используем field-type или name для группировки файлов
|
||||
let field_name=jQuery(this).data('field-type') || jQuery(this).attr('name');
|
||||
let docname=jQuery(this).data('docname');
|
||||
let upload_url=jQuery(this).attr('data-uploadurl');
|
||||
let upload_url_real=jQuery(this).attr('data-uploadurl_real');
|
||||
|
||||
// Отправляем файлы напрямую как бинарные данные в submit.php
|
||||
jQuery.each(jQuery(this)[0].files, function(i, file) {
|
||||
formData.append(field_name+'-'+i, file);
|
||||
});
|
||||
if(upload_url) { // Если файл загрузился и получили ответ от upload тогда добавляем в форму
|
||||
formData.append('upload_urls[]',upload_url);
|
||||
formData.append('upload_urls_real[]',upload_url_real);
|
||||
formData.append('files_names[]',field_name);
|
||||
formData.append('docs_names[]',docname);
|
||||
|
||||
if(jQuery(this).data('doctype')=="ticket") {
|
||||
formData.append('docs_ticket_files_ids[]',fileIndex);
|
||||
} else {
|
||||
formData.append('docs_ticket_files_ids[]','simple');
|
||||
}
|
||||
fileIndex++; // Увеличиваем счетчик только для файлов с upload_url
|
||||
}
|
||||
});
|
||||
|
||||
// УБРАНО: старая система загрузки через fileupload_v2.php
|
||||
// Теперь файлы отправляются напрямую в submit.php как бинарные данные
|
||||
// n8n будет обрабатывать файлы сам
|
||||
}
|
||||
});
|
||||
|
||||
@@ -561,7 +611,7 @@ $(function() {
|
||||
"method": "POST",
|
||||
"timeout": 0,
|
||||
"headers": {
|
||||
"Authorization": "Token f5d6928d7490cd44124ccae11a08c7fa5625d48c",
|
||||
"Authorization": "Token d2fa8613e186d54c6c62fc321414552353ffdfa8",
|
||||
"Content-Type": "application/json",
|
||||
"Cookie": "__ddg1_=BoLd7l5yOCjL9tr6qUth"
|
||||
},
|
||||
@@ -841,13 +891,10 @@ $(function() {
|
||||
});
|
||||
|
||||
|
||||
// $(document).ready(function(){
|
||||
// setTimeout(function() {
|
||||
// var $form = $(".form form");
|
||||
// createSuggestions($form);
|
||||
// }, 1000);
|
||||
// })
|
||||
|
||||
// Инициализация автодополнения адресов при загрузке страницы
|
||||
setTimeout(function() {
|
||||
initAddressSuggestions();
|
||||
}, 1000);
|
||||
|
||||
// $('input[name=db_birthday],input[name=db_inn]').keyup(function(e){
|
||||
|
||||
@@ -877,15 +924,12 @@ $(function() {
|
||||
data: dbdata,
|
||||
// dataType : 'json',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
|
||||
let res=JSON.parse(data);
|
||||
if(res.success=="true"){
|
||||
|
||||
$('.db-success').removeClass("d-none");
|
||||
// Полис валидный - показываем успешное сообщение
|
||||
$('.js-result').html(res.message);
|
||||
|
||||
$('.js-result').removeClass("danger");
|
||||
$('.js-result').addClass("form-item__warning--success");
|
||||
|
||||
$('input[name=insured_from]').val(res.result.insured_from.replace(/\./g, '-'));
|
||||
$('input[name=insured_to]').val(res.result.insured_to.replace(/\./g, '-'));
|
||||
@@ -899,13 +943,28 @@ $(function() {
|
||||
|
||||
$('.form-item--polis').addClass('d-none');
|
||||
|
||||
// Показываем поля телефона и банка после успешной проверки полиса
|
||||
$('.policy-validated-fields').removeClass('d-none');
|
||||
|
||||
// Разблокируем кнопку "Отправить смс" если полис валидный
|
||||
$('.js-send-sms').removeClass('disabled');
|
||||
$('.js-send-sms').prop('disabled', false);
|
||||
$('.form__warning').hide();
|
||||
|
||||
// Если SMS уже подтверждено, сразу показываем форму для заполнения
|
||||
if($('.sms-success').is(':visible') || !$('.sms-success').hasClass('d-none')) {
|
||||
$('.db-success').removeClass('d-none');
|
||||
$('.form-step[data-step=1]').removeClass('disabled');
|
||||
}
|
||||
// Инициализируем автодополнение адресов после проверки полиса
|
||||
setTimeout(function() {
|
||||
initAddressSuggestions();
|
||||
}, 500);
|
||||
|
||||
} else {
|
||||
|
||||
$('.db-success').removeClass("d-none");
|
||||
|
||||
// Полис невалидный - показываем ошибку
|
||||
$('.js-result').html(res.message);
|
||||
|
||||
$('.js-result').removeClass("form-item__warning--success");
|
||||
$('.js-result').addClass("danger");
|
||||
|
||||
|
||||
@@ -916,6 +975,15 @@ $(function() {
|
||||
$('.form-item--polis').find('input[type=file]').removeClass("disabled");
|
||||
|
||||
$('.form-item--polis').removeClass('d-none');
|
||||
|
||||
// Скрываем поля телефона и банка, если полис невалидный
|
||||
$('.policy-validated-fields').addClass('d-none');
|
||||
|
||||
// Блокируем кнопку "Отправить смс" если полис невалидный
|
||||
$('.js-send-sms').addClass('disabled');
|
||||
$('.js-send-sms').prop('disabled', true);
|
||||
$('.form__warning').show();
|
||||
$('.form__warning').text('Ваш полис не покрывает данный вид обращения. Пожалуйста, проверьте полис.');
|
||||
|
||||
|
||||
}
|
||||
@@ -1017,9 +1085,11 @@ $(function() {
|
||||
|
||||
}
|
||||
|
||||
// ОТКЛЮЧЕНО: старая система загрузки файлов через fileupload_v2.php
|
||||
// Файлы теперь отправляются напрямую в submit.php как бинарные данные
|
||||
if(file_status.every(val => val === true))
|
||||
{
|
||||
upload_file(elem);
|
||||
// upload_file(elem); // ОТКЛЮЧЕНО - файлы отправляются напрямую при submit формы
|
||||
$('.form__action').find('.js-btn-next').removeClass('disabled');
|
||||
} else {
|
||||
$('.form__action').find('.js-btn-next').addClass('disabled');
|
||||
@@ -1239,7 +1309,7 @@ $(function() {
|
||||
console.log('Uploading files for field type:', currentFieldFiles.fieldType);
|
||||
console.log('Final fieldFiles state:', currentFieldFiles);
|
||||
console.log('Files in DataTransfer:', elem[0].files);
|
||||
upload_file(elem);
|
||||
// upload_file(elem); // ОТКЛЮЧЕНО - файлы отправляются напрямую при submit формы
|
||||
$('.form__action').find('.js-btn-next').removeClass('disabled');
|
||||
} else {
|
||||
console.log('=== FILE UPLOAD FAILED ===');
|
||||
|
||||
Reference in New Issue
Block a user