feat: AdminQueue — generation queue UI

AdminQueue.js: статистика по статусам + список 30 последних задач
  4 счётчика (done/processing/pending/failed) с цветами
  Алерт для застрявших задач + кнопка Сбросить
  Фильтр по статусу, retry для failed задач
  Детали: тип, тема, ошибка, токены, время
AdminPanel: раздел Очередь между Движком и Тарифами
API routes: /api/admin/queue (GET+DELETE), /api/admin/queue/[id]/retry
This commit is contained in:
Ник (Claude)
2026-06-13 10:14:10 +03:00
parent b620927c25
commit 92872ed59c
4 changed files with 222 additions and 2 deletions
+5 -2
View File
@@ -3,8 +3,9 @@ import { useState } from 'react';
import { Settings2, CreditCard, TrendingUp, Users, ChevronRight, Loader2, Eye, EyeOff, Save, RefreshCw, Check, AlertCircle, BarChart3, ArrowLeft, Zap, Tag } from 'lucide-react';
import Link from 'next/link';
import AdminBilling from './admin/AdminBilling';
import AdminUsers from './admin/AdminUsers';
import AdminPromos from './admin/AdminPromos';
import AdminUsers from './admin/AdminUsers';
import AdminPromos from './admin/AdminPromos';
import AdminQueue from './admin/AdminQueue';
// ──────────────────────────────────────────────────────────────
// Sidebar navigation
@@ -15,6 +16,7 @@ const SECTIONS = [
{ id: 'engine', label: 'Движок', icon: Zap, desc: 'URL, Telegram, авто-черновики' },
{ id: 'payments', label: 'ЮKassa', icon: CreditCard, desc: 'Ключи для приёма оплат' },
{ id: 'spending', label: 'Расходы AI', icon: TrendingUp, desc: 'aiprimetech + routerai' },
{ id: 'queue', label: 'Очередь', icon: Zap, desc: 'Задачи генерации, ошибки' },
{ id: 'plans', label: 'Тарифы', icon: BarChart3, desc: 'Планы, кредиты, операции' },
{ id: 'promos', label: 'Промокоды', icon: Tag, desc: 'Коды для кредитов и скидок' },
{ id: 'billing', label: 'Пользователи', icon: Users, desc: 'Балансы и кредиты' },
@@ -65,6 +67,7 @@ export default function AdminPanel({ initialSection = 'settings' }) {
{section === 'engine' && <SettingsSection categories={['engine']} />}
{section === 'payments' && <SettingsSection categories={['payments']} />}
{section === 'spending' && <SpendingSection />}
{section === 'queue' && <AdminQueue />}
{section === 'plans' && <PlansSection />}
{section === 'promos' && <AdminPromos />}
{section === 'billing' && <AdminUsers />}