// AdminDashboard — at-a-glance numbers, nav shortcuts. const { useState: useAdmDState, useEffect: useAdmDEffect } = React; function AdminDashboard({ onNavigate }) { const [stats, setStats] = useAdmDState(null); const [error, setError] = useAdmDState(''); useAdmDEffect(() => { api.get('/api/admin/stats') .then(data => { if (!data.__unauthorized) setStats(data); }) .catch(e => setError(e.message || 'Ошибка загрузки статистики')); }, []); const cards = stats ? [ { label: 'Всего пользователей', value: stats.users_total, cta: 'admin-users', ctaLabel: 'Открыть' }, { label: 'Регистраций сегодня', value: stats.users_registered_today, cta: 'admin-users', ctaLabel: 'Юзеры' }, { label: 'Заказов сегодня', value: stats.orders_today, cta: 'admin-orders', ctaLabel: 'Заказы' }, { label: 'Выручка сегодня', value: `${stats.revenue_today.toLocaleString('ru-RU')} ₽`, cta: 'admin-orders', ctaLabel: 'Заказы' }, { label: 'Открытых обращений', value: stats.open_support_threads, cta: 'admin-support', ctaLabel: 'Ответить' }, ] : []; return (

Админ-дашборд

Быстрые цифры за сегодня. Кликни карточку, чтобы перейти к разделу.

{error &&
{error}
} {!stats && !error &&
Загрузка...
}
{cards.map((c, i) => (
onNavigate(c.cta)} style={{ padding: '20px 22px', cursor: 'pointer' }} >
{c.label}
{c.value}
{c.ctaLabel} →
))}
); } Object.assign(window, { AdminDashboard });