3.8 KiB
3.8 KiB
Ключевые моменты по проекту ERV (формa Багаж, ticket_dev, miniapp)
Структура проектов
- miniapp — основная форма (авиа + отель), эталон рабочей логики СМС и модалок.
- hotels — форма только по риску «Неполучение услуг размещения (отель)», класс
form-hotels-only. - ticket_dev — копия ticket с проверкой полиса через N8N, ios-оформление, тестовый СМС.
- luggage — форма «Багаж» (задержка/утрата/повреждение), копия ticket_dev по структуре.
Модалка СМС (подтверждение кода)
- Чтобы кнопка «Подтвердить» кликалась: кнопка должна быть внутри элемента с классом
sms-checking(как в miniapp). Разметка: внутри.form-item.sms-checking— инпут кода, затем<div class="sms-checking sms-action">с кнопками. Иначе селектор$('.sms-checking .js-accept-sms')не находит кнопку. - Открытие через Fancybox:
$.fancybox.open({ src: '#confirm_sms', type: 'inline' }), закрытие$.fancybox.close(). - Обработчик — прямой:
$('.sms-checking .js-accept-sms').on('click', ...)иvar code = $('.sms-checking input[type="text"]').val();. - Где правили: luggage/index.php + luggage/js/common.js; ticket_dev/index.php (разметка по аналогии с miniapp).
Куда уходит submit
- miniapp, hotels →
https://n8n.clientright.pro/webhook/oldform_combine - ticket_dev, luggage, ticket → URL берётся из .env: переменная N8N_SEND_WEBHOOK. В luggage/ticket_dev в submit.php подключается env_loader.php и
$webhook_url = trim(env('N8N_SEND_WEBHOOK', '...'));. Пример в luggage/.env:N8N_SEND_WEBHOOK=https://n8n.clientright.pro/webhook/oldform_combine.
Валидация и форма (luggage)
- Форма с пошаговыми шагами: novalidate на
<form>, чтобы браузер не ругался «invalid form control is not focusable» для полей с minlength на скрытых шагах. - Описание: минимум 20 символов, атрибут
data-minlen="20", проверка в JS при submit; при ошибке — показ сообщения и прокрутка к полю описания. - Поле «Задержка выдачи багажа (часов)»: обязательно при выборе типа «Задержка», только цифры — класс
js-delay-hours-mask, inputmask9{1,4}, безnotvalidate.
Список файлов (длинные имена)
- В .fileList длинное имя не должно наезжать на размер: у
.fileList li strong—flex: 1 1 auto,min-width: 0,overflow: hidden,text-overflow: ellipsis,white-space: nowrap. Размер и крестик —flex-shrink: 0. Правили luggage, miniapp, ticket_dev, hotels в css/main.css.
Тестовый СМС (без реальной отправки)
- В .env:
SMS_ENABLED=false. В sms-verify.php при action=send возвращаетсяdemo_code, при action=verify проверка локально (Redis/файл). В common.js при успешной отправке показывается код в модалке (data.demo_code) и подстановка в поле.
Окружение
- Ubuntu 22.04. Пользователь — Фёдор. Отвечать на русском.