fix: 登录按钮禁用可见样式 + 副标题简化 + 缺考人数与统计卡片一致

This commit is contained in:
2026-09-08 16:03:30 +08:00
parent e03f296b0e
commit d934cd27ac
3 changed files with 25 additions and 4 deletions
+8 -3
View File
@@ -236,13 +236,14 @@
} }
// 各面板计数文字按所选班级过滤(成绩明细 / 缺考名单) // 各面板计数文字按所选班级过滤(成绩明细 / 缺考名单)
// 缺考数与统计卡片保持一致:过滤后名单 − 过滤后提交(而非二次过滤后端 absent 数组)
function renderHints() { function renderHints() {
const cls = $('#clsSel').value; const cls = $('#clsSel').value;
const rowsForCls = cls ? state.rows.filter(r => (r.cls || '') === cls) : state.rows; const rowsForCls = cls ? state.rows.filter(r => (r.cls || '') === cls) : state.rows;
const rosterForCls = cls ? (state.roster || []).filter(s => (s.cls || '') === cls) : (state.roster || []); const rosterForCls = cls ? (state.roster || []).filter(s => (s.cls || '') === cls) : (state.roster || []);
const absentForCls = cls ? state.absent.filter(a => (a.cls || '') === cls) : state.absent; const absentForCls = Math.max(0, rosterForCls.length - rowsForCls.length);
$('#tableHint').textContent = '共 ' + rowsForCls.length + ' 人已提交 · 名单 ' + rosterForCls.length + ' 人'; $('#tableHint').textContent = '共 ' + rowsForCls.length + ' 人已提交 · 名单 ' + rosterForCls.length + ' 人';
$('#absentHint').textContent = absentForCls.length ? '共 ' + absentForCls.length + ' 人' : ''; $('#absentHint').textContent = absentForCls ? '共 ' + absentForCls + ' 人' : '';
} }
function fmtDur(sec) { function fmtDur(sec) {
@@ -317,7 +318,11 @@
function renderAbsent() { function renderAbsent() {
const clsFilter = $('#clsSel').value; const clsFilter = $('#clsSel').value;
const list = clsFilter ? state.absent.filter(a => (a.cls || '') === clsFilter) : state.absent; // 与统计卡片保持一致:缺考 = 过滤后名单中未出现在提交记录里的学生(按 sid 匹配)
const rowsForCls = clsFilter ? state.rows.filter(r => (r.cls || '') === clsFilter) : state.rows;
const submittedSids = new Set(rowsForCls.map(r => r.sid).filter(Boolean));
const rosterForCls = clsFilter ? (state.roster || []).filter(s => (s.cls || '') === clsFilter) : (state.roster || []);
const list = rosterForCls.filter(s => !submittedSids.has(s.sid));
const tb = $('#absentBody'); const tb = $('#absentBody');
if (!list.length) { if (!list.length) {
tb.innerHTML = '<tr><td colspan="3" class="empty">' + (clsFilter ? '本班全部已提交 🎉' : '全部已提交 🎉') + '</td></tr>'; tb.innerHTML = '<tr><td colspan="3" class="empty">' + (clsFilter ? '本班全部已提交 🎉' : '全部已提交 🎉') + '</td></tr>';
+16
View File
@@ -85,6 +85,22 @@ html, body {
} }
.btn:hover { border-color: #c9d2e3; background: #fafbfe; } .btn:hover { border-color: #c9d2e3; background: #fafbfe; }
.btn:active { transform: translateY(1px); } .btn:active { transform: translateY(1px); }
.btn:disabled,
.btn[disabled] {
opacity: .5;
cursor: not-allowed;
background: #eef1f6;
color: #a0aab8;
border-color: #d5dde8;
transform: none;
pointer-events: auto;
}
.btn-primary:disabled,
.btn-primary[disabled] {
background: #b0c0d8;
border-color: #b0c0d8;
color: #fff;
}
.btn-primary { background: var(--primary); border-color: var(--primary); color: #fff; } .btn-primary { background: var(--primary); border-color: var(--primary); color: #fff; }
.btn-primary:hover { background: #2559db; border-color: #2559db; } .btn-primary:hover { background: #2559db; border-color: #2559db; }
.btn.sm { padding: 5px 10px; font-size: 12px; } .btn.sm { padding: 5px 10px; font-size: 12px; }
+1 -1
View File
@@ -38,7 +38,7 @@ $rosterCount = Roster::count();
<span class="logo">NY</span> <span class="logo">NY</span>
<div class="brand-text"> <div class="brand-text">
<strong>NY问卷考试系统数据平台</strong> <strong>NY问卷考试系统数据平台</strong>
<small>卷王问卷系统 · 实时数据统计</small> <small>实时数据统计</small>
</div> </div>
</div> </div>
<p class="login-tip">请输入卷王系统连接信息,完成连接测试后登录。密码需每次输入,避免依赖一次配置直接查看数据。</p> <p class="login-tip">请输入卷王系统连接信息,完成连接测试后登录。密码需每次输入,避免依赖一次配置直接查看数据。</p>