feat(ui): 提升界面响应式支持和移动端适配体验

- 新增移动端全屏对话框支持及标签宽度和位置动态调整,优化新增班级、年级和学生弹窗布局
- 所有对话框增加屏幕宽度监听,实现自动切换移动端和桌面端样式
- 表格组件增加移动端列表视图,隐藏侧边栏并改进分页和按钮自适应,提升小屏幕浏览体验
- Dialog及详情弹窗添加最大高度限制并启用滚动,防止移动端显示区域拥挤
- 登录页增加安全区域内边距,保证iOS等设备显示完整性
- 新增移动端菜单抽屉组件,支持手机端侧边栏交互显示
- 学生详情页调整词汇热力图列数,实现移动端更合理布局
- 表格和按钮统一增设触控友好大尺寸区域,提升移动端操作便利性
- 修正后端空词汇ID查询问题,避免空列表导致查询异常
- 统一隐藏小屏幕时的固定侧边栏,避免界面混乱和重复显示
- 搜索页和上传页表格添加移动端适配样式和展开收起逻辑,提升列表浏览灵活性
This commit is contained in:
lbw
2026-01-05 18:47:33 +08:00
parent 7182371c92
commit fb29acc145
15 changed files with 406 additions and 141 deletions

View File

@@ -6,7 +6,7 @@
</el-header>
<el-container class="pt-4">
<el-aside width="200px" class="">
<el-aside width="200px" class="hidden md:block sidebar-fixed">
<Sidebar />
</el-aside>
<el-main class="">
@@ -14,11 +14,12 @@
<div class="panel-shell p-6">
<div class="text-lg font-semibold mb-4">上传图片</div>
<el-upload :show-file-list="false" :http-request="doUpload" accept="image/*">
<el-button type="primary">选择图片并上传</el-button>
<el-button type="primary" class="w-full sm:w-auto touch-target">选择图片并上传</el-button>
</el-upload>
</div>
<div class="panel-shell p-6">
<div class="text-lg font-semibold mb-4">结果集</div>
<div class="hidden sm:block">
<el-form :inline="true" class="mb-4">
<el-form-item label="班级">
<el-select v-model="classId" placeholder="选择班级" clearable filterable
@@ -43,26 +44,53 @@
<el-button @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
<el-table :data="list" border class="w-full" v-loading="loading"
@row-click="handleRowClick">
<el-table-column prop="studentName" label="学生姓名" min-width="70" />
<el-table-column prop="examWordsTitle" label="试题名称" min-width="100" />
<el-table-column prop="correctWordCount" label="正确词数" width="110" />
<el-table-column prop="wrongWordCount" label="错误词数" width="110" />
<el-table-column label="完成状态" width="110">
<template #default="{ row }">
</div>
<div class="hidden sm:block overflow-x-auto">
<el-table :data="list" border class="min-w-[800px]" v-loading="loading"
@row-click="handleRowClick">
<el-table-column prop="studentName" label="学生姓名" min-width="120" />
<el-table-column prop="examWordsTitle" label="试题名称" min-width="160" />
<el-table-column prop="correctWordCount" label="正确词数" width="120" />
<el-table-column prop="wrongWordCount" label="错误词数" width="120" />
<el-table-column label="完成状态" width="120">
<template #default="{ row }">
<el-tag :type="row.isFinished === 1 ? 'success' : 'info'">
{{ row.isFinished === 1 ? '已完成' : '未完成' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="startDate" label="开始时间" min-width="160">
<template #default="{ row }">
{{ row.startDate.replace('T', ' ') }}
</template>
</el-table-column>
<el-table-column prop="msg" label="判卷结算" min-width="180" />
</el-table>
</div>
<div class="sm:hidden space-y-3">
<div class="mb-3 grid grid-cols-1 gap-3">
<el-select v-model="classId" placeholder="选择班级" clearable filterable @change="onClassChange" />
<el-select v-model="gradeId" placeholder="选择年级" clearable filterable />
<el-input v-model="studentName" placeholder="学生姓名" clearable />
<div class="flex gap-2">
<el-button type="primary" class="flex-1" @click="handleSearch">查询</el-button>
<el-button class="flex-1" @click="handleReset">重置</el-button>
</div>
</div>
<div v-for="row in list" :key="row.id" class="panel-shell p-4">
<div class="text-base font-semibold mb-1">{{ row.studentName }}</div>
<div class="text-sm mb-1">试题{{ row.examWordsTitle }}</div>
<div class="text-sm mb-1">正确{{ row.correctWordCount }}错误{{ row.wrongWordCount }}</div>
<div class="text-sm mb-1">开始{{ row.startDate.replace('T', ' ') }}</div>
<div class="text-sm mb-2">结算{{ row.msg }}</div>
<div class="flex items-center justify-between">
<el-tag :type="row.isFinished === 1 ? 'success' : 'info'">
{{ row.isFinished === 1 ? '已完成' : '未完成' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="startDate" label="开始时间" min-width="160">
<template #default="{ row }">
{{ row.startDate.replace('T', ' ') }}
</template>
</el-table-column>
<el-table-column prop="msg" label="判卷结算" min-width="160" />
</el-table>
<el-button size="small" type="primary" @click="handleRowClick(row)">查看详情</el-button>
</div>
</div>
</div>
<div class="mt-4 flex justify-end">
<el-pagination background layout="prev, pager, next, sizes, total" :total="totalCount"
:page-size="pageSize" :current-page="pageNo" @current-change="handlePageChange"