add admin pages layouts

This commit is contained in:
smanylov
2026-01-22 17:30:46 +07:00
parent 2de0cc444d
commit e406833057
22 changed files with 3533 additions and 256 deletions
+37
View File
@@ -0,0 +1,37 @@
export default function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3>📈 Аналитика</h3>
<div className="content-header-actions">
<select id="analytics-period">
<option value="today">Сегодня</option>
<option value="week">Неделя</option>
<option value="month">Месяц</option>
<option value="year">Год</option>
</select>
<button className="btn btn-primary">
<span>📊</span>
<span>Сгенерировать отчет</span>
</button>
</div>
</div>
<div className="content-body">
<div className="chart-container">
<h4>Регистрации пользователей</h4>
<canvas id="registrations-chart" width="400" height="100"></canvas>
</div>
<div className="chart-container">
<h4>Загрузка контента</h4>
<canvas id="content-chart" width="400" height="100"></canvas>
</div>
<div className="chart-container">
<h4>Доходы</h4>
<canvas id="revenue-chart" width="400" height="100"></canvas>
</div>
</div>
</div>
)
}
+22
View File
@@ -0,0 +1,22 @@
export default function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3>🔌 Управление API</h3>
<div className="content-header-actions">
<button className="btn btn-primary">
<span></span>
<span>Создать API ключ</span>
</button>
</div>
</div>
<div className="content-body" id="api-container">
<div className="empty-state">
<div className="empty-state-icon">🔌</div>
<h4>Нет API ключей</h4>
<p>Создайте первый API ключ для интеграции</p>
</div>
</div>
</div>
)
}
+29
View File
@@ -0,0 +1,29 @@
export default function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3>Управление контентом</h3>
<div className="content-header-actions">
<div className="search-box">
<span>🔍</span>
<input type="text" id="content-search" placeholder="Поиск контента..." />
</div>
<select id="content-type-filter">
<option value="all">Все типы</option>
<option value="image">Изображения</option>
<option value="video">Видео</option>
<option value="audio">Аудио</option>
<option value="document">Документы</option>
</select>
</div>
</div>
<div className="content-body" id="content-container">
<div className="empty-state">
<div className="empty-state-icon">🗂</div>
<h4>Контент не найден</h4>
<p>Попробуйте изменить параметры поиска</p>
</div>
</div>
</div>
)
}
+78
View File
@@ -0,0 +1,78 @@
export default function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3>DMCA жалобы</h3>
<div className="content-header-actions">
<button className="btn btn-primary">
<span>🔗</span>
<span>Открыть полную панель DMCA</span>
</button>
</div>
</div>
<div className="content-body">
<div className="stats-grid">
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">Всего жалоб</span>
<div className="stat-card-icon blue">📤</div>
</div>
<div className="stat-card-value">3</div>
<div className="stat-card-label">Создано жалоб</div>
</div>
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">Ожидают</span>
<div className="stat-card-icon orange"></div>
</div>
<div className="stat-card-value">0</div>
<div className="stat-card-label">На рассмотрении</div>
</div>
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">Отправлено</span>
<div className="stat-card-icon cyan">📨</div>
</div>
<div className="stat-card-value">1</div>
<div className="stat-card-label">Отправлено платформам</div>
</div>
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">Успешно</span>
<div className="stat-card-icon green"></div>
</div>
<div className="stat-card-value">0</div>
<div className="stat-card-label">Успешно обработано</div>
</div>
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">Ошибки</span>
<div className="stat-card-icon red"></div>
</div>
<div className="stat-card-value">0</div>
<div className="stat-card-label">С ошибками</div>
</div>
</div>
<div>
<h4>Быстрые действия</h4>
<div>
<button className="btn btn-primary">
Все жалобы
</button>
<button className="btn btn-secondary">
Создать жалобу
</button>
<button className="btn btn-outline">
Ожидающие
</button>
</div>
</div>
</div>
</div>
)
}
@@ -0,0 +1,49 @@
export default function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3>Email уведомления</h3>
<div className="content-header-actions">
<button className="btn btn-primary">
<span>🔗</span>
<span>Открыть панель Email</span>
</button>
</div>
</div>
<div className="content-body">
<div className="content-body-section">
<h4>Еженедельные отчеты</h4>
<p>
Отправка еженедельных email-отчетов пользователям о мониторинге авторских прав
</p>
<div className="flex gap-4">
<button className="btn btn-primary">
Управление отчетами
</button>
<button className="btn btn-secondary">
Предпросмотр
</button>
</div>
</div>
<div className="content-body-section">
<h4>Массовая рассылка</h4>
<form>
<div className="form-group">
<label>Тема письма</label>
<input type="text" id="broadcast-subject" placeholder="Введите тему письма" />
</div>
<div className="form-group">
<label>Сообщение</label>
<textarea id="broadcast-message" placeholder="Введите текст сообщения"></textarea>
</div>
<button type="submit" className="btn btn-success">
<span>📧</span>
<span>Отправить всем пользователям</span>
</button>
</form>
</div>
</div>
</div>
)
}
+1 -1
View File
@@ -6,7 +6,7 @@ import { getQueryClient } from '@/app/providers/getQueryClient';
import { HydrationBoundary, dehydrate } from '@tanstack/react-query';
import { prefetchLayoutQueries } from '@/app/lib/prefetch-queries';
import { routing } from '@/i18n/routing';
import AdminNavLinks from '@/app/ui/admin-nav-links'
import AdminNavLinks from '@/app/ui/navigation/admin-nav-links'
import AdminHeaderPanel from '@/app/ui/admin-header-panel';
import "../styles/globals.css";
+7 -2
View File
@@ -1,7 +1,12 @@
import SubscriptionTable from '@/app/ui/subscriptions/subscriptions-table';
export default function Page() {
return (
<div>
subscriptions-page
<div className="admin-content">
<div className="content-header">
<h3>Управление подписками</h3>
</div>
<SubscriptionTable />
</div>
)
}
+11
View File
@@ -0,0 +1,11 @@
import SystemLogsTable from '@/app/ui/system-logs/system-logs-table';
export default function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3>Системные логи</h3>
</div>
<SystemLogsTable />
</div>
)
}
+88
View File
@@ -0,0 +1,88 @@
export default function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3> Системные настройки</h3>
</div>
<div className="content-body">
<div className="stats-grid">
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">База данных</span>
<div className="stat-card-icon blue">💾</div>
</div>
<div className="stat-card-value" id="db-size">12.55</div>
<div className="stat-card-label">Размер БД (MB)</div>
<div className="stat-card-footer">
<button className="btn btn-outline btn-sm">
Оптимизировать
</button>
</div>
</div>
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">PHP Version</span>
<div className="stat-card-icon green">🐘</div>
</div>
<div className="stat-card-value" id="php-version">8.2.29</div>
<div className="stat-card-label">Версия PHP</div>
</div>
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">MySQL Version</span>
<div className="stat-card-icon orange">🐬</div>
</div>
<div className="stat-card-value" id="mysql-version">5.7.44-48</div>
<div className="stat-card-label">Версия MySQL</div>
</div>
<div className="stat-card">
<div className="stat-card-header">
<span className="stat-card-title">Свободное место</span>
<div className="stat-card-icon purple">💿</div>
</div>
<div className="stat-card-value" id="disk-free">767.02</div>
<div className="stat-card-label">GB доступно</div>
</div>
</div>
<div className="system-grid-wrapper">
<div className="content-body-section">
<h4>Обслуживание системы</h4>
<div className="system-action-list">
<button className="btn btn-primary">
<span>Проверка здоровья системы</span>
</button>
<button className="btn btn-secondary">
<span>Оптимизация БД</span>
</button>
<button className="btn btn-success">
<span>Создать резервную копию</span>
</button>
<button className="btn btn-warning">
<span>Очистка системы</span>
</button>
</div>
</div>
<div className="content-body-section">
<h4>Обновления и мониторинг</h4>
<div className="system-action-list">
<button className="btn btn-primary">
<span>Проверить обновления</span>
</button>
<button className="btn btn-primary">
<span>Обновить статистику</span>
</button>
<button className="btn btn-primary">
<span>Экспорт всех данных</span>
</button>
</div>
</div>
</div>
</div>
</div>
)
}
+1 -1
View File
@@ -2,7 +2,7 @@ export default function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3>📋 Управление тарифными планами</h3>
<h3>Управление тарифными планами</h3>
<div className="content-header-actions">
<button className="btn btn-primary">
<span></span>
+4 -2
View File
@@ -1,8 +1,10 @@
import { UsersTable } from '@/app/ui/users/users-table';
export default async function Page() {
return (
<div>
users-page
<div className="admin-content">
<div className="content-header">
<h3>Управление пользователями</h3>
</div>
<UsersTable />
</div>
)
+12
View File
@@ -0,0 +1,12 @@
import ViolationsTable from '@/app/ui/violations/violations-table';
export default async function Page() {
return (
<div className="admin-content">
<div className="content-header">
<h3>Управление нарушениями</h3>
</div>
<ViolationsTable />
</div>
)
}