Admin Web — BR 5.1

Где живёт код

erp-admin/web/ (репо nearbyErp/erp-admin, monorepo: bff/, web/, shared/). Стек: React 18 + TypeScript + Vite, без UI-фреймворка (vanilla CSS).

Расширения админки: новый раздел «Настройки KDS» + правки страницы «Кухонные станции» (поля порогов).

Что делаем

Shared types

  • shared/src/types/kds.ts (новый) — типы для админки:
    • KdsFranchiseSettings
    • KdsDevice (с computed is_online)
    • расширить KitchenStation полями yellow_threshold_minutes, red_threshold_minutes

API клиент

  • web/src/api/kdsSettings.ts:

    • getSettings()GET /api/v1/admin/kds/settings
    • updateSettings(partial)PATCH /api/v1/admin/kds/settings
  • web/src/api/kdsDevices.ts:

    • listDevices(filters)GET /api/v1/admin/kds/devices
    • renameDevice(id, name)PATCH /api/v1/admin/kds/devices/{id}
    • revokeDevice(id)DELETE /api/v1/admin/kds/devices/{id}
  • web/src/api/kitchenStations.ts (расширить existing):

    • В типе response добавить поля порогов
    • В createStation / updateStation принимать пороги

Страницы

  • web/src/pages/kds/KdsSettingsPage.tsx (новая):

    • Тулбар с переключателем вкладок (Звуки / Устройства)
    • Гейтинг по permission kds.settings.edit
  • web/src/pages/kds/SoundSettingsTab.tsx:

    • Форма с 5 полями (звук нового заказа, интервал, звук просрочки, громкость, авто-логаут)
    • Кнопка «Прослушать» для каждого dropdown — проигрывает mp3 из web/public/sounds/{name}.mp3
    • Сохранить → PATCH /admin/kds/settings
  • web/src/pages/kds/DevicesTab.tsx:

    • Таблица устройств с фильтрами (ТТ, online-статус)
    • Real-time online-индикатор (refetch каждые 60 сек)
    • Действия per-row: Переименовать (модалка), Удалить (confirm для владельца)
  • web/src/pages/kds/KitchenStationsPage.tsx (existing — расширить):

    • В таблицу добавить колонки «Жёлтый порог» / «Красный порог»
    • В модалку создания/редактирования — два поля Number с подсказкой

Routing

  • web/src/App.tsx — добавить routes:
    • /kds-settingsKdsSettingsPage (с гейтингом kds.settings.edit)
  • web/src/components/Sidebar.tsx — добавить пункт:
    • «Настройки KDS» (после «Расписание смен»), иконка 📺
    • Видимость по kds.settings.edit (через UI-гейтинг)

Аудио файлы

  • web/public/sounds/:
    • bell.mp3, chime.mp3, buzzer.mp3, marimba.mp3, digital.mp3
    • alarm.mp3, siren.mp3, bell-loud.mp3
    • Те же файлы что в erp-kds — обеспечить идентичность через симлинк или single-source

BFF routes (admin-bff)

  • bff/src/routes/kdsAdmin.ts (новый):

    • GET /api/v1/admin/kds/settings → Catalog Service (proxy)
    • PATCH /api/v1/admin/kds/settings → Catalog Service
    • GET /api/v1/admin/kds/devices → User Service
    • PATCH /api/v1/admin/kds/devices/{id} → User Service
    • DELETE /api/v1/admin/kds/devices/{id} → User Service
  • bff/src/routes/catalog.ts (расширить existing):

    • kitchen-stations endpoints — Response типы расширить порогами

Permissions UI

  • При создании/правке роли в админке — в каталоге permissions появятся новые:
    • kds.access (категория «KDS»)
    • kds.settings.edit (категория «KDS»)
  • Permissions подгружаются с бэка через GET /roles/permission-catalog — если в User Service seed выполнен, fрафик автоматически появится. Без правок в admin-web.

Tests

  • Manual smoke:
    • Создать роль «Повар» с kds.access → выдать сотруднику
    • Создать роль «KDS-админ» с kds.settings.edit → перейти в /kds-settings → видеть и менять
    • Изменить пороги станции → убедиться что save работает
    • Удалить тестовое устройство в админке → убедиться что revoke_at проставился

Что НЕ делаем

  • Не делаем live-обновление списка устройств через WS (P1) — refetch каждые 60 сек
  • Не реализуем загрузку кастомных звуковых файлов (BR 5.7)
  • Не делаем экран превью KDS внутри админки
  • Не делаем аналитику использования (сколько заказов в час прошло через KDS) — P1+

Зависимости

  • ⛔ Catalog Service /admin/kds/settings endpoints должны быть готовы
  • ⛔ User Service /admin/kds/devices endpoints должны быть готовы
  • ⛔ Permissions kds.access, kds.settings.edit seeded в User Service

Ссылки