Компактное редактирование меню
Цель
Заменить ручной режим редактора меню на быстрый рабочий экран из трёх связанных таблиц. Пользователь редактирует меню, его разделы и элементы без переходов между экранами и без модальных окон.
Компоновка
На ширине lg и больше экран состоит из трёх равных колонок:
- Меню — список меню текущего tenant.
- Разделы — разделы выбранного меню.
- Элементы — элементы выбранного раздела.
На меньших экранах колонки располагаются вертикально в том же порядке. Каждая таблица имеет компактную шапку с названием и кнопкой «Добавить». Выбранная строка получает стандартное выделение Ant Design. До выбора родителя вторая и третья таблицы показывают пустое состояние с подсказкой.
Поведение
Меню
- CRUD выполняется в строках таблицы.
- Новое меню появляется как редактируемая строка; Enter или действие «Сохранить» создаёт его, «Отмена» убирает черновик.
- Существующая строка переключается в редактирование по действию «Изменить».
- Удаление требует inline-подтверждения в ячейке действий, без модального окна.
- Выбор меню сбрасывает выбранный раздел и загружает его разделы.
Разделы
- Работают только для выбранного меню.
- CRUD — inline, с теми же действиями сохранения, отмены и inline-подтверждения удаления.
- Порядок изменяется перетаскиванием за отдельную рукоятку. Новый порядок оптимистично показывается сразу, сохраняется на сервере и откатывается при ошибке.
- При выборе раздела загружаются его элементы.
Элементы
- Работают только для выбранного раздела.
- CRUD — inline. Базовый набор полей: название, описание, цена, доступность и включённость; расширенные поля остаются вне этого компактного потока.
- Перетаскивание и сохранение порядка работают так же, как у разделов.
Технические границы
- Используются существующие API меню, разделов и элементов. Если текущий API заменяет разделы целиком и блокирует изменения после появления элементов, его нужно заменить адресными CRUD/reorder-операциями, не удаляющими связанные элементы.
- Таблицы используют Ant Design / Pro Components и текущие дизайн-токены; новые локальные цвета и размеры не вводятся.
- Архивное меню и режим read-only отключают изменяющие действия и сортировку.
- Предпросмотр остаётся отдельной областью/режимом и обновляется после успешных изменений структуры.
Ошибки и доступность
- Состояние сохранения видно в строке; повторные действия для неё блокируются.
- Ошибка показывается через существующий toast и возвращает оптимистичный порядок.
- Ручка сортировки имеет текстовую метку для screen reader; все основные действия содержат иконку и текст.
Проверка
- Тесты view-model/клиента: каскадный сброс выбора, inline create/edit/cancel, восстановление после ошибки reorder.
- API-тесты: адресный CRUD и перестановка разделов/элементов с tenant-изоляцией.
- UI-smoke: три колонки на desktop, вертикальный поток на mobile, drag-сортировка.