147 lines
5.0 KiB
HTML
147 lines
5.0 KiB
HTML
{% extends "admin/base_site.html" %}
|
|
{% load i18n %}
|
|
|
|
{% block bodyclass %}{{ block.super }} dashboard hulu-dashboard{% endblock %}
|
|
{% block breadcrumbs %}{% endblock %}
|
|
{% block content_title %}{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="hulu-dashboard-head">
|
|
<div>
|
|
<span class="hulu-eyebrow">OPERATIONS OVERVIEW</span>
|
|
<h1>今天从哪里开始?</h1>
|
|
<p>管理用户、人生内容、比赛和视频,关键异常会集中显示在这里。</p>
|
|
</div>
|
|
<div class="hulu-head-actions">
|
|
<a class="hulu-button primary" href="{% url 'admin:content_contentitem_add' %}">发布内容</a>
|
|
<a class="hulu-button" href="{% url 'admin:accounts_invitecode_add' %}">生成邀请码</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="hulu-metric-grid">
|
|
{% for metric in dashboard_metrics %}
|
|
<article class="hulu-metric {{ metric.tone }}">
|
|
<span>{{ metric.label }}</span>
|
|
<strong>{{ metric.value }}</strong>
|
|
<small>{{ metric.hint }}</small>
|
|
</article>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
<div class="hulu-dashboard-layout">
|
|
<main class="hulu-modules">
|
|
<div class="hulu-section-title">
|
|
<div>
|
|
<span class="hulu-eyebrow">BUSINESS MODULES</span>
|
|
<h2>业务模块</h2>
|
|
</div>
|
|
<span>按日常运营顺序排列</span>
|
|
</div>
|
|
|
|
{% if app_list %}
|
|
<div class="hulu-app-grid">
|
|
{% for app in app_list %}
|
|
<section class="hulu-app-card module-{{ app.app_label }}">
|
|
<header>
|
|
<div class="hulu-app-icon">{{ app.name|slice:":1" }}</div>
|
|
<div>
|
|
<h3>
|
|
<a href="{{ app.app_url }}">{{ app.name }}</a>
|
|
</h3>
|
|
<span>{{ app.models|length }} 个管理入口</span>
|
|
</div>
|
|
</header>
|
|
<div class="hulu-model-list">
|
|
{% for model in app.models %}
|
|
<div class="hulu-model-row">
|
|
{% if model.admin_url %}
|
|
<a href="{{ model.admin_url }}">{{ model.name }}</a>
|
|
{% else %}
|
|
<span>{{ model.name }}</span>
|
|
{% endif %}
|
|
<div>
|
|
{% if model.add_url %}
|
|
<a class="hulu-add-link" href="{{ model.add_url }}">新增</a>
|
|
{% endif %}
|
|
{% if model.admin_url %}
|
|
<a class="hulu-view-link" href="{{ model.admin_url }}">管理</a>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="hulu-empty">当前账号没有后台管理权限。</div>
|
|
{% endif %}
|
|
</main>
|
|
|
|
<aside class="hulu-dashboard-side">
|
|
<section class="hulu-side-card hulu-todos">
|
|
<div class="hulu-section-title compact">
|
|
<div>
|
|
<span class="hulu-eyebrow">ATTENTION</span>
|
|
<h2>待处理</h2>
|
|
</div>
|
|
</div>
|
|
{% for alert in dashboard_alerts %}
|
|
<a class="hulu-alert-row" href="{{ alert.url }}">
|
|
<span>{{ alert.label }}</span>
|
|
<strong>{{ alert.value }}</strong>
|
|
</a>
|
|
{% endfor %}
|
|
</section>
|
|
|
|
<section class="hulu-side-card">
|
|
<div class="hulu-section-title compact">
|
|
<div>
|
|
<span class="hulu-eyebrow">QUICK LINKS</span>
|
|
<h2>常用操作</h2>
|
|
</div>
|
|
</div>
|
|
<div class="hulu-quick-links">
|
|
<a href="{% url 'admin:math_life_story_add' %}">创建数学人生</a>
|
|
<a href="{% url 'admin:contest_contest_add' %}">创建比赛</a>
|
|
<a href="{% url 'admin:contest_question_add' %}">录入题目</a>
|
|
<a href="{% url 'admin:latex_lab_latexcourse_add' %}">创建 LaTeX 课程</a>
|
|
<a href="{% url 'admin:accounts_user_changelist' %}">查询用户</a>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="hulu-side-card">
|
|
<div class="hulu-section-title compact">
|
|
<div>
|
|
<span class="hulu-eyebrow">RECENT ACTIVITY</span>
|
|
<h2>最近操作</h2>
|
|
</div>
|
|
</div>
|
|
{% load log %}
|
|
{% get_admin_log 6 as admin_log for_user user %}
|
|
{% if admin_log %}
|
|
<div class="hulu-recent-list">
|
|
{% for entry in admin_log %}
|
|
<div class="hulu-recent-row">
|
|
<span class="hulu-action-dot {% if entry.is_addition %}add{% elif entry.is_change %}change{% else %}delete{% endif %}"></span>
|
|
<div>
|
|
{% if entry.is_deletion or not entry.get_admin_url %}
|
|
<strong>{{ entry.object_repr }}</strong>
|
|
{% else %}
|
|
<a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
|
|
{% endif %}
|
|
<small>{{ entry.content_type }} · {{ entry.action_time|timesince }}前</small>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<p class="hulu-muted">还没有后台操作记录。</p>
|
|
{% endif %}
|
|
</section>
|
|
</aside>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block sidebar %}{% endblock %}
|