Маркетинговая информация — Редактирование слайда

Роут: /marketing/stores/{storeId}/slides/{slideId}/edit (или модалка-overlay поверх списка) API: PUT /api/v1/admin/stores/{storeId}/marketing-slides/{slideId}

Источники

Реализация — модалка или страница

Реализовать как модалку (быстрый workflow, не теряем контекст списка). Полноэкранный вариант — Phase 2 если потребуется.


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

Большая модалка с тремя зонами:

┌──────────────────────────────────────────────────────────────┐
│ Редактирование слайда                              ✕         │
├──────────────────────────────────────────────────────────────┤
│  [Большое превью текущей картинки]   │  Заголовок            │
│   16:9                                │  [_____________]     │
│                                       │                       │
│   [Заменить картинку →]               │  Активен  [☑]        │
│                                       │                       │
│                                       │  Источник: Загружен   │
│                                       │  Создан: 12.05.2026   │
│                                       │  Обновлён: 14.05.2026 │
├──────────────────────────────────────────────────────────────┤
│  [Удалить]                       [Отмена]   [Сохранить]       │
└──────────────────────────────────────────────────────────────┘

Поля формы

ПолеТипRequiredПоведение
ЗаголовокInputДаPre-filled, ≤ 200 символов
АктивенSwitchНетPre-filled. Если выключаем 21-й активный — ok; если включаем 21-й — MARKETING_SLIDES_LIMIT_REACHED
Картинка (опционально)File inputНетКнопка «Заменить картинку». Открывает picker. Те же валидации что при загрузке нового

Иммутабельные поля

source, source_ref, order, store_id — не отображаются для редактирования. Показываются как read-only метаданные.


Submit

Если картинка не менялась

PUT как JSON:

PUT /admin/api/v1/stores/{storeId}/marketing-slides/{slideId}
Content-Type: application/json
 
{ "title": "Hero CTA v2", "active": true }

Если картинка менялась

PUT как multipart:

PUT /admin/api/v1/stores/{storeId}/marketing-slides/{slideId}
Content-Type: multipart/form-data
 
file: <new-binary>
title: "Hero CTA v2"
active: true

После успеха — закрыть модалку, обновить строку в списке.


Удаление

Кнопка «Удалить» (красная, в левом нижнем углу) → confirm-модалка:

Удалить слайд «Hero CTA»?

Слайд исчезнет из карусели на кассе через несколько секунд.
Действие необратимо.

[Отмена]  [Удалить]

После подтверждения — DELETE /admin/api/v1/stores/{storeId}/marketing-slides/{slideId} → закрыть модалку → обновить список.


Состояния

СостояниеЧто показываем
Загрузка слайдаSkeleton поверх формы
PristineКнопка «Сохранить» disabled
Изменения внесены«Сохранить» активна
SubmittingDisabled-форма, лоадер
Ошибка validationInline под полями + toast
Ошибка лимит активныхMARKETING_SLIDES_LIMIT_REACHED → toast «Достигнут лимит 20 активных слайдов»
Ошибка not foundToast «Слайд был удалён в параллельной сессии» + закрыть модалку, reload список

AI-источник (read-only метаданные)

Если source = ai_photo_studio:

Источник: AI Photo Studio
Job ID: 7f3a-...
Preset: poster-coffee
[Открыть в AI Studio →]   ← клик: открывает модалку Photo Studio в read-only с этим job_id

В BR 6.1 — read-only без действий. В BR 6.2 кнопка «Открыть в AI Studio» откроет AI Studio modal.


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

  • marketing.read — модалка открывается в read-only режиме (поля disabled, кнопки «Сохранить»/«Удалить» скрыты)
  • marketing.write — полное редактирование

Ссылки