全站大数据台账补齐跨页搜索、筛选和分页,包括投档监督、报到审批、成绩复议、公开录取名单等。

后台重构为一级业务域,并将招生录取拆为 5 个二级菜单。
修复成绩等级排名遮挡科目。
成绩单、录取通知书均支持带防伪码和二维码的 PDF 下载。
录取通知书移除“录取专用章”,支持学校自定义模板。
通知书编号采用“学校代码 + 考试代码 + 学校独立流水号”。
完成招生学校报到台账:Y/N/P 状态、暂存、Excel 导入导出、二维码扫描确认。
完成报到提交、计划完成率、补录决定、超级管理员审批和自动公开闭环。
自动公告现已进入公开首页、考生通知及招生学校工作台。
验证结果:
完整 npm test 全部通过。
浏览器端三个角色工作台验收通过。
Excel 模板已实际导出并渲染验证。
两类 PDF 已实际生成、转图检查,二维码、编号和无印章版式正常。
This commit is contained in:
2026-07-22 09:50:52 +08:00 Unverified
parent d029931c31
commit 3e1bced990
22 changed files with 813 additions and 94 deletions
+57 -1
View File
@@ -921,7 +921,6 @@ body.review-subpage-open { overflow:hidden; }
.template-frame > p { min-height: 250px; margin: 24px 0; font-size: 16px; line-height: 2.2; white-space: pre-wrap; }
.template-frame footer { display: grid; justify-items: end; gap: 12px; margin-top: 40px; }
.template-frame footer span { justify-self: stretch; color: #786f65; }
.template-frame > i { position: absolute; right: 72px; bottom: 85px; width: 110px; height: 110px; display: grid; place-items: center; border: 5px solid color-mix(in srgb, var(--template-primary), transparent 25%); border-radius: 50%; color: var(--template-primary); font-size: 13px; font-style: normal; font-weight: 800; transform: rotate(-8deg); }
.notice-template-preview > p { color: var(--muted); font-size: 11px; line-height: 1.7; }
/* 公开防伪查询 */
@@ -946,9 +945,59 @@ body.review-subpage-open { overflow:hidden; }
.verification-notice p { margin: 6px 0 0; color: var(--muted); }
.admission-result-banner .solid-button { justify-self: start; margin-top: 10px; }
/* 招生计划完成率与考生报到工作台 */
.admission-progress-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:14px; margin:0 0 22px; }
.admission-progress-grid article { padding:20px; border:1px solid #d8e4e2; border-radius:12px; background:#fff; box-shadow:0 10px 28px rgba(20,35,75,.06); }
.admission-progress-grid header { display:flex; align-items:flex-start; justify-content:space-between; gap:18px; }
.admission-progress-grid header span { color:#53627a; font-size:12px; }
.admission-progress-grid header strong { color:#1f6f5f; font-size:27px; }
.progress-meter { height:8px; margin:14px 0 12px; overflow:hidden; border-radius:99px; background:#e5eceb; }
.progress-meter i { display:block; height:100%; border-radius:inherit; background:linear-gradient(90deg,#1f6f5f,#67a58f); }
.admission-progress-grid p { margin:0; color:#273650; }
.admission-progress-grid small { color:#7d8798; }
.reporting-workbench { margin-bottom:24px; border:1px solid #d9e2e8; border-radius:15px; overflow:hidden; background:#fff; box-shadow:0 16px 40px rgba(20,35,75,.07); }
.reporting-workbench > header { display:flex; align-items:flex-end; justify-content:space-between; gap:28px; padding:26px 28px 22px; color:#fff; background:linear-gradient(115deg,#172d55,#214f65); }
.reporting-workbench > header > div:first-child { min-width:0; }
.reporting-workbench > header span { color:#9fb5c9; font:11px Consolas,monospace; letter-spacing:.08em; }
.reporting-workbench > header h2 { margin:7px 0 5px; font-size:25px; }
.reporting-workbench > header p { margin:0; color:#c4d2df; }
.reporting-rate { flex:0 0 auto; text-align:right; }
.reporting-rate strong { display:block; color:#f1d28a; font-size:42px; line-height:1; }
.reporting-rate span { color:#bdcbd7 !important; font-family:inherit !important; letter-spacing:0 !important; }
.reporting-stat-strip { display:flex; align-items:center; gap:24px; padding:15px 28px; border-bottom:1px solid #e3e9ed; background:#f7f9fa; }
.reporting-stat-strip span { color:#667085; }
.reporting-stat-strip b { margin-left:5px; color:#172d55; font-size:17px; }
.reporting-stat-strip em { margin-left:auto; padding:5px 10px; border-radius:99px; color:#1f6f5f; background:#dfeee9; font-style:normal; font-weight:700; }
.reporting-tools { display:grid; grid-template-columns:1fr auto auto minmax(360px,1.3fr); gap:12px; align-items:center; margin:20px 24px 0; padding:17px; border:1px solid #ead9a5; border-radius:10px; background:#fffaf0; }
.reporting-tools > div { display:grid; gap:3px; }
.reporting-tools small { color:#7d735e; }
.reporting-tools form { display:flex; gap:8px; }
.reporting-tools form input { min-width:220px; }
.qr-capture { min-height:38px; display:inline-flex; align-items:center; justify-content:center; padding:0 13px; border:1px dashed #1f6f5f; border-radius:8px; color:#1f6f5f; cursor:pointer; }
.reporting-workbench > form,.reporting-ledger-readonly { padding:20px 24px 24px; }
.reporting-workbench table select,.reporting-workbench table input { min-width:150px; }
.reporting-workbench table input { width:100%; }
.reporting-actions { display:flex; justify-content:flex-end; gap:10px; padding-top:18px; }
.reporting-decision { display:grid; grid-template-columns:1.2fr .7fr 1fr auto; gap:14px; align-items:end; margin:0; padding:22px 24px; border-top:1px solid #e3e9ed; background:#f7faf9; }
.reporting-decision label { display:grid; gap:6px; }
.reporting-decision p { margin:4px 0 0; color:#6b7688; }
.reporting-readonly-note { padding:20px 24px; border-top:1px solid #e3e9ed; background:#f7f9fb; }
.reporting-readonly-note p { margin:5px 0 0; color:#6f7a8d; }
.workflow-hint { display:block; margin-top:12px; color:#7a8495; line-height:1.6; }
.template-notice-number { margin:36px 0 28px; color:#6d655b; font:12px Consolas,monospace; text-align:right; }
.template-qr-placeholder { position:absolute; right:52px; bottom:48px; width:88px; height:88px; display:grid; place-items:center; border:1px dashed var(--template-primary); color:var(--template-primary); font-size:10px; text-align:center; }
.reporting-public-stats { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin:22px 0; }
.reporting-public-stats article { padding:18px; border:1px solid #dce5e8; border-radius:9px; background:#f7faf9; }
.reporting-public-stats span,.reporting-public-stats small { display:block; color:#758093; }
.reporting-public-stats strong { display:inline-block; margin:8px 4px 2px 0; color:#173f60; font-size:28px; }
@media (max-width: 1200px) {
.notice-template-studio,.verification-hero { grid-template-columns: 1fr; }
.notice-template-preview { position: static; }
.reporting-tools { grid-template-columns:1fr auto auto; }
.reporting-tools > div,.reporting-tools form { grid-column:1/-1; }
.reporting-tools form { display:grid; grid-template-columns:minmax(180px,1fr) auto auto; }
.reporting-decision { grid-template-columns:1fr 1fr; }
}
@media (max-width: 850px) {
.portal-sidebar { width: 264px; }
@@ -962,4 +1011,11 @@ body.review-subpage-open { overflow:hidden; }
.verification-hero form { align-items: stretch; flex-direction: column; }
.verification-result dl { grid-template-columns: 1fr; }
.template-frame { min-height: 620px; padding: 48px 34px; }
.reporting-workbench > header { align-items:flex-start; flex-direction:column; }
.reporting-rate { text-align:left; }
.reporting-stat-strip { align-items:flex-start; flex-direction:column; gap:8px; }
.reporting-stat-strip em { margin-left:0; }
.reporting-tools,.reporting-decision,.reporting-public-stats { grid-template-columns:1fr; }
.reporting-tools form { grid-template-columns:1fr; }
.reporting-actions { align-items:stretch; flex-direction:column; }
}