feat: 文件夹双策略识别 + 布局选项 + 移除提交率卡片 + localStorage缓存层
- 文件夹识别:mode 含 'folder' 优先,缺省时用 parentId 引用反推; 即使卷王版本无 mode 字段也能正确分组,避免'直接没有文件夹选项' - 布局选项:工具栏新增 #layoutSel(默认 / 成绩明细与缺考名单同行), 用 CSS Grid 双模式渲染,窄屏回落单列;偏好写 localStorage - 移除统计卡片中的提交率卡片(卡片数 9 → 8) - localStorage 缓存层:问卷列表 / 每个项目数据 / 看板数据 / 班级组别 筛选 / 布局 / 上次项目 id 全部持久化;进入页面先渲染缓存, 后台再异步拉新数据并写回缓存;网络失败时仍能用本地缓存查看 - dashboard.php 同步:文件夹识别 / 数据缓存一致更新
This commit is contained in:
@@ -75,6 +75,13 @@ $rosterCount = Roster::count();
|
||||
<label>组别</label>
|
||||
<select id="grpSel"><option value="">全部组别</option></select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>布局</label>
|
||||
<select id="layoutSel">
|
||||
<option value="default">默认(缺考+未匹配同行)</option>
|
||||
<option value="side">成绩明细与缺考名单同行</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>自动刷新</label>
|
||||
<div class="inline">
|
||||
@@ -108,7 +115,6 @@ $rosterCount = Roster::count();
|
||||
<div class="card accent-blue"><span>名单总人数</span><b id="sTotal">-</b></div>
|
||||
<div class="card ok accent-green"><span>已提交</span><b id="sSubmit">-</b></div>
|
||||
<div class="card warn accent-orange"><span>缺考</span><b id="sAbsent">-</b></div>
|
||||
<div class="card accent-purple"><span>提交率</span><b id="sRate">-</b></div>
|
||||
<div class="card accent-teal"><span>平均分</span><b id="sAvg">-</b></div>
|
||||
<div class="card accent-green"><span>最高分</span><b id="sMax">-</b></div>
|
||||
<div class="card accent-red"><span>最低分</span><b id="sMin">-</b></div>
|
||||
@@ -116,31 +122,31 @@ $rosterCount = Roster::count();
|
||||
<div class="card accent-gray"><span>平均用时</span><b id="sDur">-</b></div>
|
||||
</section>
|
||||
|
||||
<section class="panel">
|
||||
<div class="panel-head">
|
||||
<h2>成绩明细 <small id="tableHint"></small></h2>
|
||||
<div class="updated">最后更新:<span id="lastUpdate">—</span><i id="liveDot" class="dot"></i></div>
|
||||
</div>
|
||||
<div class="table-scroll">
|
||||
<table class="grid" id="dataTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="sortable" data-k="sid">学号</th>
|
||||
<th class="sortable" data-k="name">姓名</th>
|
||||
<th class="sortable" data-k="cls">班级</th>
|
||||
<th class="sortable" data-k="grp">组别</th>
|
||||
<th class="sortable" data-k="score">成绩</th>
|
||||
<th class="sortable" data-k="submit_ts">提交时间</th>
|
||||
<th class="sortable" data-k="duration">考试时长</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody"><tr><td colspan="7" class="empty">请选择问卷 / 考试</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
<div class="layout" id="dataLayout" data-layout="default">
|
||||
<section class="panel" id="tablePanel">
|
||||
<div class="panel-head">
|
||||
<h2>成绩明细 <small id="tableHint"></small></h2>
|
||||
<div class="updated">最后更新:<span id="lastUpdate">—</span><i id="liveDot" class="dot"></i></div>
|
||||
</div>
|
||||
<div class="table-scroll">
|
||||
<table class="grid" id="dataTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="sortable" data-k="sid">学号</th>
|
||||
<th class="sortable" data-k="name">姓名</th>
|
||||
<th class="sortable" data-k="cls">班级</th>
|
||||
<th class="sortable" data-k="grp">组别</th>
|
||||
<th class="sortable" data-k="score">成绩</th>
|
||||
<th class="sortable" data-k="submit_ts">提交时间</th>
|
||||
<th class="sortable" data-k="duration">考试时长</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody"><tr><td colspan="7" class="empty">请选择问卷 / 考试</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="grid-2">
|
||||
<section class="panel">
|
||||
<section class="panel" id="absentPanel">
|
||||
<div class="panel-head"><h2>缺考名单 <small id="absentHint"></small></h2></div>
|
||||
<div class="table-scroll short">
|
||||
<table class="grid compact">
|
||||
@@ -149,7 +155,8 @@ $rosterCount = Roster::count();
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
<section class="panel">
|
||||
|
||||
<section class="panel" id="unmatchedPanel">
|
||||
<div class="panel-head"><h2>未匹配答卷 <small>姓名不在名单中</small></h2></div>
|
||||
<div class="table-scroll short">
|
||||
<table class="grid compact">
|
||||
|
||||
Reference in New Issue
Block a user