Дашборд терминалов
Роут: /activity/terminals
API: GET /api/v1/admin/shift-records (список смен, существующий) + GET /api/v1/admin/shift-records/:id/report (отчёт по смене, lazy при клике)
Что видит пользователь
Страница со сводкой по терминалам (сменам) за выбранный день. Вверху — карточки-сводки по всем сменам за день, ниже — таблица со списком смен.
Фильтры
| Фильтр | Тип | Значения | Default |
|---|---|---|---|
| Торговая точка | Select | Список ТТ (в рамках ролевого доступа) | Все ТТ |
| Дата | Date picker | Любая дата | Сегодня |
- Query params:
store_id,date - При смене фильтра — перезагрузка данных
Summary cards (верхняя полоса)
| Карточка | Значение | Описание |
|---|---|---|
| Выручка за день | Сумма total_revenue всех смен | ₽ |
| Заказов за день | Сумма total_orders всех смен | шт. |
| Смен за день | Количество записей | шт. |
| Лидер продаж | Сотрудник с макс. выручкой | ФИО + сумма |
Загрузка summary
Summary cards загружаются вместе с таблицей. Для каждой смены в таблице подгружается краткая финансовая сводка. Агрегация — на клиенте.
Таблица смен
| Колонка | Данные | Примечание |
|---|---|---|
| Сотрудник | employee_name | Кликабельное — переход в карточку |
| Торговая точка | store_name | Только если фильтр “Все ТТ” |
| Начало смены | clock_in | HH:MM |
| Конец смены | clock_out | HH:MM или “В работе” (зелёный бейдж) |
| Статус | report_type | ”X” (зелёный) / “Z” (серый) |
| Выручка | total_revenue | ₽, загружается lazy |
| Заказов | total_orders | загружается lazy |
Сортировка
- По умолчанию: по времени начала смены (раньше — выше)
- Клик по “Выручка” — сортировка по выручке
Клик по строке
Переход на страницу отчёта по смене: /shift-records/:id/report
Загрузка данных
- При открытии страницы →
GET /api/v1/admin/shift-records?date={today}&status=any— получаем список смен за день - Для каждой смены (параллельно, batch) →
GET /api/v1/admin/shift-records/:id/report— получаем финансовую сводку - Агрегация summary cards — на клиенте из полученных данных
Оптимизация
Если смен за день > 10, загружать отчёты пачками по 5 для предотвращения burst-нагрузки. Показывать skeleton для ещё не загруженных строк.
Состояния
| Состояние | Что показываем |
|---|---|
| Загрузка | Skeleton для карточек + skeleton-таблица |
| Пусто | ”Нет смен за выбранный день” |
| Частичная загрузка | Таблица с данными смен, ”…” в колонках выручки/заказов |
| Ошибка | ”Не удалось загрузить данные” + “Повторить” |
Ролевой доступ
| Роль | Доступ |
|---|---|
| Franchise | Все ТТ |
| Franchisee | Только свои ТТ |
| Менеджер ТТ | Только своя ТТ (фильтр ТТ скрыт) |
| Кассир | Нет доступа — скрыт в навигации |
Переходы
| Откуда | Куда | Триггер |
|---|---|---|
| Sidebar | Дашборд терминалов | Пункт “Терминалы” в разделе Активность |
| Дашборд терминалов | Отчёт по смене | Клик по строке |
| Дашборд терминалов | Карточка сотрудника | Клик по ФИО |
| Дашборд активности | Дашборд терминалов | Таб “Терминалы” |