/
SaiRaz
/
ReviewTasksBot
Обзор
Документация
Войти
/
SaiRaz
/
ReviewTasksBot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
static/mainadmin.html
100 строк
4 KB
Sa1Raz
Update mainadmin.html
03 дек 2025, 19:04
Не верифицирован
03 дек 2025, 19:04
622410f
Код
Авторство
О чём код?
<!-- static/admin.html --> <!doctype html> <html lang="ru"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1"/> <title>ReviewCash • Admin Panel</title> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;800;900&display=swap" rel="stylesheet"> <style> /* simplified styling based on your provided admin theme */ :root{--accent:#00e7c0;--accent2:#00d4ff;--bg:#020617;--card:#0f1e36;--muted:#94a3b8} body{font-family:Inter,system-ui;background:linear-gradient(135deg,var(--bg) 0%, #041028 100%);color:#e2f3ff;margin:0;padding:20px} .container{max-width:1200px;margin:0 auto} .header{display:flex;align-items:center;gap:12px;margin-bottom:20px} .logo{width:56px;height:56px;border-radius:12px;background:linear-gradient(90deg,var(--accent),var(--accent2));display:flex;align-items:center;justify-content:center;font-weight:900;color:#001} .card{background:rgba(15,30,54,0.95);padding:16px;border-radius:12px;border:1px solid rgba(148,163,184,0.08)} .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:12px} table{width:100%;border-collapse:collapse;color:inherit} th,td{padding:10px;border-bottom:1px solid rgba(255,255,255,0.04);text-align:left;font-size:13px} th{color:var(--accent);font-weight:800} button{padding:8px 10px;border-radius:8px;border:none;background:linear-gradient(90deg,var(--accent),var(--accent2));cursor:pointer;color:#001} </style> </head> <body> <div class="container"> <div class="header"> <div class="logo">RC</div> <div> <h1 style="margin:0">Admin Panel • ReviewCash</h1> <div style="color:var(--muted);font-size:13px">Управление системой</div> </div> <div style="margin-left:auto"> <button id="btnRefresh">Обновить</button> </div> </div> <div id="dashboard" class="card"> <div style="display:flex;gap:12px"> <div style="flex:1"> <div style="color:var(--muted)">Пользователей</div><div id="numUsers" style="font-weight:900;font-size:18px">—</div> </div> <div style="flex:1"> <div style="color:var(--muted)">Оборот</div><div id="totalRevenue" style="font-weight:900;font-size:18px">—</div> </div> <div style="flex:1"> <div style="color:var(--muted)">Заданий</div><div id="numTasks" style="font-weight:900;font-size:18px">—</div> </div> </div> </div> <div style="margin-top:16px" class="card"> <h3 style="margin:0 0 8px">Пользователи</h3> <div style="overflow:auto;max-height:320px"> <table id="usersTable"><thead><tr><th>ID</th><th>Имя</th><th>Username</th><th>Баланс</th></tr></thead><tbody></tbody></table> </div> </div> <div style="margin-top:12px" class="card"> <h3 style="margin:0 0 8px">Пополнения / Выводы (последние)</h3> <div id="recentActivity"></div> </div> </div> <script> const API = window.location.origin; async function loadDashboard(){ const r = await fetch('/api/admin/dashboard'); const j = await r.json(); if (j.ok){ document.getElementById('numUsers').textContent = j.data.usersCount; document.getElementById('totalRevenue').textContent = j.data.totalRevenue + ' ₽'; document.getElementById('numTasks').textContent = j.data.tasksCount; const recent = document.getElementById('recentActivity'); recent.innerHTML = ''; j.data.recentActivity.forEach(it=>{ const d = document.createElement('div'); d.style.padding='8px'; d.style.borderBottom='1px solid rgba(255,255,255,0.03)'; d.innerHTML = `<strong>${it.type}</strong> ${it.amount || ''} ₽ — ${it.user} • ${it.created_at || ''}`; recent.appendChild(d); }); } } async function loadUsers(){ const r = await fetch('/api/admin/users'); const j = await r.json(); const tbody = document.querySelector('#usersTable tbody'); tbody.innerHTML=''; if (j.ok && j.users){ j.users.forEach(u=>{ const tr = document.createElement('tr'); tr.innerHTML = `<td>${u.id}</td><td>${u.first_name||'—'}</td><td>${u.username||'—'}</td><td>${(u.balance||0)} ₽</td>`; tbody.appendChild(tr); }); } } document.getElementById('btnRefresh').addEventListener('click', ()=>{ loadDashboard(); loadUsers(); }); (async function init(){ await loadDashboard(); await loadUsers(); })(); </script> </body> </html>