Сотрудники — Список

Роут: /employees API: GET /api/v1/employees

(Обновлено в BR 1.4.4)

Колонка и фильтр «Multi-tenancy роль» удалены вместе с enum employees.role. Колонка «Permissions-роли» и фильтр «Permissions-роль» — оставлены. Колонка «Торговые точки» теперь — агрегат уникальных ТТ по всем roles[].store_ids сотрудника.


Что видит пользователь

Страница со списком сотрудников в виде таблицы. Вверху — заголовок “Сотрудники”, строка поиска и фильтры. Справа от заголовка — кнопка “Добавить сотрудника”.


Таблица

Колонки

(Обновлено в BR 1.4.4)

КолонкаДанныеПримечание
ФИОfirst_name + last_nameКликабельное — переход в карточку. Если сотрудник — владелец, рядом мини-бейдж «Владелец франшизы» / «Владелец партнёра»
Emailemail
ТелефонphoneИли ”—“
Permissions-ролиroles[].nameЧипы названий ролей; max 3 видимых, остальные в «+N» с tooltip-полным списком. Скрытая роль владельца партнёра отображается как «Собственные права» (без техназвания)
Торговые точкиагрегат roles[].store_idsУникальный набор ТТ по всем permissions-ролям сотрудника (через запятую). Для владельцев — «Все ТТ франшизы» / «Все ТТ своих ЮЛ» соответственно
Статусstatus”Активен” (зелёный) / “Деактивирован” (серая метка)
Курьерis_courierБейдж “Курьер” если true, иначе пусто
ДействияМеню с действиями (см. ниже)

Особенности отображения

  • Деактивированные сотрудники отображаются серым цветом, статус — серой меткой “Деактивирован”

Фильтры

(Обновлено в BR 1.4.4 — фильтр «Multi-tenancy роль» удалён)

ФильтрТипЗначенияDefault
Permissions-рольSelectВсе / {список активных обычных ролей франшизы}Все (query param role_id)
Торговая точкаSelectВсе / список ТТ (из API)Все
СтатусSelectВсе / Активен / ДеактивированВсе

Скрытые роли владельцев партнёров в фильтр не попадают (бэк фильтрует по owner_legal_entity_id IS NULL).

Фильтры применяются мгновенно (без кнопки “Применить”). При смене фильтра — сброс на page=1.

Поиск

  • Поле ввода с placeholder “Поиск по ФИО, email или телефону”
  • Поиск с debounce (300ms)
  • Query param: search
  • Ищет по всем трём полям одновременно (на бэкенде)

Сортировка

  • По ФИО А-Я (default: sort=name_asc)
  • Клик по заголовку колонки “ФИО” переключает A-Я / Я-A

Пагинация

  • 20 записей на страницу
  • Постраничная навигация внизу (номера страниц + стрелки)
  • Query params: page, per_page

Действия

Кнопки в шапке

КнопкаПереходВидимость
”Добавить сотрудника”/employees/newВладельцы (франшизы и партнёра); сотрудники с employees.edit
”Выгрузить из PK” (BR 3.5)/employees/import-from-paykeeper?account_id={id} (или модалка выбора ЛК если их >1)integrations.read (видна) + integrations.manage AND employees.edit AND ≥1 active PK-аккаунт во scope (активна). Подробно: Импорт сотрудников из PayKeeper
”Журнал импортов” (BR 3.5)Открывает модалкуintegrations.read AND есть хотя бы один прошлый прогон импорта

Меню действий строки

ДействиеВидимостьЧто происходит
РедактироватьВладелец франшизы — все; владелец партнёра — только своих; обычный сотрудник — employees.edit в своём scopeПереход в /employees/{id}/edit
ДеактивироватьТе же + status=activeМодалка подтверждения
РеактивироватьТе же + status=inactiveМодалка подтверждения

Модалки подтверждений

Деактивация

Триггер: клик “Деактивировать” в меню строки API: POST /api/v1/employees/{id}/deactivate

  • Заголовок: “Деактивация сотрудника”
  • Текст: “Сотрудник [имя фамилия] будет деактивирован. Все его сессии будут завершены.”
  • Кнопки: “Отмена” / “Деактивировать” (красная)
  • После успеха: обновить статус в таблице, toast “Сотрудник деактивирован”

Реактивация

Триггер: клик “Реактивировать” в меню строки API: POST /api/v1/employees/{id}/reactivate

  • Заголовок: “Реактивация сотрудника”
  • Текст: “Сотрудник [имя фамилия] будет реактивирован.”
  • Кнопки: “Отмена” / “Реактивировать”
  • После успеха: обновить статус в таблице, toast “Сотрудник реактивирован”

Состояния

СостояниеЧто показываем
ЗагрузкаSkeleton-таблица (placeholder строк)
Пусто (владельцы)“Сотрудники пока не добавлены” + кнопка “Добавить сотрудника”
Ошибка загрузки”Не удалось загрузить данные” + кнопка “Повторить”
Пустой поиск”Ничего не найдено по запросу «…»”

Ролевой доступ

(Обновлено в BR 1.4.4 — без enum, через scope + permissions)

Владелец франшизы

  • Видит всех сотрудников всех ТТ
  • Кнопка “Добавить сотрудника”
  • Все действия доступны

Владелец партнёра

  • Видит сотрудников только своих ЮЛ/ТТ (API фильтрует автоматически по scope)
  • Кнопка “Добавить сотрудника”
  • Действия: редактировать, деактивировать, реактивировать — только своих

Обычный сотрудник

  • Доступ к разделу — если есть permission employees.read. Видит сотрудников только своих ТТ (API фильтрует автоматически)
  • Кнопка “Добавить сотрудника” — только при permission employees.edit (обычно не выдаётся)
  • Если нет ни employees.read, ни employees.edit — пункт меню «Сотрудники» скрыт; прямой URL → 403

Переходы

ОткудаКудаТриггер
СписокКарточка просмотраКлик по ФИО
СписокФорма созданияКнопка “Добавить сотрудника”
СписокФорма редактированияДействие “Редактировать”

BR 1.4.1 — Расширение навигации

Дополнения в рамках BR 1.4.1

Новые пункты в sidebar (раздел “Персонал”)

ПунктРоутОписание
Сотрудники/employeesТекущий список (без изменений)
Расписание/scheduleРасписание смен — календарь смен
Дашборд активности/activity/employeesДашборд активности сотрудников — сводка по сотрудникам
Платёжные ведомости/payrollПлатёжные ведомости — расчёт зарплат

Кнопка “Архив”

  • Рядом с кнопкой “Добавить сотрудника” добавить кнопку “Архив” (иконка архива, secondary style)
  • При клике: применить фильтр status=inactive (показать только деактивированных сотрудников)
  • В режиме архива: заголовок меняется на “Сотрудники — Архив”, кнопка “Архив” заменяется на “Активные”
  • Переключение через query param: /employees?archive=true

Ссылки