60 lines
2.4 KiB
Markdown
60 lines
2.4 KiB
Markdown
# Next.js Админ-Панель — Руководство
|
||
|
||
## Обзор
|
||
|
||
Новая админ-панель на **Next.js 16** (App Router) + **TypeScript** + **shadcn/ui** + **Prisma** (SQLite) + **Recharts**.
|
||
Полная замена EJS/SmartAdmin шаблонизатора.
|
||
|
||
## Стек
|
||
|
||
| Слой | Технология |
|
||
|---|---|
|
||
| Фреймворк | Next.js 16 (App Router, Turbopack) |
|
||
| Язык | TypeScript 5 |
|
||
| Стилизация | Tailwind CSS 4 + shadcn/ui (New York) |
|
||
| БД | Prisma ORM + SQLite |
|
||
| Графики | Recharts |
|
||
| Состояние | Zustand |
|
||
| Тема | next-themes (dark/light) |
|
||
| Уведомления | Sonner (toast) |
|
||
| Иконки | Lucide React |
|
||
|
||
## Авторизация
|
||
|
||
- Пароль: значение ADMIN_SECRET из .env
|
||
- Если задан SUPER_ADMIN_SECRET (и ≠ ADMIN_SECRET) — вход с ним даёт роль super_admin
|
||
- Если не задан — все админы = super_admin
|
||
- Кука admin_token (httpOnly, 24ч)
|
||
- Rate-limit: 5 попыток / 15 мин с IP
|
||
|
||
## Экраны (11)
|
||
|
||
1. **Dashboard** — 10 KPI, 7 графиков, активность, кошельки
|
||
2. **Catalog** — дерево локаций + товары + модалка
|
||
3. **Users** — список + детальная + бан + баланс
|
||
4. **Wallets** — 3 вкладки + seed фразы (super_admin)
|
||
5. **Purchases** — таблица с фильтрами
|
||
6. **Audit Log** — журнал с цветными бейджами
|
||
7. **Categories** — CRUD с привязкой к локациям
|
||
8. **Locations** — CRUD (страна/город/район)
|
||
9. **Settings** — редактирование .env переменных
|
||
10. **Locales** — inline-редактор 3 языков
|
||
11. **Danger Zone** — Seed / Clear с reauth
|
||
|
||
## Docker (ARM)
|
||
|
||
```bash
|
||
docker build -t tg-admin .
|
||
docker run -p 3000:3000 -v ./db:/app/db -e ADMIN_SECRET=your_secret tg-admin
|
||
```
|
||
|
||
Требования: минимум 512 МБ RAM, ARM64/ARMv7/x86_64.
|
||
|
||
## Seed-данные
|
||
|
||
POST /api/seed/demo создаёт данные идентичные оригинальному seed.js:
|
||
- 3 локации, 5 категорий, 11 подкатегорий
|
||
- 10 пользователей (alice-jack)
|
||
- 10 товаров, 25-30 покупок
|
||
- 10 криптокошельков, 2 комиссионных платежа, 12 audit записей
|