CAT-03: Товары список + таб Удалённые

Что сделать

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

Смотри спеку

Таблица, Таб “Удалённые”, Состояния.

Конкретно

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

Заголовок “Товары” + кнопка “Добавить товар” (Franchise only, переход /catalog/products/new).

Табы: “Активные” (default), “Удалённые” (Franchise only, GET /api/v1/admin/products?deleted=true).

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

КолонкаДанныеПримечание
НазваниеnameКликабельное → /catalog/products/:id
Категорияcategory.name
ТипtypeБейдж: Блюдо / Продукт
Ценаbase_priceФормат: 1 200,00 ₽
Ед. изм.unit_of_measureшт / кг / г / л / мл / порция
СтатусstatusБейдж: active → зелёный “Активный”, inactive → серый “Неактивный”
Версияversionv1, v2, …

Пагинация: 20 записей/страница, номера страниц + стрелки. Query params: page, per_page.

Таб “Удалённые”: те же колонки, но вместо действий — кнопка “Восстановить”. API: POST /api/v1/admin/products/:id/restore. После успеха: toast “Товар восстановлен”, строка исчезает.

Состояния:

  • Загрузка: skeleton-таблица
  • Пусто (Franchise): “Товары пока не добавлены” + кнопка “Добавить товар”
  • Пусто (Franchisee/Manager): “Товары пока не добавлены”
  • Ошибка: “Не удалось загрузить данные” + кнопка “Повторить”
  • Пустой поиск: “Ничего не найдено по запросу «…»”

API-модуль: создать web/src/api/catalog.ts с функциями getProducts, getProduct, createProduct, updateProduct, deleteProduct, restoreProduct, getCategories, createCategory, updateCategory, deleteCategory, getCatalogVersions, getCatalogVersion, publishCatalog, getPublishedCatalog.

Файлы

  • web/src/pages/catalog/ProductListPage.tsx — создать
  • web/src/api/catalog.ts — создать

Зависит от

  • CAT-01
  • CAT-02