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(новый) — типы для админки:KdsFranchiseSettingsKdsDevice(с computedis_online)- расширить
KitchenStationполямиyellow_threshold_minutes,red_threshold_minutes
API клиент
-
web/src/api/kdsSettings.ts:getSettings()→GET /api/v1/admin/kds/settingsupdateSettings(partial)→PATCH /api/v1/admin/kds/settings
-
web/src/api/kdsDevices.ts:listDevices(filters)→GET /api/v1/admin/kds/devicesrenameDevice(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-settings→KdsSettingsPage(с гейтингомkds.settings.edit)
Sidebar
-
web/src/components/Sidebar.tsx— добавить пункт:- «Настройки KDS» (после «Расписание смен»), иконка 📺
- Видимость по
kds.settings.edit(через UI-гейтинг)
Аудио файлы
-
web/public/sounds/:bell.mp3,chime.mp3,buzzer.mp3,marimba.mp3,digital.mp3alarm.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 ServiceGET /api/v1/admin/kds/devices→ User ServicePATCH /api/v1/admin/kds/devices/{id}→ User ServiceDELETE /api/v1/admin/kds/devices/{id}→ User Service
-
bff/src/routes/catalog.ts(расширить existing):kitchen-stationsendpoints — 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/settingsendpoints должны быть готовы - ⛔ User Service
/admin/kds/devicesendpoints должны быть готовы - ⛔ Permissions
kds.access,kds.settings.editseeded в User Service