Корпоративный сайт и личный кабинет транспортной компании на Bitrix + Vue
Проект выполнен solo: архитектура, API, Bitrix, Vue-фронт, миграции и документация для 1С.
Задача — не перенести вёрстку, а собрать платформу: публичный сайт, калькулятор, трекинг и личный кабинет B2B-клиента с обменом данными с 1С.
На главной интерактивный hero-слайдер на Swiper: fade-переходы, loop, автопрокрутка. Изображение разбито на левую и правую части, выходящие за границы слайда — эффект глубины и параллакса. При смене слайда — каскадные анимации: изображения въезжают с разной задержкой, заголовок, кнопка и текст появляются по цепочке с zoom-in. Декоративные элементы со смещением, blur и rotation. Градиентные оверлеи поверх секции. Контент управляется из инфоблока Bitrix через SliderManager, Swiper подгружается лениво только при наличии слайдера на странице.
Разработан REST API на Bitrix Highload: приём посылок, клиентов, тарифов, терминалов и справочников из 1С — с upsert по uid, пакетной обработкой, DELETE-эндпоинтами и каскадным удалением связей. Отдельно — GET API для фронта и документация для 1С-разработчиков.
Трекинг: 1С передаёт вложенные события, API собирает дерево статусов обратно. Поиск по номеру заказа, ТН и номеру клиента. В ЛК — список отправлений с пагинацией и фильтрацией по clientUid.
Система отслеживания — отдельный слой. 1С передаёт события вложенной структурой: одиночные статусы и группы по городам с дочерними событиями. На приёме (parcels-receive.php) — upsert посылки, полная перезапись трекинга, сохранение иерархии в плоские Highload-записи с parentId и lineNumber. На выдаче (parcels.php) — обратная сборка дерева, маппинг кодов 1С в пользовательские статусы («В пути», «Готов к выдаче» и т.д.), поиск по трём полям: номер заказа, ТН, номер заказа клиента. Для списка в ЛК — серверная пагинация, фильтр по статусу, привязка к clientUid, батчевая подгрузка событий только для посылок текущей страницы.
На фронте — отдельная логика рендера таймлайна: группировка промежуточных событий в блок «В пути» по городам, раскрывающиеся детали, иконки статусов, форматирование доп. информации.
Калькулятор — реактивный Vue 3-комponent: пересчёт на лету при любом изменении формы, подгрузка справочников из API, расчёт по ТЗ в три компонента (перевозка, забор, доставка) с зонами, коэффициентами, допуслугами и НДС. Переключение терминал/адрес, автодополнение городов, детализация формул.
~3700 строк реактивной логики на Vue 3. Справочники грузятся поэтапно: сначала критичные (адреса, регионы, типы транспорта), затем тарифные сетки, зоны, takeDelivers, упаковки, допуслуги. Пересчёт через computed — при любом изменении формы, без кнопки «Рассчитать». Расчёт по ТЗ в три независимых компонента: перевозка между городами (зона из tariffZones), забор и доставка внутри города (зоны из takeDelivers, surcharge, coefficientSurcharge). Для каждого места — объёмный и фактический вес, платный вес = MAX, подбор строки тарифной сетки с шаговым округлением CEIL. Показываются все виды транспорта
— доступные и недоступные с причиной (ограничения по весу, объёму, расстоянию). Переключение «терминал / адрес» с сохранением состояния, автодополнение городов, динамическая подгрузка терминалов при смене направления, fallback на покрытие всего города, форма запроса менеджеру при отсутствии направления.
Допуслуги по ТЗ: негабарит, маркировка, ВДО, погрузо-разгрузочные работы с порогами, НДС 5%. Результат — детализация с формулами, промежуточными значениями и sticky-панелью итогов.
Плюс инфраструктура: Vite, D7 Asset API, авторизация ЛК, CLI-миграции.
Спасибо за просмотр!