117 lines
4.8 KiB
HTML
117 lines
4.8 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}管理仪表板 - ap_ds{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="repo-container">
|
|
<div class="repo-flex repo-justify-between repo-items-center repo-mb-6">
|
|
<h1 class="repo-text-2xl repo-font-bold">管理仪表板</h1>
|
|
<a href="{{ url_for('admin_logout') }}" class="repo-btn repo-btn--danger">登出</a>
|
|
</div>
|
|
|
|
<!-- 统计卡片 -->
|
|
<div class="repo-row repo-mb-6">
|
|
<div class="repo-col">
|
|
<div class="repo-card">
|
|
<div class="repo-card__body repo-text-center">
|
|
<div class="repo-text-3xl repo-font-bold" style="color: var(--repo-color-primary);">{{ stats.branches }}</div>
|
|
<div class="repo-text-secondary">分支</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="repo-col">
|
|
<div class="repo-card">
|
|
<div class="repo-card__body repo-text-center">
|
|
<div class="repo-text-3xl repo-font-bold" style="color: var(--repo-color-success);">{{ stats.versions }}</div>
|
|
<div class="repo-text-secondary">版本</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="repo-col">
|
|
<div class="repo-card">
|
|
<div class="repo-card__body repo-text-center">
|
|
<div class="repo-text-3xl repo-font-bold" style="color: var(--repo-color-warning);">{{ stats.feedbacks }}</div>
|
|
<div class="repo-text-secondary">反馈总数</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="repo-col">
|
|
<div class="repo-card">
|
|
<div class="repo-card__body repo-text-center">
|
|
<div class="repo-text-3xl repo-font-bold" style="color: var(--repo-color-danger);">{{ stats.unread_feedbacks }}</div>
|
|
<div class="repo-text-secondary">未读反馈</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 快速操作 -->
|
|
<div class="repo-row">
|
|
<div class="repo-col">
|
|
<div class="repo-card">
|
|
<div class="repo-card__header">
|
|
<h3 class="repo-card__title">上传 WHL 文件</h3>
|
|
</div>
|
|
<div class="repo-card__body">
|
|
<form method="post" action="{{ url_for('admin_whl_upload') }}" enctype="multipart/form-data">
|
|
<input type="file" name="whl_file" accept=".whl" class="repo-input repo-mb-3" required>
|
|
<button type="submit" class="repo-btn repo-btn--primary">上传</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="repo-col">
|
|
<div class="repo-card">
|
|
<div class="repo-card__header">
|
|
<h3 class="repo-card__title">管理链接</h3>
|
|
</div>
|
|
<div class="repo-card__body">
|
|
<div class="repo-flex repo-gap-3">
|
|
<a href="{{ url_for('admin_branches') }}" class="repo-btn repo-btn--primary">分支管理</a>
|
|
<a href="{{ url_for('admin_feedbacks') }}" class="repo-btn repo-btn--secondary">反馈管理</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 最近反馈 -->
|
|
<div class="repo-card repo-mt-6">
|
|
<div class="repo-card__header">
|
|
<h3 class="repo-card__title">最近反馈</h3>
|
|
</div>
|
|
<div class="repo-card__body">
|
|
{% if recent_feedbacks %}
|
|
<table class="repo-table">
|
|
<thead>
|
|
<tr>
|
|
<th>时间</th>
|
|
<th>邮箱</th>
|
|
<th>内容</th>
|
|
<th>状态</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for f in recent_feedbacks %}
|
|
<tr>
|
|
<td class="repo-text-sm">{{ f.created }}</td>
|
|
<td class="repo-text-sm">{{ f.email }}</td>
|
|
<td class="repo-text-sm repo-truncate" style="max-width: 300px;">{{ f.content[:50] }}...</td>
|
|
<td>
|
|
{% if f.status == 'unread' %}
|
|
<span class="repo-tag repo-tag--danger">未读</span>
|
|
{% else %}
|
|
<span class="repo-tag repo-tag--default">已读</span>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% else %}
|
|
<p class="repo-text-secondary repo-text-center">暂无反馈</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %} |