CAT-10: Версии каталога список + публикация

Что сделать

Создать страницу списка версий каталога с таблицей, публикацией и страницу просмотра содержимого версии.

Смотри спеку

Каталог — Версии — полная спека.

Конкретно

Список версий

Страница /catalog/versions (Franchise only). API: GET /api/v1/admin/catalog/versions.

Заголовок “Версии каталога”.

Колонки таблицы:

КолонкаДанныеПримечание
Версияversionv1, v2, … Кликабельная → /catalog/versions/:id
СтатусstatusБейдж: draft → серый “Черновик”, published → зелёный “Опубликована”, archived → серый italic “Архив”
Дата публикацииpublished_atФормат: DD.MM.YYYY HH:mm. Если draft — ”—“
Кол-во товаровproducts_countЧисло
ДействияКнопка “Опубликовать” (только для draft)

Модалка публикации:

  • Триггер: клик “Опубликовать” на draft-строке
  • API: POST /api/v1/admin/catalog/publish
  • Заголовок: “Публикация каталога”
  • Текст: “Опубликовать каталог v{N}? Текущая опубликованная версия уйдёт в архив.”
  • Кнопки: “Отмена” / “Опубликовать” (зелёная)
  • Кнопка “Опубликовать” показывает спиннер во время запроса, блокируется
  • После успеха: обновить статусы (draft → published, published → archived), toast “Каталог v{N} опубликован”

Содержимое версии

Страница /catalog/versions/:id. API: GET /api/v1/admin/catalog/versions/:id.

Заголовок: “Каталог v{N}” + бейдж статуса. Кнопка “Назад к версиям” → /catalog/versions.

Содержимое (readonly):

  • Секция “Категории”: дерево категорий (readonly)
  • Секция “Товары”: таблица (Название, Категория, Тип, Цена, Ед. изм.)

Состояния:

  • Загрузка: skeleton-таблица
  • Пусто: “Нет версий каталога. Создайте товары и категории — draft создастся автоматически.”
  • Ошибка: “Не удалось загрузить данные” + кнопка “Повторить”
  • Публикация в процессе: спиннер на кнопке, кнопка заблокирована

Ролевая видимость:

  • Franchise: полный доступ, может публиковать
  • Franchisee/Manager/Cashier: нет доступа, страница скрыта в сайдбаре, прямой переход → редирект на дашборд

Файлы

  • web/src/pages/catalog/VersionListPage.tsx — создать
  • web/src/pages/catalog/VersionViewPage.tsx — создать

Зависит от

  • CAT-01
  • CAT-02