feat: 完善/优化/新增大批次 + 安全加固 + 性能优化
- 修复再次提交不置顶(排序键改用 last_submit_ts) - 后端结果缓存 + 并发锁(DataCache / ny_build_data / Roster 指纹失效) - 导出 xlsx 多表:按最新成绩 / 按班级分表 / 可选列 - 名单管理:新增改弹窗、删除多选+二次确认、登陆账号列 - 安全:CSRF token + 登录失败限流(5次锁10分钟) - 未匹配答卷一键加入名单(unmatched_map) - 缺考名单增强:复制学号/姓名、按班统计、打印 - 成绩快照 + 跨卷趋势(Snapshot) - 异常检测线索(短时长高分/高频重考/雷同成绩) - 前端性能:虚拟滚动、搜索防抖、后台暂停、失败退避 - 测试沉淀:test-new-features.php + run-all.sh
This commit is contained in:
@@ -117,6 +117,7 @@ body {
|
||||
.btn-primary { background: var(--primary); border-color: var(--primary); color: #fff; }
|
||||
.btn-primary:hover { background: #2559db; border-color: #2559db; }
|
||||
.btn.sm { padding: 5px 10px; font-size: 12px; }
|
||||
.btn.xs { padding: 3px 8px; font-size: 11px; }
|
||||
.btn.danger { color: var(--danger); border-color: #f3cfcb; }
|
||||
.btn.danger:hover { background: var(--danger-weak); }
|
||||
.btn b {
|
||||
@@ -289,6 +290,9 @@ table.grid th.sortable { cursor: pointer; user-select: none; }
|
||||
table.grid th.sortable:hover { color: var(--primary); }
|
||||
table.grid th .arrow { color: var(--primary); margin-left: 3px; }
|
||||
table.grid td { padding: 10px 14px; border-bottom: 1px solid var(--border-2); }
|
||||
/* 虚拟滚动占位行:不占视觉空间、不响应 hover/条纹、不显示边框 */
|
||||
table.grid tbody tr.vspacer td { padding: 0; border: 0; background: transparent !important; }
|
||||
table.grid tbody tr.vspacer:hover td { background: transparent !important; }
|
||||
table.grid tbody tr:nth-child(even) td { background: #fbfcff; }
|
||||
table.grid tbody tr:hover td { background: var(--primary-weak); }
|
||||
table.grid.compact td, table.grid.compact th { padding: 7px 12px; }
|
||||
@@ -381,6 +385,7 @@ table.grid tbody tr.new.clickable:hover td { background: #d6f2e2; }
|
||||
.fi { display: flex; flex-direction: column; gap: 6px; }
|
||||
.fi.full { grid-column: 1 / -1; }
|
||||
.fi label { font-size: 12px; font-weight: 600; color: var(--text-2); }
|
||||
.fi label .req { color: var(--danger, #e5484d); margin-left: 2px; }
|
||||
.fi-inline { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; }
|
||||
.fi-inline .chk { font-weight: 500; font-size: 13px; color: var(--text); }
|
||||
.fullscores { display: flex; flex-direction: column; gap: 6px; }
|
||||
|
||||
Reference in New Issue
Block a user