feat: inline rename for profiles, dashboard stats grid UI
This commit is contained in:
@@ -2,20 +2,34 @@
|
||||
{% block title %}Dashboard - Postcard Manager{% endblock %}
|
||||
{% block content %}
|
||||
<h1>👋 欢迎,{{ user.username }}</h1>
|
||||
|
||||
<section class="section">
|
||||
<div class="section-header">
|
||||
<h2>Profiles</h2>
|
||||
<h2>我的 Profiles</h2>
|
||||
<a href="/profiles" class="btn btn-sm">管理 Profiles</a>
|
||||
</div>
|
||||
{% if profiles %}
|
||||
<div class="card-grid">
|
||||
{% for p in profiles %}
|
||||
<a href="/profiles/{{ p.id }}/postcards" class="card">
|
||||
<a href="/profiles/{{ p.id }}/postcards" class="card dashboard-card">
|
||||
<h3>{{ p.nickname }}</h3>
|
||||
<div class="stats">
|
||||
<span class="stat">📬 {{ stats[p.id].total }}</span>
|
||||
<span class="stat sent">寄出 {{ stats[p.id].sent }}</span>
|
||||
<span class="stat delivered">送达 {{ stats[p.id].delivered }}</span>
|
||||
<span class="stat received">收到 {{ stats[p.id].received }}</span>
|
||||
<div class="stats-grid">
|
||||
<div class="stat-item">
|
||||
<span class="stat-num">{{ stats[p.id].total }}</span>
|
||||
<span class="stat-label">总计</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-num stat-sent">{{ stats[p.id].sent }}</span>
|
||||
<span class="stat-label">寄出</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-num stat-delivered">{{ stats[p.id].delivered }}</span>
|
||||
<span class="stat-label">送达</span>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
<span class="stat-num stat-received">{{ stats[p.id].received }}</span>
|
||||
<span class="stat-label">收到</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
|
||||
@@ -16,13 +16,18 @@
|
||||
<tbody>
|
||||
{% for p in profiles %}
|
||||
<tr>
|
||||
<td><a href="/profiles/{{ p.id }}/postcards">{{ p.nickname }}</a></td>
|
||||
<td>
|
||||
<span class="nickname-display" id="name-display-{{ p.id }}">{{ p.nickname }}</span>
|
||||
<form method="post" action="/profiles/{{ p.id }}/rename" class="inline nickname-edit" id="name-edit-{{ p.id }}" style="display:none">
|
||||
<input type="text" name="nickname" value="{{ p.nickname }}" required>
|
||||
<button type="submit" class="btn btn-primary btn-sm">确定</button>
|
||||
<button type="button" class="btn btn-sm" onclick="cancelRename({{ p.id }})">取消</button>
|
||||
</form>
|
||||
</td>
|
||||
<td>{{ p.created_at.strftime('%Y-%m-%d %H:%M') }}</td>
|
||||
<td>
|
||||
<form method="post" action="/profiles/{{ p.id }}/rename" class="inline rename-form">
|
||||
<input type="text" name="nickname" value="{{ p.nickname }}" required>
|
||||
<button type="submit" class="btn btn-sm">改名</button>
|
||||
</form>
|
||||
<a href="/profiles/{{ p.id }}/postcards" class="btn btn-sm">查看</a>
|
||||
<button type="button" class="btn btn-sm" onclick="startRename({{ p.id }})">改名</button>
|
||||
<form method="post" action="/profiles/{{ p.id }}/delete" class="inline">
|
||||
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('确定删除该 Profile 及其所有明信片?')">删除</button>
|
||||
</form>
|
||||
@@ -34,4 +39,16 @@
|
||||
{% else %}
|
||||
<p class="empty">还没有 Profile。</p>
|
||||
{% endif %}
|
||||
<script>
|
||||
function startRename(id) {
|
||||
document.getElementById('name-display-' + id).style.display = 'none';
|
||||
var edit = document.getElementById('name-edit-' + id);
|
||||
edit.style.display = 'inline-flex';
|
||||
edit.querySelector('input').focus();
|
||||
}
|
||||
function cancelRename(id) {
|
||||
document.getElementById('name-display-' + id).style.display = '';
|
||||
document.getElementById('name-edit-' + id).style.display = 'none';
|
||||
}
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user