BR 2.5 — Admin Franchise web

Источники

Задачи

Новая страница «Кухонные станции»

  • web/src/api/kitchenStations.ts — HTTP-клиент (list, create, update, delete)
  • web/src/pages/catalog/KitchenStationsPage.tsx — список + модалка
  • Модалка KitchenStationModal.tsx — форма создания/редактирования
  • Диалог удаления с обработкой STATION_IN_USE (показ списка ссылающихся товаров)
  • Роутинг /catalog/kitchen-stations
  • Sidebar — добавить пункт «Кухонные станции» в группу «Каталог»

Обновление формы товара

  • web/src/pages/catalog/products/ProductForm.tsx:
    • Добавить секцию «Кухня»
    • Чекбокс «Требует приготовления» (requires_kitchen)
    • Dropdown «Кухонная станция» (появляется по чекбоксу), fetch через GET /kitchen-stations
    • Валидация: если чекбокс + станция не выбрана → inline-ошибка
  • web/src/pages/catalog/products/ProductDetailPage.tsx — секция просмотра с теми же данными

Обновление страниц заказов

  • ActiveOrdersPage.tsx:
    • ACTIVE_STATUSES расширить: ['new', 'accepted', 'ready', 'handed_over', 'in_delivery', 'delivered'] (добавлены последние 3)
    • Badge-mapping для новых статусов:
      const STATUS_LABEL = {
        new: 'Новый',
        accepted: 'Готовится',
        ready: 'Готов',
        handed_over: 'У курьера',
        in_delivery: 'В пути',
        delivered: 'Доставлен',
        closed: 'Закрыт',
        cancelled: 'Отменён'
      };
      const STATUS_COLOR = {
        new: 'gray',
        accepted: 'yellow',
        ready: 'green',
        handed_over: 'cyan',
        in_delivery: 'blue',
        delivered: 'purple',
        closed: 'slate',
        cancelled: 'red'
      };
    • Колонка «Курьер» — показывать для order_type=delivery (lookup по courier_id через Admin BFF user-service proxy)
  • OrderHistoryPage.tsx — badge для delivered (история доставки)
  • OrderDetailPage.tsx — показывать timestamp’ы accepted_at, ready_at, handed_over_at, in_delivery_at, delivered_at в таймлайне
  • KitchenQueuePage.tsx (если существует) — убедиться что корректно обрабатывает все новые статусы, не крашится на unknown

Массовый импорт товаров — Excel

  • Распознавать столбцы requires_kitchen (да/нет/true/false) и kitchen_station_name (строка)
  • На бэке Catalog Service — резолвить kitchen_station_namekitchen_station_id (см. отдельное обсуждение, если не реализуется — вычеркнуть)

Verification

  1. pnpm build (web) зелёный
  2. pnpm lint и pnpm typecheck зелёный
  3. Dev-сервер стартует, в браузере:
    • /catalog/kitchen-stations — список, создание, редактирование, удаление работают
    • /catalog/products/:id/edit — галочка + dropdown станции функционируют, валидация срабатывает
    • /orders/active — бейджи новых статусов отображаются корректно
    • /orders/:id — таймлайн показывает все новые timestamp’ы
  4. Smoke пробить: создать станцию → создать товар с requires_kitchen=true + станция → удалить станцию → ошибка STATION_IN_USE → расшифровка