feat: add server-side admin user pagination and align traffic report accounting
This commit is contained in:
@@ -2698,6 +2698,9 @@
|
||||
<span>按天用量明细(最近 {{ downloadTrafficReport.days }} 天)</span>
|
||||
<span v-if="downloadTrafficReport.summary?.peak_day">峰值: {{ formatReportDateLabel(downloadTrafficReport.summary.peak_day.date) }} / {{ formatBytes(downloadTrafficReport.summary.peak_day.bytes_used || 0) }}</span>
|
||||
</div>
|
||||
<div style="padding: 8px 12px; border-bottom: 1px solid var(--glass-border); font-size: 12px; color: var(--text-muted);">
|
||||
说明:预览/在线播放同样计入下载流量;OSS 明细来自访问日志,通常有 5-15 分钟延迟。
|
||||
</div>
|
||||
|
||||
<div v-if="downloadTrafficReport.loading && downloadTrafficDailyRowsDesc.length === 0" style="padding: 16px; text-align: center; color: var(--text-muted);">
|
||||
<i class="fas fa-spinner fa-spin"></i> 报表加载中...
|
||||
@@ -3522,11 +3525,11 @@
|
||||
<div class="admin-users-toolbar">
|
||||
<div class="admin-users-filter admin-users-filter-search">
|
||||
<label>搜索</label>
|
||||
<input type="text" v-model.trim="adminUserFilters.keyword" @input="adminUsersPage = 1" placeholder="ID / 用户名 / 邮箱">
|
||||
<input type="text" v-model.trim="adminUserFilters.keyword" @input="triggerAdminUsersKeywordSearch" placeholder="ID / 用户名 / 邮箱">
|
||||
</div>
|
||||
<div class="admin-users-filter">
|
||||
<label>角色</label>
|
||||
<select v-model="adminUserFilters.role" @change="adminUsersPage = 1">
|
||||
<select v-model="adminUserFilters.role" @change="handleAdminUsersFilterChange">
|
||||
<option value="all">全部</option>
|
||||
<option value="admin">管理员</option>
|
||||
<option value="user">普通用户</option>
|
||||
@@ -3534,7 +3537,7 @@
|
||||
</div>
|
||||
<div class="admin-users-filter">
|
||||
<label>状态</label>
|
||||
<select v-model="adminUserFilters.status" @change="adminUsersPage = 1">
|
||||
<select v-model="adminUserFilters.status" @change="handleAdminUsersFilterChange">
|
||||
<option value="all">全部</option>
|
||||
<option value="active">正常</option>
|
||||
<option value="banned">已封禁</option>
|
||||
@@ -3544,7 +3547,7 @@
|
||||
</div>
|
||||
<div class="admin-users-filter">
|
||||
<label>存储</label>
|
||||
<select v-model="adminUserFilters.storage" @change="adminUsersPage = 1">
|
||||
<select v-model="adminUserFilters.storage" @change="handleAdminUsersFilterChange">
|
||||
<option value="all">全部</option>
|
||||
<option value="local">当前本地</option>
|
||||
<option value="oss">当前OSS</option>
|
||||
@@ -3555,7 +3558,7 @@
|
||||
</div>
|
||||
<div class="admin-users-filter">
|
||||
<label>排序</label>
|
||||
<select v-model="adminUserFilters.sort" @change="adminUsersPage = 1">
|
||||
<select v-model="adminUserFilters.sort" @change="handleAdminUsersFilterChange">
|
||||
<option value="created_desc">注册时间(新到旧)</option>
|
||||
<option value="created_asc">注册时间(旧到新)</option>
|
||||
<option value="username_asc">用户名(A-Z)</option>
|
||||
@@ -3566,7 +3569,7 @@
|
||||
</div>
|
||||
<div class="admin-users-filter admin-users-filter-page-size">
|
||||
<label>每页</label>
|
||||
<select v-model.number="adminUsersPageSize" @change="adminUsersPage = 1">
|
||||
<select v-model.number="adminUsersPageSize" @change="handleAdminUsersPageSizeChange">
|
||||
<option :value="20">20</option>
|
||||
<option :value="50">50</option>
|
||||
<option :value="100">100</option>
|
||||
@@ -3580,7 +3583,7 @@
|
||||
</div>
|
||||
|
||||
<div class="admin-users-stats">
|
||||
<span class="admin-users-stat-chip">总用户 {{ adminUsers.length }}</span>
|
||||
<span class="admin-users-stat-chip">总用户 {{ adminUsersGlobalCount }}</span>
|
||||
<span class="admin-users-stat-chip">筛选后 {{ adminUsersFilteredCount }}</span>
|
||||
<span class="admin-users-stat-chip">正常 {{ adminUserStats.active }}</span>
|
||||
<span class="admin-users-stat-chip">封禁 {{ adminUserStats.banned }}</span>
|
||||
@@ -3611,7 +3614,7 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="u in adminUsersPaged" :key="u.id" style="border-bottom: 1px solid #eee;">
|
||||
<tr v-for="u in adminUsers" :key="u.id" style="border-bottom: 1px solid #eee;">
|
||||
<td style="padding: 10px;">{{ u.id }}</td>
|
||||
<td style="padding: 10px; overflow: hidden;">
|
||||
<div style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;" :title="u.username" v-html="getHighlightedText(u.username, adminUserFilters.keyword)"></div>
|
||||
@@ -3703,7 +3706,7 @@
|
||||
|
||||
<div class="admin-users-pagination" v-if="adminUsersFilteredCount > 0">
|
||||
<div class="admin-users-pagination-info">
|
||||
显示 {{ adminUsersPageStart }}-{{ adminUsersPageEnd }} 条,共 {{ adminUsersFilteredCount }} 条(总 {{ adminUsers.length }} 条)
|
||||
显示 {{ adminUsersPageStart }}-{{ adminUsersPageEnd }} 条,共 {{ adminUsersFilteredCount }} 条(总 {{ adminUsersGlobalCount }} 条)
|
||||
</div>
|
||||
<div class="admin-users-pagination-actions">
|
||||
<button class="btn btn-secondary" @click="setAdminUsersPage(1)" :disabled="adminUsersCurrentPage <= 1">
|
||||
@@ -3724,7 +3727,7 @@
|
||||
|
||||
<div v-else class="admin-users-empty-state">
|
||||
<i class="fas fa-users-slash"></i>
|
||||
<span v-if="adminUsers.length > 0">没有符合当前筛选条件的用户</span>
|
||||
<span v-if="adminUsersGlobalCount > 0">没有符合当前筛选条件的用户</span>
|
||||
<span v-else>暂无用户数据</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user