6.2 KiB
6.2 KiB
2026-05-19 — Статическая страница «О покупке» (удаление админ-CRUD)
Цель
Убрать ручное наполнение информационной страницы админом через InfoPageBlock CRUD.
Заменить на статическую страницу с хардкод-контентом в React-компонентах: схемы процессов,
пошаговые инструкции, карточки доставки, список оплат, условия возврата.
Что удаляется
| Файл/директория | Действие |
|---|---|
client/src/pages/admin-info/ |
Удалить целиком (AdminInfoPage + index.ts) |
client/src/entities/info/ |
Удалить целиком (api, model, index.ts) |
server/src/routes/api/info-page.js |
Удалить целиком |
server/src/routes/api.js |
Убрать import + вызов registerInfoPageRoutes |
server/prisma/schema.prisma |
Удалить модель InfoPageBlock и связанный индекс |
client/src/pages/admin-layout/ui/AdminLayoutPage.tsx |
Убрать пункт меню «Инфо-страница», импорт и роут |
Миграция 20260503144425_... |
Не трогать, Prisma обработает через db:migrate |
После удаления модели Prisma нужно выполнить npm run db:migrate в server/.
Что остаётся
- Публичный роут
GET /api/info-page/blocksудаляется — страница больше не ходит на сервер - Роут
/infoвclient/src/app/routes/index.tsxостаётся как есть - Ссылка «О покупке» в футере
MainLayout.tsxостаётся как есть
Новая структура страницы
client/src/pages/info/
ui/
InfoPage.tsx -- контейнер: заголовок + секции
sections/
HowToOrderSection.tsx -- Stepper: 5 шагов покупки
DeliverySection.tsx -- Grid-карточки: самовывоз, курьер, почта
PaymentSection.tsx -- List со способами оплаты
ReturnsSection.tsx -- Paper-блоки: возврат, гарантия
index.ts -- export { InfoPage }
Дизайн секций
InfoPage (контейнер)
- Typography
variant="h4": «Информация для покупателей» - Typography
color="text.secondary"с текущим подзаголовком - Секции рендерятся последовательно с
Stack spacing={4}
HowToOrderSection
- MUI
Stepperвертикальный,activeStep=-1(все шаги видны, не активные) - 5 шагов с
StepLabel, каждый содержит:- Заголовок шага
- Пояснительный текст
- Иконку через
StepIconComponentили проп icon вStep
Шаги:
- «Выберите товары» (ShoppingCart) — Найдите нужное в каталоге, добавьте в корзину
- «Проверьте корзину» (ClipboardList) — Проверьте состав заказа, количество и итоговую сумму
- «Укажите контакты и адрес» (Mail) — Заполните имя, телефон, email и адрес доставки
- «Выберите доставку и оплату» (Truck) — Выберите удобный способ получения и оплаты
- «Подтвердите заказ» (CheckCircle) — Проверьте всё ещё раз и нажмите «Оформить заказ»
DeliverySection
- Три карточки в
Grid container spacing={2}сPaper variant="outlined":- Самовывоз (Store) — Бесплатно. Адрес. Перед визитом согласуем время.
- Курьер по городу (Truck) — Доставка в пределах города. Сроки и стоимость уточняются.
- Почта / СДЭК (Package) — Отправка с трек-номером. Стоимость по тарифу перевозчика.
PaymentSection
- MUI
ListсListItemэлементами, каждый сListItemIcon:- Банковская карта онлайн (CreditCard)
- Оплата при получении (Banknote)
- Текст: «Оплата происходит после подтверждения заказа мастером.»
ReturnsSection
- Два
Paper variant="outlined"блока:- «Возврат» — Если товар не соответствует описанию или есть дефект, свяжитесь с нами. Мы заменим изделие или вернём деньги.
- «Гарантия» — Мы отвечаем за качество каждого изделия. Все дефекты, возникшие не по вине покупателя, устраняем или меняем изделие.
Константы
Использовать существующие:
PICKUP_ADDRESS_FULL,PICKUP_COORDINATESиз@/shared/constants/pickup-pointSTORE_EMAILиз@/shared/constants/store- Для способов оплаты — текст захардкожен, т.к. payment-method из shared/constants содержит только ключи
Иконки
Все иконки из lucide-react: ShoppingCart, ClipboardList, Mail, Truck, CheckCircle, Store, Package, CreditCard, Banknote.
Что НЕ входит в scope
- Сохранение обратной совместимости с текущей динамической страницей
- Миграция существующих данных InfoPageBlock (они просто удаляются)
- Автообновление контента админом (страница статическая)
- Телефоны поддержки (если понадобятся — отдельной задачей)