feat: prioritize mobile workspace content
Some checks failed
Build and tests / test (push) Has been cancelled

This commit is contained in:
237899745
2026-08-03 23:07:07 +08:00
parent e809de892d
commit c92ad8b096
3 changed files with 949 additions and 20 deletions

View File

@@ -2515,7 +2515,7 @@
</div>
<!-- 设置视图 -->
<div v-if="isLoggedIn && currentView === 'settings'" class="main-container">
<div v-if="isLoggedIn && currentView === 'settings'" class="main-container settings-main-container">
<div class="card settings-page-card">
<div class="settings-page-head">
<h2 class="settings-page-title">
@@ -3125,7 +3125,7 @@
</div>
<!-- 分享视图 -->
<div v-if="isLoggedIn && currentView === 'shares'" class="main-container">
<div v-if="isLoggedIn && currentView === 'shares'" class="main-container shares-main-container">
<div class="card shares-page-card">
<header class="workspace-page-header shares-page-head">
<div class="workspace-page-heading">
@@ -3134,21 +3134,21 @@
<p>集中查看分享状态、访问数据和文件直链。</p>
</div>
<div class="shares-page-actions">
<button class="btn btn-secondary" @click="refreshShareResources">
<i class="fas fa-sync-alt"></i> 刷新
<button type="button" class="btn btn-secondary share-refresh-btn" @click="refreshShareResources" aria-label="刷新分享资源">
<i class="fas fa-sync-alt"></i><span class="share-action-label">刷新</span>
</button>
<button class="btn btn-primary" @click="switchView('files')">
<i class="fas fa-plus"></i> 创建分享
<button type="button" class="btn btn-primary share-create-btn" @click="switchView('files')">
<i class="fas fa-plus"></i><span class="share-action-label">创建分享</span>
</button>
</div>
</header>
<nav class="share-resource-tabs" aria-label="分享资源分类">
<button :class="{ active: shareResourceTab === 'shares' }" @click="shareResourceTab = 'shares'">
<button type="button" :class="{ active: shareResourceTab === 'shares' }" @click="shareResourceTab = 'shares'; showMobileShareFilters = false">
<i class="fas fa-share-alt"></i> 分享链接
<span>{{ shares.length }}</span>
</button>
<button :class="{ active: shareResourceTab === 'directLinks' }" @click="shareResourceTab = 'directLinks'">
<button type="button" :class="{ active: shareResourceTab === 'directLinks' }" @click="shareResourceTab = 'directLinks'; showMobileShareFilters = false">
<i class="fas fa-link"></i> 文件直链
<span>{{ directLinks.length }}</span>
</button>
@@ -3161,12 +3161,22 @@
<span><i class="fas fa-shield-alt"></i> 状态 <strong>运行正常</strong></span>
</div>
<div class="share-toolbar shares-toolbar">
<div class="share-toolbar shares-toolbar" :class="{ 'share-filters-open': showMobileShareFilters, 'share-toolbar-direct': shareResourceTab === 'directLinks' }">
<div class="share-search-field">
<i class="fas fa-search"></i>
<input type="text" v-model="shareFilters.keyword" :placeholder="shareResourceTab === 'shares' ? '搜索文件名、链接或分享码' : '搜索文件名或直链地址'">
</div>
<template v-if="shareResourceTab === 'shares'">
<button
v-if="shareResourceTab === 'shares'"
type="button"
class="mobile-share-filter-toggle"
:class="{ active: activeShareFilterCount > 0 }"
:aria-expanded="showMobileShareFilters"
@click="showMobileShareFilters = !showMobileShareFilters">
<i class="fas fa-sliders-h"></i><span>筛选</span>
<span v-if="activeShareFilterCount > 0" class="mobile-share-filter-count">{{ activeShareFilterCount }}</span>
</button>
<div v-if="shareResourceTab === 'shares'" class="share-filter-controls" :class="{ 'is-open': showMobileShareFilters }">
<select v-model="shareFilters.type" aria-label="分享类型">
<option value="all">全部类型</option>
<option value="file">文件</option>
@@ -3188,7 +3198,7 @@
<option value="downloads_desc">下载最多</option>
<option value="expire_asc">最早到期</option>
</select>
</template>
</div>
</div>
<div v-if="shareResourceTab === 'shares'" class="share-resource-panel">
@@ -3300,7 +3310,7 @@
</div>
<!-- 管理员视图 -->
<div v-if="isLoggedIn && currentView === 'admin' && user && user.is_admin" class="main-container">
<div v-if="isLoggedIn && currentView === 'admin' && user && user.is_admin" class="main-container admin-main-container">
<!-- 管理员标签页导航 -->
<div class="card admin-tabs-card" style="margin-bottom: 20px; padding: 0;">
<div class="admin-tabs-nav">
@@ -3320,9 +3330,9 @@
</div>
<!-- ========== 概览标签页 ========== -->
<div v-show="adminTab === 'overview'">
<div v-show="adminTab === 'overview'" class="admin-overview-page">
<!-- 调试模式开关 -->
<div class="card" style="margin-bottom: 30px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;">
<div class="card admin-debug-card" style="margin-bottom: 30px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;">
<div class="admin-debug-row" style="display: flex; align-items: center; justify-content: space-between;">
<div>
<h3 style="margin-bottom: 10px; color: white;">
@@ -3340,7 +3350,7 @@
</div>
<!-- 服务器存储统计 -->
<div class="card" style="margin-bottom: 30px;">
<div class="card admin-storage-card" style="margin-bottom: 30px;">
<h3 style="margin-bottom: 20px;">
<i class="fas fa-hdd"></i> 服务器存储统计
</h3>
@@ -4035,16 +4045,28 @@
</div><!-- 监控标签页结束 -->
<!-- ========== 用户标签页 ========== -->
<div v-show="adminTab === 'users'">
<div class="card">
<div v-show="adminTab === 'users'" class="admin-users-page">
<div class="card admin-users-card">
<div class="admin-users-header">
<h3 style="margin: 0;">用户管理</h3>
<button class="btn btn-secondary" @click="loadUsers" :disabled="adminUsersLoading" style="min-width: 92px;">
<i :class="adminUsersLoading ? 'fas fa-spinner fa-spin' : 'fas fa-rotate'"></i> 刷新
<button
type="button"
class="mobile-admin-users-filter-toggle"
:class="{ active: showMobileAdminUserFilters || activeAdminUserFilterCount > 0 }"
:aria-expanded="showMobileAdminUserFilters ? 'true' : 'false'"
@click="showMobileAdminUserFilters = !showMobileAdminUserFilters"
>
<i class="fas fa-sliders"></i>
<span>筛选</span>
<span v-if="activeAdminUserFilterCount" class="mobile-admin-users-filter-count">{{ activeAdminUserFilterCount }}</span>
</button>
<button type="button" class="btn btn-secondary admin-users-refresh-btn" @click="loadUsers" :disabled="adminUsersLoading" style="min-width: 92px;" aria-label="刷新用户列表">
<i :class="adminUsersLoading ? 'fas fa-spinner fa-spin' : 'fas fa-rotate'"></i>
<span>刷新</span>
</button>
</div>
<div class="admin-users-toolbar">
<div class="admin-users-toolbar" :class="{ 'is-open': showMobileAdminUserFilters }">
<div class="admin-users-filter admin-users-filter-search">
<label>搜索</label>
<input type="text" v-model.trim="adminUserFilters.keyword" @input="triggerAdminUsersKeywordSearch" placeholder="ID / 用户名 / 邮箱">