Files

55 lines
2.8 KiB
HTML

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Дашборд &middot; {%title%}</title>
<link rel="stylesheet" href="/web/css/admin.css">
</head>
<body>
<div class="admin-bg"></div>
<div class="admin-wrap">
<header class="admin-header">
<div class="header-left">
<h1>&#128202; Дашборд</h1>
</div>
<div class="header-right">
<a href="/admin/users" class="nav-link">&#128101; Пользователи</a>
</div>
</header>
<div class="stat-grid">
<div class="stat-card"><div class="stat-lbl">Всего</div><div class="stat-val" style="color:var(--accent)">{%total_users%}</div></div>
<div class="stat-card"><div class="stat-lbl">Free</div><div class="stat-val" style="color:var(--green)">{%free_users%}</div></div>
<div class="stat-card"><div class="stat-lbl">Test</div><div class="stat-val" style="color:var(--amber)">{%test_users%}</div></div>
<div class="stat-card"><div class="stat-lbl">Premium</div><div class="stat-val" style="color:var(--green)">{%paid_users%}</div></div>
<div class="stat-card"><div class="stat-lbl">Онлайн</div><div class="stat-val" style="color:var(--accent)">{%online_count%}</div><div class="stat-sub">на всех серверах</div></div>
<div class="stat-card"><div class="stat-lbl">Выручка</div><div class="stat-val" style="color:var(--green)">{%total_revenue%}&#8381;</div><div class="stat-sub">всего оплат</div></div>
<div class="stat-card"><div class="stat-lbl">Серверов</div><div class="stat-val" style="color:var(--amber)">{%server_count%}</div></div>
<div class="stat-card"><div class="stat-lbl">Инбаундов</div><div class="stat-val" style="color:var(--rose)">{%inbound_count%}</div></div>
</div>
<div class="srv-section">
<h2>&#128421; Серверы</h2>
{%servers_rows%}
</div>
</div>
<script>
function syncServer(name) {
if (!confirm('Синхронизировать пользователей на ' + name + '?\nБудут добавлены только те, кто есть на большинстве других серверов.')) return;
var btn = event.target;
var orig = btn.textContent;
btn.disabled = true;
btn.textContent = '...';
fetch('/admin/api/propagate/' + encodeURIComponent(name), {method:'POST'})
.then(function(r) { return r.json(); })
.then(function(d) {
var msg = 'Сервер: ' + d.server + '\n Всего: ' + d.total + '\nУже были: ' + d.already_on_server + '\nДобавлено: ' + d.added + '\nПропущено (мало серверов): ' + d.skipped + '\nОшибок: ' + d.failed;
alert(msg);
location.reload();
})['catch'](function(e) { alert('Ошибка: ' + e); })
['finally'](function() { btn.disabled = false; btn.textContent = orig; });
}
</script>
</body>
</html>