Юридические лица — Список
Роут: /legal-entities
API: GET /api/v1/legal-entities
Раздел скрыт при
franchise.type=individual(Введено в BR 1.4.4 §7) — При типе франшизы «ИП» (
individual) пункт меню «Юр. лица» скрыт, виджет на дашборде отсутствует, прямой URL/admin/legal-entities→ страница «404 Не найдено» или редирект на/.franchise.typeфронт получает изGET /api/v1/admin/auth/me. Колонка «Тип» (Франшиза/Франчайзи) приcorporateостаётся как раньше.
Что видит пользователь
Страница со списком юридических лиц в виде таблицы. Вверху — заголовок “Юридические лица”, строка поиска и фильтры. Справа от заголовка — кнопки “Добавить юрлицо” и “Импорт из Excel”.
Таблица
Колонки
| Колонка | Данные | Примечание |
|---|---|---|
| Наименование | name | Кликабельное — переход в карточку |
| ИНН | inn | |
| Тип | type | ”Франшиза” / “Франчайзи” |
| Статус | status | ”Активен” (зелёный) / “Приостановлен” (красная метка) |
| Кол-во ТТ | store_count | Число |
| Главное | is_primary | Бейдж “Главное” если true |
| Действия | — | Меню с действиями (см. ниже) |
Особенности отображения
- Главное ЮЛ закреплено вверху списка (всегда первое, вне зависимости от сортировки) с бейджем “Главное”
- Приостановленное ЮЛ отображается серым цветом, статус — красной меткой “Приостановлен”
Фильтры
| Фильтр | Тип | Значения | Default |
|---|---|---|---|
| Статус | Select | Все / Активен / Приостановлен | Все |
| Тип | Select | Все / Франшиза / Франчайзи | Все |
Фильтры применяются мгновенно (без кнопки “Применить”). При смене фильтра — сброс на page=1.
Поиск
- Поле ввода с placeholder “Поиск по наименованию или ИНН”
- Поиск с debounce (300ms)
- Query param:
search - Ищет по обоим полям одновременно (на бэкенде)
Сортировка
- По наименованию А-Я (default:
sort=name_asc) - Клик по заголовку колонки “Наименование” переключает A-Я / Я-A
Пагинация
- 20 записей на страницу
- Постраничная навигация внизу (номера страниц + стрелки)
- Query params:
page,per_page
Действия
Кнопки в шапке (только Franchise)
| Кнопка | Переход | Видимость |
|---|---|---|
| ”Добавить юрлицо” | /legal-entities/new | Только Franchise |
| ”Импорт из Excel” | /legal-entities/import | Только Franchise |
Меню действий строки
| Действие | Видимость | Что происходит |
|---|---|---|
| Редактировать | Franchise — всегда; Franchisee — только свои | Переход в /legal-entities/{id}/edit |
| Приостановить | Franchise + type=franchisee + status=active | Модалка подтверждения |
| Возобновить | Franchise + type=franchisee + status=suspended | Модалка подтверждения |
| Удалить | Franchise | Модалка подтверждения |
Модалки подтверждений
Удаление
Триггер: клик “Удалить” в меню строки
API: DELETE /api/v1/legal-entities/{id}
Сценарий 1 — есть привязанные ТТ (ошибка HAS_ATTACHED_STORES):
- Заголовок: “Невозможно удалить”
- Текст: “К юридическому лицу привязаны торговые точки:”
- Список ТТ (из
error.details) — каждая кликабельная (ссылка на ТТ) - Кнопка: “Понятно” (закрывает модалку)
Сценарий 2 — нет ТТ:
- Заголовок: “Удаление юридического лица”
- Текст: “Вы уверены? Это действие нельзя отменить.”
- Кнопки: “Отмена” / “Удалить” (красная)
- После успеха: убрать строку из таблицы, toast “ЮЛ удалено”
Приостановка
Триггер: клик “Приостановить”
Предварительный запрос: GET /internal/stores?legal_entity_id={id} (через BFF) — получить список ТТ
API: POST /api/v1/legal-entities/{id}/suspend
- Заголовок: “Приостановка юридического лица”
- Текст: “Будет приостановлено ЮЛ [название]. Следующие торговые точки будут сняты с публикации:”
- Список ТТ (id, name)
- Кнопки: “Отмена” / “Приостановить” (оранжевая)
- После успеха: обновить статус в таблице, toast “ЮЛ приостановлено, N ТТ сняты с публикации”
Возобновление
Триггер: клик “Возобновить”
API: POST /api/v1/legal-entities/{id}/resume
- Заголовок: “Возобновление юридического лица”
- Текст: “ЮЛ [название] будет возобновлено. Торговые точки потребуется опубликовать вручную.”
- Кнопки: “Отмена” / “Возобновить”
- После успеха: обновить статус в таблице, toast “ЮЛ возобновлено”
Состояния
| Состояние | Что показываем |
|---|---|
| Загрузка | Skeleton-таблица (placeholder строк) |
| Пусто (Franchise) | “Юридические лица пока не добавлены” + кнопки “Добавить юрлицо” и “Импорт из Excel” |
| Пусто (Franchisee) | “У вас нет юридических лиц” |
| Ошибка загрузки | ”Не удалось загрузить данные” + кнопка “Повторить” |
| Пустой поиск | ”Ничего не найдено по запросу «…»” |
Владелец партнёра
(Лейбл обновлён в BR 1.4.4 — без enum-роли admin_franchisee; scope определяется по legal_entities.owner_user_id)
- Видит только свои ЮЛ (API фильтрует автоматически по scope)
- Нет кнопок: “Добавить юрлицо”, “Импорт из Excel”
- Нет действий: удалить, приостановить, возобновить
- Есть: редактировать (только свои, ограниченный набор полей — см. Карточка ЮЛ)
- Вкладку «Права» у своего ЮЛ не видит (не может сам себе менять права)
Переходы
| Откуда | Куда | Триггер |
|---|---|---|
| Список | Карточка просмотра | Клик по наименованию |
| Список | Форма создания | Кнопка “Добавить юрлицо” |
| Список | Импорт | Кнопка “Импорт из Excel” |
| Список | Форма редактирования | Действие “Редактировать” |