cam / app /templates /admin_dashboard.html
cacode's picture
Upload 67 files
4fb3744 verified
{% extends 'base.html' %}
{% block content %}
<section class="hero-card admin-hero">
<div>
<p class="eyebrow">Admin Overview</p>
<h2>{{ admin.display_name }},欢迎来到春日行动指挥台</h2>
<p class="lead">你可以在这里维护用户、分组、活动任务和图片审核流程。</p>
</div>
<div class="hero-badges">
<span class="pill">角色 {{ '超级管理员' if admin.role == 'superadmin' else '管理员' }}</span>
<span class="pill">待审核 {{ stats.pending_count }} 项</span>
<span class="pill">在线管理员 {{ stats.online_admin_count }}</span>
</div>
</section>
<section class="stats-grid">
<article class="glass-card stat-card">
<span>用户总数</span>
<strong>{{ stats.user_count }}</strong>
</article>
<article class="glass-card stat-card">
<span>小组数量</span>
<strong>{{ stats.group_count }}</strong>
</article>
<article class="glass-card stat-card">
<span>活动数量</span>
<strong>{{ stats.activity_count }}</strong>
</article>
<article class="glass-card stat-card">
<span>在线用户</span>
<strong>{{ stats.online_user_count }}</strong>
</article>
</section>
<section class="two-column-layout">
<article class="glass-card quick-panel">
<div class="section-head">
<div>
<p class="eyebrow">Quick Links</p>
<h3>常用入口</h3>
</div>
</div>
<div class="action-grid">
<a class="btn btn-secondary" href="/admin/users">录入用户</a>
<a class="btn btn-secondary" href="/admin/groups">管理小组</a>
<a class="btn btn-secondary" href="/admin/activities">发布活动</a>
<a class="btn btn-primary" href="/admin/reviews">进入审核中心</a>
</div>
</article>
<article class="glass-card quick-panel">
<div class="section-head">
<div>
<p class="eyebrow">Recent Activities</p>
<h3>最近创建的活动</h3>
</div>
</div>
<div class="stack-list">
{% for activity in recent_activities %}
<div class="stack-item">
<div>
<strong>{{ activity.title }}</strong>
<p class="muted">{{ activity.tasks|length }} 个任务 · {{ activity.start_at|datetime_local }}</p>
<p class="muted">{{ '用户端可见' if activity.is_visible else '用户端隐藏' }} · {{ '排行榜可见' if activity.leaderboard_visible else '排行榜隐藏' }}</p>
</div>
<span class="status-badge {% if activity.is_visible %}status-approved{% else %}status-rejected{% endif %}">{{ '活动可见' if activity.is_visible else '活动隐藏' }}</span>
</div>
{% else %}
<p class="muted">还没有发布活动。</p>
{% endfor %}
</div>
</article>
</section>
{% if online_overview %}
<section class="page-grid admin-page-grid">
<article class="glass-card table-panel">
<div class="section-head">
<div>
<p class="eyebrow">Presence</p>
<h3>管理员在线状态</h3>
</div>
</div>
<div class="stack-list">
{% for item in online_overview.admins %}
<div class="stack-item">
<strong>{{ item.name }}</strong>
<span class="status-badge {% if item.is_online %}status-approved{% else %}status-rejected{% endif %}">
{{ '在线' if item.is_online else '离线' }} · {{ item.last_seen_at }}
</span>
</div>
{% endfor %}
</div>
</article>
<article class="glass-card table-panel">
<div class="section-head">
<div>
<p class="eyebrow">Presence</p>
<h3>用户在线状态</h3>
</div>
</div>
<div class="stack-list">
{% for item in online_overview.users[:18] %}
<div class="stack-item">
<strong>{{ item.name }}</strong>
<span class="status-badge {% if item.is_online %}status-approved{% else %}status-rejected{% endif %}">
{{ '在线' if item.is_online else '离线' }} · {{ item.last_seen_at }}
</span>
</div>
{% else %}
<p class="muted">暂无用户。</p>
{% endfor %}
</div>
</article>
</section>
{% endif %}
{% endblock %}