Обновления формы: проверка полиса, автодополнение адресов, улучшения UX

- Перемещена проверка полиса в начало формы (перед телефоном и банком)
- Поля телефона и банка скрыты до успешной проверки полиса
- SMS не отправляется, если полис невалидный
- Добавлено автодополнение адресов через DaData
- Обновлен API ключ DaData
- Изменена метка 'Код документа' на 'Документ, удостоверяющий личность'
- Убраны цифры из отображения типов документов (коды отправляются в n8n)
- Удалены отладочные console.log
- Исправлена логика показа формы после подтверждения SMS
- Улучшена валидация полиса
This commit is contained in:
2025-12-17 13:08:50 +03:00
parent 62935971b1
commit a3ba651a22
7 changed files with 298 additions and 250 deletions

View File

@@ -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 ===');