7.7 KiB
7.7 KiB
Архитектура фронтенда
Модули
src/context/AuthContext.jsx— OTP-аутентификация через Supabase Auth и загрузка профиля пользователя с ролью. Неизвестный email показывает подсказку обратиться к администратору.src/context/ThemeContext.jsx— управление светлой и тёмной темой черезdata-theme.src/hooks/usePwaStatus.js— клиентское состояние PWA: online/offline, install prompt, standalone и offline readiness.src/hooks/useOrders.js— локальный state заказов, истории, чатов, фильтров, действий и сгруппированных наборов доставки (deliverySetBuckets).src/services/deliverySetViews.js— чистые функции группировки импортированных заказов в наборы доставки с buckets: «На подходе», «Готово к запуску», «Ожидает клиента», «Нужна ручная работа», «Согласовано», «Завершено».src/services/orderService.js— чистые функции бизнес-логики заказов, покрытые тестами.src/services/supabase/orderRepository.js— адаптер реальных чтений/записей заказов и чатов в Supabase, включая source-поля 1С и delivery-set поля.src/services/driverDeliveries.js— фильтрация и группировка доставок для рабочей области водителя.src/layouts/AppShell.jsx— общий shell с боковой навигацией, уведомлениями и переключением темы.src/components/logistics/LogisticsReadinessBoard.jsx— интерактивная доска с bucket-ами наборов доставки.src/components/logistics/DeliverySetDetailPanel.jsx— детальная карточка набора доставки: source-поля 1С, production-шаги, слоты, действия.src/components/client/DeliverySlotsPicker.jsx— публичный виджет выбора даты и половины дня доставки.src/components/client/DeliveryChoiceFlow.jsx— публичный поток согласования доставки по приглашению.src/components/client/DeliveryStateNotice.jsx— информационный экран для clients со статусом ссылки.src/components/orders/*— фильтры, список заказов, карточка заказа, история статусов и поиск по чату.src/components/orders/OrderEditorPanel.jsx— создание и редактирование заказа менеджером или администратором.src/components/dashboard/ProductionQueuePanel.jsx— отдельный блок производственной очереди.src/components/dashboard/RoleWorkspacePanel.jsx— рабочая панель с delivery-set bucket-ами для логиста.src/components/admin/UserDirectoryPanel.jsx— панель пользователей, ролей и последних входов.src/components/logistics/BotControlPanel.jsx— сценарии отправки в чатбот и переноса слотов доставки.src/components/admin/AuditPanel.jsx— журнал ошибок, исключений и обзор последних системных событий.
Ролевой доступ
- 1С остаётся источником создания и прогресса заказов. Веб-приложение не создаёт заказы.
- Начальник производства переводит заказ через очередь и производство к готовности.
- Логист видит наборы доставки, слоты, сообщения чатбота и ручную обработку исключений.
- Водитель видит только назначенные доставки и может переводить их через статусы
Загружен,В пути,Доставлен,Проблема доставки. - Администратор видит весь массив заказов, доставок и системные логи.
- Клиент не является авторизованным пользователем приложения. Клиент использует публичную ссылку приглашения.
Ключевые экраны
/login— email + OTP flow. При отсутствииVITE_SUPABASE_*включается demo-режим. Подсказка проверять входящие и спам. Неизвестный email: «Email не найден в системе. Обратитесь к администратору.»/dashboard— role-based control center: для логиста — LogisticsReadinessBoard с наборами доставки, для водителя — план маршрута и быстрые действия./delivery/:token— публичная страница согласования доставки для клиента.public/manifest.webmanifest+public/service-worker.js— installable PWA-оболочка и базовое кеширование shell для demo offline.
Источник заказов: 1С → Supabase
- Заказы импортируются из 1С через XML и сохраняются в
public.ordersс source-полями:source_order_number,source_customer_name,source_accept_at,source_ship_atи т.д. - Заказы группируются в наборы доставки (delivery sets) по
delivery_set_keyиз n8n или по нормализованному телефону+имя клиента. - Набор доставки считается готовым к запуску, когда все его заказы имеют
source_accept_atи ни один не имеетsource_ship_at. - Поле
source_sms_legacy_atсохраняется как историческое и не должно запускать новый сценарий доставки.
Дизайн-концепт
- Минималистичная сетка с крупными панелями, прозрачными поверхностями и мягкими границами.
- Светлая тема использует холодно-зелёный акцент на светлом фоне.
- Тёмная тема построена на глубоких графитовых поверхностях с ярким мятным accent.
- Мобильная версия складывает layout в вертикальный поток; боковая панель становится верхним блоком.
Интеграционный слой
src/supabaseClient.jsсоздаёт клиент Supabase через env-переменные.src/services/safeSupabaseCall.jsстандартизирует обработку ошибок.- Данные UI разложены по сущностям, совпадающим с таблицами Supabase:
orders,order_history,chat_messages,delivery_slots,delivery_invitations. - В
ordersсинхронизированы поляstatus,delivery_agreement_status,assigned_driver_id, а также source-поля 1С и delivery-set данные.