feat: 健康体检原型更新(员工体检报告更名为常规体检报告并新增报告查看/补录/影像提取等操作,未匹配项目页完善新增与批量交互,删除医生检查人数统计与体检结果名册页面,侧边栏导航同步调整)

This commit is contained in:
liuyunqin
2026-08-27 17:50:07 +08:00
parent b96b936604
commit f177c05119
33 changed files with 514 additions and 840 deletions
+2 -4
View File
@@ -220,19 +220,17 @@ const SITE_MAP = [
{ file:'mid-participation.html', label:'员工参检情况' },
{ file:'mid-hospital-realtime.html', label:'医院实时预约人数' },
{ file:'mid-doctor-realtime.html', label:'医生实时检查情况' },
{ file:'mid-doctor-count.html', label:'医生检查人数统计' },
{ file:'mid-hospital-appointment.html', label:'医院预约人数统计' },
{ file:'mid-gastro-questionnaire.html', label:'胃肠镜问卷信息' },
{ file:'post-unit-count.html', label:'单位体检人数统计' },
{ file:'post-hospital-count.html', label:'医院体检人数统计' },
{ file:'post-doctor-count.html', label:'医生检查人数统计' },
{ file:'post-item-stat.html', label:'医院体检项目统计' },
{ file:'post-cancer-screening.html', label:'防癌筛查项目统计' },
{ file:'post-cancer-screening.html', label:'防癌筛查人数统计' },
{ file:'post-standard-stat.html', label:'系统标准化项目统计' },
{ file:'post-contracted-hospital.html', label:'签约医院人数统计' },
{ file:'post-report-employee.html', label:'员工体检报告' },
{ file:'post-report-employee.html', label:'常规体检报告' },
{ file:'post-report-unmatched.html', label:'体检报告未匹配项目' },
{ file:'post-report-roster.html', label:'体检结果名册' },
{ file:'exception-dirty.html', label:'系统脏数据' },
{ file:'exception-result.html', label:'结果异常' }
]},
@@ -110,8 +110,6 @@
<div class="sidebar-menu__title">档案</div>
<a href="archive-personal.html" class="sidebar-item active">个人体检数据</a>
<a href="archive-unit.html" class="sidebar-item">单位报表数据</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -113,8 +113,6 @@
<div class="sidebar-menu__title">档案</div>
<a href="archive-personal.html" class="sidebar-item">个人体检数据</a>
<a href="archive-unit.html" class="sidebar-item active">单位报表数据</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -180,8 +180,6 @@
<a href="config-standard-hospital.html" class="sidebar-item">医院体检项目</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -171,8 +171,6 @@
<a href="config-standard-hospital.html" class="sidebar-item">医院体检项目</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -166,8 +166,6 @@
<a href="config-standard-hospital.html" class="sidebar-item">医院体检项目</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -187,8 +187,6 @@
<a href="config-standard-hospital.html" class="sidebar-item">医院体检项目</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -200,8 +200,6 @@
<a href="config-standard-hospital.html" class="sidebar-item">医院体检项目</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -215,8 +215,6 @@
<a href="config-standard-hospital.html" class="sidebar-item">医院体检项目</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -219,8 +219,6 @@
<a href="config-standard-hospital.html" class="sidebar-item">医院体检项目</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -154,8 +154,6 @@
<a href="config-standard-hospital.html" class="sidebar-item active">医院体检项目</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -120,8 +120,6 @@
<div class="sidebar-menu__title">异常事件</div>
<a href="exception-dirty.html" class="sidebar-item active">系统脏数据</a>
<a href="exception-result.html" class="sidebar-item">结果异常</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -122,8 +122,6 @@
<div class="sidebar-menu__title">异常事件</div>
<a href="exception-dirty.html" class="sidebar-item">系统脏数据</a>
<a href="exception-result.html" class="sidebar-item active">结果异常</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -142,11 +142,8 @@
<a href="mid-participation.html" class="sidebar-item">已参检员工信息</a>
<a href="mid-hospital-realtime.html" class="sidebar-item">医院实时预约人数</a>
<a href="mid-doctor-realtime.html" class="sidebar-item">医生实时检查情况</a>
<a href="mid-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="mid-hospital-appointment.html" class="sidebar-item">医院预约人数统计</a>
<a href="mid-gastro-questionnaire.html" class="sidebar-item">胃肠镜问卷信息</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -1,209 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>健康体检 - 医生检查人数统计 | 健康CQ原型</title>
<style>
*{box-sizing:border-box;margin:0;padding:0;}
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
:root{
--primary:#1890FF;--primary-light:#E6F7FF;--success:#52C41A;--warning:#FAAD14;--danger:#FF4D4F;
--text-primary:#333;--text-secondary:#666;--text-placeholder:#999;--border:#E8E8E8;--background:#F5F7FA;
--font-xs:11px;--font-sm:13px;--font-base:15px;--font-lg:17px;--font-xl:20px;--font-xxl:24px;
--radius-sm:4px;--radius-md:8px;--radius-lg:12px;
--shadow-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.12);
}
/* 顶部导航 */
.top-bar{display:flex;align-items:center;height:56px;background:#001529;padding:0 24px;position:fixed;top:0;left:0;right:0;z-index:100;}
.top-bar__logo{display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--font-lg);font-weight:600;white-space:nowrap;width:240px;flex-shrink:0;}
.top-bar__logo svg{width:28px;height:28px;}
.top-bar__right{display:flex;align-items:center;gap:16px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);}
.top-bar__right .btn-back{color:rgba(255,255,255,0.65);cursor:pointer;display:flex;align-items:center;gap:4px;text-decoration:none;}
.top-bar__right .btn-back:hover{color:#fff;}
.avatar{width:32px;height:32px;border-radius:50%;background:#1890FF;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-sm);cursor:pointer;}
.top-bar__nav{display:flex;align-items:center;gap:4px;flex:1;}
.top-bar__nav a{color:rgba(255,255,255,0.65);text-decoration:none;padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);transition:all .2s;}
.top-bar__nav a:hover{color:#fff;background:rgba(255,255,255,0.08);}
.top-bar__nav a.active{color:#fff;background:var(--primary);}
/* 侧边栏 */
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:240px;background:#001529;overflow-y:auto;z-index:90;padding-top:8px;}
.sidebar-menu__title{color:rgba(255,255,255,0.35);font-size:var(--font-xs);padding:16px 24px 8px;text-transform:uppercase;letter-spacing:.5px;}
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
.sidebar-item.active{color:#fff;background:var(--primary);}
.sidebar-subgroup__header{display:flex;align-items:center;gap:6px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;user-select:none;}
.sidebar-subgroup__header:hover{color:rgba(255,255,255,0.85);background:rgba(255,255,255,0.04);}
.sidebar-subgroup__header .arrow{width:10px;height:10px;transition:transform .2s;flex-shrink:0;}
.sidebar-subgroup__header .arrow path{stroke:rgba(255,255,255,0.45);}
.sidebar-subgroup.open>.sidebar-subgroup__header{color:rgba(255,255,255,0.85);}
.sidebar-subgroup.open>.sidebar-subgroup__header .arrow{transform:rotate(90deg);}
.sidebar-subgroup__body{display:none;padding-left:16px;}
.sidebar-subgroup.open>.sidebar-subgroup__body{display:block;}
.sidebar-subgroup__body .sidebar-item{padding-left:36px;font-size:12px;}
/* 主内容 */
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
/* 筛选栏 */
.filter-bar{background:#fff;border-radius:var(--radius-md);padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.filter-item{display:flex;align-items:center;gap:8px;}
.filter-item label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
.filter-input{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;min-width:200px;}
.filter-input:focus{border-color:var(--primary);}
.filter-select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;cursor:pointer;min-width:120px;}
.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:none;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
.btn-primary{background:var(--primary);color:#fff;}.btn-primary:hover{background:#40a9ff;}
.btn-default{background:#fff;color:var(--text-primary);border:1px solid var(--border);}.btn-default:hover{color:var(--primary);border-color:var(--primary);}
.btn-danger{background:#fff;color:var(--danger);border:1px solid var(--danger);}.btn-danger:hover{background:#fff1f0;}
/* 表格 */
.table-card{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);overflow:hidden;}
.table-card__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);}
.table-card__title{font-size:var(--font-base);font-weight:600;}
.table-card__actions{display:flex;gap:8px;align-items:center;}
.table-card__content{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;}
.table-card__content table{min-width:100%;white-space:nowrap;}
table{width:100%;border-collapse:collapse;}
thead th{background:#FAFAFA;padding:12px 16px;text-align:left;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;}
tbody td{padding:14px 16px;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);white-space:nowrap;}
tbody tr:last-child td{border-bottom:none;}
tbody tr:hover{background:#F8FBFF;}
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
.tag-blue{background:var(--primary-light);color:var(--primary);}
.tag-green{background:#F6FFED;color:var(--success);}
.tag-orange{background:#FFF7E6;color:var(--warning);}
.tag-red{background:#FFF1F0;color:var(--danger);}
.link{color:var(--primary);cursor:pointer;font-size:var(--font-sm);}.link:hover{color:#40a9ff;}
/* 分页 */
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
</style>
</head>
<body>
<!-- 顶部导航 -->
<div class="top-bar">
<div class="top-bar__logo">
<svg viewBox="0 0 28 28" fill="none"><rect width="28" height="28" rx="6" fill="#1890FF"/><path d="M7 14h14M14 7v14" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/></svg>
健康体检
</div>
<nav class="top-bar__nav">
<a href="archive-personal.html">档案</a>
<a href="config-material-notice.html">基础配置</a>
<a href="pre-hospital-scope.html">检前</a>
<a href="mid-appointment-track.html" class="active">检中</a>
<a href="post-unit-count.html">检后</a>
<a href="exception-dirty.html">异常事件</a>
</nav>
<div class="top-bar__right">
<a class="btn-back" href="../../index.html">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
返回首页
</a>
<div class="avatar"></div>
<span style="color:rgba(255,255,255,0.65);">系统管理员 ▾</span>
</div>
</div>
<!-- 侧边栏 -->
<aside class="sidebar">
<div class="sidebar-menu__title">检中</div>
<a href="mid-appointment-track.html" class="sidebar-item">员工预约跟踪</a>
<a href="mid-unit-appointment.html" class="sidebar-item">单位预约统计</a>
<a href="mid-participation.html" class="sidebar-item">已参检员工信息</a>
<a href="mid-hospital-realtime.html" class="sidebar-item">医院实时预约人数</a>
<a href="mid-doctor-realtime.html" class="sidebar-item">医生实时检查情况</a>
<a href="mid-doctor-count.html" class="sidebar-item active">医生检查人数统计</a>
<a href="mid-hospital-appointment.html" class="sidebar-item">医院预约人数统计</a>
<a href="mid-gastro-questionnaire.html" class="sidebar-item">胃肠镜问卷信息</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
<main class="main">
<!-- 筛选栏 -->
<div class="filter-bar">
<div class="filter-item">
<label>体检年份:</label>
<select class="filter-select">
<option>2024</option><option>2025</option><option selected>2026</option><option>2027</option>
</select>
</div>
<div class="filter-item">
<label>所属医院:</label>
<select class="filter-select">
<option>请选择</option><option>泾河医院</option><option>庆阳医院</option><option>延安医院</option>
</select>
</div>
<div class="filter-item">
<label>医生姓名:</label>
<input class="filter-input" type="text" placeholder="请输入" style="width:150px;min-width:unset;">
</div>
<button class="btn btn-primary">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="6" cy="6" r="4" stroke="currentColor" stroke-width="1.4"/><path d="M10 10l2.5 2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg>
查询
</button>
<button class="btn btn-default">重置</button>
</div>
<!-- 操作栏 -->
<div style="display:flex;gap:12px;margin-bottom:16px;">
<button class="btn btn-primary">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="#fff" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>
导出列表数据
</button>
<button class="btn btn-default">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="2" y="2" width="10" height="10" rx="1.5" stroke="currentColor" stroke-width="1.4"/><path d="M4 5h6M4 7.5h4" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/></svg>
查看导出任务
</button>
</div>
<!-- 数据表格 -->
<div class="table-card">
<div class="table-card__header">
<div class="table-card__title">医生检查人数统计</div>
</div>
<div class="table-card__content">
<table>
<thead>
<tr>
<th>序号</th><th>医生姓名</th><th>所属医院</th><th>检查员工人数</th><th>体检年份</th>
</tr>
</thead>
<tbody>
<tr><td>1</td><td>张旭</td><td>泾河医院</td><td>200</td><td>2025</td></tr>
<tr><td>2</td><td>杨喜</td><td>庆阳医院</td><td>200</td><td>2025</td></tr>
</tbody>
</table>
</div>
<div class="pagination">
<span>共 243 条</span>
<span>显示 10 条</span>
<button class="page-btn"></button>
<button class="page-btn active">1</button>
<button class="page-btn">2</button>
<button class="page-btn">3</button>
<span>...</span>
<button class="page-btn">50</button>
<button class="page-btn"></button>
</div>
</div>
</main>
<script>
/* 侧边栏展开/折叠交互 */
function toggleSubgroup(header){
header.parentElement.classList.toggle('open');
}
/* 页面加载时自动展开当前页面所在的子分组 */
(function(){
var active=document.querySelector('.sidebar-item.active');
if(!active)return;
var sub=active.closest('.sidebar-subgroup');
if(sub)sub.classList.add('open');
})();
</script>
</body>
</html>
@@ -114,11 +114,8 @@
<a href="mid-participation.html" class="sidebar-item">已参检员工信息</a>
<a href="mid-hospital-realtime.html" class="sidebar-item">医院实时预约人数</a>
<a href="mid-doctor-realtime.html" class="sidebar-item active">医生实时检查情况</a>
<a href="mid-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="mid-hospital-appointment.html" class="sidebar-item">医院预约人数统计</a>
<a href="mid-gastro-questionnaire.html" class="sidebar-item">胃肠镜问卷信息</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -109,11 +109,8 @@
<a href="mid-participation.html" class="sidebar-item">已参检员工信息</a>
<a href="mid-hospital-realtime.html" class="sidebar-item">医院实时预约人数</a>
<a href="mid-doctor-realtime.html" class="sidebar-item">医生实时检查情况</a>
<a href="mid-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="mid-hospital-appointment.html" class="sidebar-item">医院预约人数统计</a>
<a href="mid-gastro-questionnaire.html" class="sidebar-item active">胃肠镜问卷信息</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -114,11 +114,8 @@
<a href="mid-participation.html" class="sidebar-item">已参检员工信息</a>
<a href="mid-hospital-realtime.html" class="sidebar-item">医院实时预约人数</a>
<a href="mid-doctor-realtime.html" class="sidebar-item">医生实时检查情况</a>
<a href="mid-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="mid-hospital-appointment.html" class="sidebar-item active">医院预约人数统计</a>
<a href="mid-gastro-questionnaire.html" class="sidebar-item">胃肠镜问卷信息</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -114,11 +114,8 @@
<a href="mid-participation.html" class="sidebar-item">已参检员工信息</a>
<a href="mid-hospital-realtime.html" class="sidebar-item active">医院实时预约人数</a>
<a href="mid-doctor-realtime.html" class="sidebar-item">医生实时检查情况</a>
<a href="mid-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="mid-hospital-appointment.html" class="sidebar-item">医院预约人数统计</a>
<a href="mid-gastro-questionnaire.html" class="sidebar-item">胃肠镜问卷信息</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -146,11 +146,8 @@
<a href="mid-participation.html" class="sidebar-item active">已参检员工信息</a>
<a href="mid-hospital-realtime.html" class="sidebar-item">医院实时预约人数</a>
<a href="mid-doctor-realtime.html" class="sidebar-item">医生实时检查情况</a>
<a href="mid-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="mid-hospital-appointment.html" class="sidebar-item">医院预约人数统计</a>
<a href="mid-gastro-questionnaire.html" class="sidebar-item">胃肠镜问卷信息</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -125,11 +125,8 @@
<a href="mid-participation.html" class="sidebar-item">已参检员工信息</a>
<a href="mid-hospital-realtime.html" class="sidebar-item">医院实时预约人数</a>
<a href="mid-doctor-realtime.html" class="sidebar-item">医生实时检查情况</a>
<a href="mid-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="mid-hospital-appointment.html" class="sidebar-item">医院预约人数统计</a>
<a href="mid-gastro-questionnaire.html" class="sidebar-item">胃肠镜问卷信息</a>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>健康体检 - 防癌筛查项目统计 | 健康CQ原型</title>
<title>健康体检 - 防癌筛查人数统计 | 健康CQ原型</title>
<style>
*{box-sizing:border-box;margin:0;padding:0;}
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
@@ -118,7 +118,7 @@
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item active">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item active">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
@@ -129,19 +129,28 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
<main class="main">
<!-- 筛选栏 -->
<div class="filter-bar">
<div class="filter-item">
<label>体检年份:</label>
<select class="filter-select">
<option>2024</option><option>2025</option><option selected>2026</option><option>2027</option>
</select>
</div>
<div class="filter-item">
<label>医院:</label>
<select class="filter-select">
<option>请选择</option><option>延安医院</option><option>宁夏宝石花</option><option>CQ总医院</option>
</select>
</div>
<div class="filter-item">
<label>单位:</label>
<select class="filter-select">
@@ -167,7 +176,7 @@
<!-- 数据表格 -->
<div class="table-card">
<div class="table-card__header">
<div class="table-card__title">防癌筛查项目统计</div>
<div class="table-card__title">防癌筛查人数统计</div>
</div>
<div class="table-card__content">
<table>
@@ -176,7 +185,7 @@
<tr>
<th rowspan="2">序号</th>
<th rowspan="2">单位</th>
<th rowspan="2">签约医院</th>
<th rowspan="2">体检医院</th>
<th colspan="3" style="text-align:center;">Septin9</th>
<th colspan="3" style="text-align:center;">CA724</th>
<th colspan="3" style="text-align:center;">Septin9+CA724</th>
@@ -118,7 +118,7 @@
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item active">签约医院人数统计</a>
</div>
@@ -129,13 +129,10 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
+22 -11
View File
@@ -118,7 +118,7 @@
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item active">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
@@ -129,13 +129,10 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -143,18 +140,25 @@
<!-- 筛选栏 -->
<div class="filter-bar">
<div class="filter-item">
<label>医院</label>
<label>体检年份</label>
<select class="filter-select">
<option>请选择</option><option>泾河医院</option><option>庆阳医院</option><option>CQ总医院</option>
<option>2024</option><option>2025</option><option selected>2026</option><option>2027</option>
</select>
</div>
<div class="filter-item">
<label>姓名</label>
<label>所属医院</label>
<select class="filter-select">
<option>请选择</option>
<option>请选择</option><option>泾河医院</option><option>庆阳医院</option><option>延安医院</option>
</select>
</div>
<button class="btn btn-primary">查询</button>
<div class="filter-item">
<label>医生姓名:</label>
<input class="filter-input" type="text" placeholder="请输入" style="width:150px;min-width:unset;">
</div>
<button class="btn btn-primary">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="6" cy="6" r="4" stroke="currentColor" stroke-width="1.4"/><path d="M10 10l2.5 2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg>
查询
</button>
<button class="btn btn-default">重置</button>
</div>
@@ -189,8 +193,15 @@
</table>
</div>
<div class="pagination">
<span>共 2 条</span>
<span>共 243</span>
<span>显示 10 条</span>
<button class="page-btn"></button>
<button class="page-btn active">1</button>
<button class="page-btn">2</button>
<button class="page-btn">3</button>
<span>...</span>
<button class="page-btn">50</button>
<button class="page-btn"></button>
</div>
</div>
</main>
@@ -118,7 +118,7 @@
<a href="post-hospital-count.html" class="sidebar-item active">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
@@ -129,19 +129,22 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
<main class="main">
<!-- 筛选栏 -->
<div class="filter-bar">
<div class="filter-item">
<label>体检年份:</label>
<select class="filter-select">
<option>2024</option><option>2025</option><option selected>2026</option><option>2027</option>
</select>
</div>
<div class="filter-item">
<label>医院:</label>
<select class="filter-select">
@@ -174,11 +177,9 @@
<tr>
<th rowspan="2">序号</th>
<th rowspan="2">医院名称</th>
<th rowspan="2">单位</th>
<th rowspan="2">已选项目人数</th>
<th colspan="3" style="text-align:center;">已预约情况</th>
<th rowspan="2">未预约人数</th>
<th rowspan="2">大病人数</th>
<th rowspan="2">体检年份</th>
</tr>
<tr>
@@ -188,8 +189,8 @@
</tr>
</thead>
<tbody>
<tr><td>1</td><td>泾河医院</td><td>第一采油厂</td><td>5000</td><td>4000</td><td>3000</td><td>1000</td><td>1000</td><td>500</td><td>2025</td></tr>
<tr><td>2</td><td>泾河医院</td><td>第二采油厂</td><td>5000</td><td>4000</td><td>3000</td><td>1000</td><td>1000</td><td>500</td><td>2025</td></tr>
<tr><td>1</td><td>泾河医院</td><td>5000</td><td>4000</td><td>3000</td><td>1000</td><td>1000</td><td>2025</td></tr>
<tr><td>2</td><td>泾河医院</td><td>5000</td><td>4000</td><td>3000</td><td>1000</td><td>1000</td><td>2025</td></tr>
</tbody>
</table>
</div>
+2 -5
View File
@@ -118,7 +118,7 @@
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item active">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
@@ -129,13 +129,10 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>健康体检 - 员工体检报告 | 健康CQ原型</title>
<title>健康体检 - 常规体检报告 | 健康CQ原型</title>
<style>
*{box-sizing:border-box;margin:0;padding:0;}
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
@@ -77,6 +77,27 @@
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
/* 弹窗 */
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:999;display:none;align-items:center;justify-content:center;}
.modal-overlay.open{display:flex;}
.modal{background:#fff;border-radius:var(--radius-md);box-shadow:0 4px 16px rgba(0,0,0,0.15);width:640px;max-height:85vh;display:flex;flex-direction:column;}
.modal--wide{width:960px;}
.modal__header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--border);flex-shrink:0;}
.modal__title{font-size:var(--font-lg);font-weight:600;}
.modal__close{width:32px;height:32px;border-radius:50%;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);font-size:18px;}
.modal__close:hover{background:#F5F5F5;}
.modal__body{flex:1;overflow-y:auto;padding:24px;}
.modal__footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid var(--border);flex-shrink:0;}
/* 报告内容 */
.report-note{border-radius:var(--radius-sm);padding:12px 16px;font-size:var(--font-sm);line-height:1.9;margin-bottom:16px;}
.report-note--conclusion{border:1px solid #FFD591;background:#FFF7E6;color:#873800;}
.report-note--advice{border:1px solid #B7EB8F;background:#F6FFED;color:#389E0D;}
.report-section{margin-bottom:24px;}
.report-section:last-child{margin-bottom:0;}
.report-section__title{font-size:var(--font-base);font-weight:600;color:var(--text-primary);padding-left:10px;border-left:3px solid var(--primary);margin-bottom:12px;line-height:1.4;}
.report-sub__title{font-size:var(--font-sm);font-weight:600;color:var(--text-primary);margin:14px 0 8px;}
.report-sub:first-of-type .report-sub__title{margin-top:0;}
.result-abnormal{color:var(--danger);font-weight:600;}
</style>
</head>
<body>
@@ -118,7 +139,7 @@
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
@@ -129,13 +150,10 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item active">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item active">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -171,10 +189,26 @@
</div>
<!-- 操作栏 -->
<div style="display:flex;gap:12px;margin-bottom:16px;">
<div style="display:flex;flex-wrap:wrap;gap:12px;margin-bottom:16px;">
<button class="btn btn-primary">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="#fff" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>
导出列表数据
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M11.5 4A4.5 4.5 0 0 0 3.2 2.8M2.5 10a4.5 4.5 0 0 0 8.3 1.2" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><path d="M11.5 1.5v2.5H9M2.5 12.5V10h2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>
更新体检报告数据
</button>
<button class="btn btn-primary">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="5.5" stroke="currentColor" stroke-width="1.4"/><path d="M7 4.5v5M4.5 7h5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg>
体检报告补录
</button>
<button class="btn btn-primary">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="2" y="2" width="10" height="10" rx="1.5" stroke="currentColor" stroke-width="1.4"/><path d="M4.5 5h5M4.5 7.5h3M4.5 10h2" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/><path d="M9.5 9.5l2 2" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/></svg>
提取防癌项结果
</button>
<button class="btn btn-primary">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1.5" y="2.5" width="11" height="9" rx="1.5" stroke="currentColor" stroke-width="1.4"/><circle cx="5" cy="5.5" r="1" fill="currentColor"/><path d="M1.5 9.5l3-2.5 2.5 2L9.5 6l3 3" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/></svg>
获取影像报告
</button>
<button class="btn btn-default">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>
导出详细报告
</button>
<button class="btn btn-default">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="2" y="2" width="10" height="10" rx="1.5" stroke="currentColor" stroke-width="1.4"/><path d="M4 5h6M4 7.5h4" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/></svg>
@@ -185,7 +219,7 @@
<!-- 数据表格 -->
<div class="table-card">
<div class="table-card__header">
<div class="table-card__title">员工体检报告</div>
<div class="table-card__title">常规体检报告</div>
</div>
<div class="table-card__content">
<table>
@@ -195,8 +229,8 @@
</tr>
</thead>
<tbody>
<tr><td>1</td><td>王旭</td><td>342423</td><td></td><td>41</td><td>430626198502560029</td><td>公司机关</td><td>办公室</td><td>延安医院</td><td>常规体检</td><td>2026-03-10</td><td>2026-03-10</td><td>2026-03-10</td><td></td><td>2025-06-06</td><td><span class="link">详情</span></td></tr>
<tr><td>2</td><td>张丽娟</td><td>324321</td><td></td><td>36</td><td>430626198502560029</td><td>公司机关</td><td>办公室</td><td>延安医院</td><td>胃肠镜体检</td><td>2026-03-10</td><td>2026-03-10</td><td>2026-03-10</td><td></td><td>-</td><td><span class="link">详情</span></td></tr>
<tr><td>1</td><td>王旭</td><td>342423</td><td></td><td>41</td><td>430626198502560029</td><td>公司机关</td><td>办公室</td><td>延安医院</td><td>常规体检</td><td>2026-03-10</td><td>2026-03-10</td><td>2026-03-10</td><td></td><td>2025-06-06</td><td><span class="link" onclick="openReport('王旭')">查看报告</span><span class="link" style="margin-left:12px;">查看影像</span><span class="link" style="margin-left:12px;">下载报告</span></td></tr>
<tr><td>2</td><td>张丽娟</td><td>324321</td><td></td><td>36</td><td>430626198502560029</td><td>公司机关</td><td>办公室</td><td>延安医院</td><td>胃肠镜体检</td><td>2026-03-10</td><td>2026-03-10</td><td>2026-03-10</td><td></td><td>-</td><td><span class="link" onclick="openReport('张丽娟')">查看报告</span><span class="link" style="margin-left:12px;">查看影像</span><span class="link" style="margin-left:12px;">下载报告</span></td></tr>
</tbody>
</table>
</div>
@@ -205,10 +239,166 @@
<button class="page-btn active">1</button>
</div>
</div>
<!-- 查看报告弹窗 -->
<div class="modal-overlay" id="report-modal" onclick="if(event.target===this)closeReport()">
<div class="modal modal--wide">
<div class="modal__header">
<div class="modal__title" id="report-title">体检报告</div>
<button class="modal__close" onclick="closeReport()"></button>
</div>
<div class="modal__body">
<!-- 体检结论 -->
<div class="report-section">
<div class="report-section__title">体检结论</div>
<div class="report-note report-note--conclusion">1. 血脂异常:甘油三酯轻度偏高;<br>2. 视力疲劳:双眼裸眼视力下降;<br>3. 其余各项体检指标未见明显异常。</div>
</div>
<!-- 体检建议 -->
<div class="report-section">
<div class="report-section__title">体检建议</div>
<div class="report-note report-note--advice">1. 建议低脂清淡饮食,少油少糖,规律运动,3个月后复查血脂;<br>2. 注意用眼卫生,避免长时间使用电子屏幕,必要时眼科随诊;<br>3. 建议每年进行一次健康体检,动态关注各项指标变化。</div>
</div>
<!-- 物理检查 -->
<div class="report-section">
<div class="report-section__title">物理检查</div>
<div class="report-sub">
<div class="report-sub__title">一般检查</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>身高</td><td>175</td><td>cm</td><td>-</td></tr>
<tr><td>体重</td><td>70.5</td><td>kg</td><td>-</td></tr>
<tr><td>体质指数(BMI)</td><td>23.0</td><td>kg/m²</td><td>18.5~23.9</td></tr>
<tr><td>收缩压</td><td>122</td><td>mmHg</td><td>90~139</td></tr>
<tr><td>舒张压</td><td>78</td><td>mmHg</td><td>60~89</td></tr>
</tbody>
</table>
</div>
<div class="report-sub">
<div class="report-sub__title">视力</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>裸眼视力(右)</td><td class="result-abnormal">0.8 ↓</td><td>-</td><td>≥1.0</td></tr>
<tr><td>裸眼视力(左)</td><td>1.0</td><td>-</td><td>≥1.0</td></tr>
</tbody>
</table>
</div>
</div>
<!-- 内科 -->
<div class="report-section">
<div class="report-section__title">内科</div>
<div class="report-sub">
<div class="report-sub__title">心肺听诊</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>心率</td><td>72</td><td>次/分</td><td>60~100</td></tr>
<tr><td>心律</td><td></td><td>-</td><td>节律整齐</td></tr>
<tr><td>呼吸音</td><td>清晰</td><td>-</td><td>呼吸音清晰</td></tr>
</tbody>
</table>
</div>
<div class="report-sub">
<div class="report-sub__title">腹部触诊</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>肝脏</td><td>未触及</td><td>-</td><td>无肿大</td></tr>
<tr><td>脾脏</td><td>未触及</td><td>-</td><td>无肿大</td></tr>
</tbody>
</table>
</div>
</div>
<!-- 外科 -->
<div class="report-section">
<div class="report-section__title">外科</div>
<div class="report-sub">
<div class="report-sub__title">皮肤与淋巴结</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>皮肤</td><td>无异常</td><td>-</td><td>皮肤黏膜无异常</td></tr>
<tr><td>浅表淋巴结</td><td>未触及肿大</td><td>-</td><td>无肿大</td></tr>
</tbody>
</table>
</div>
<div class="report-sub">
<div class="report-sub__title">甲状腺与脊柱四肢</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>甲状腺</td><td>无肿大</td><td>-</td><td>无肿大</td></tr>
<tr><td>脊柱、四肢关节</td><td>无异常</td><td>-</td><td>活动自如</td></tr>
</tbody>
</table>
</div>
</div>
<!-- 化学检查 -->
<div class="report-section">
<div class="report-section__title">化学检查</div>
<div class="report-sub">
<div class="report-sub__title">血常规</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>白细胞计数</td><td>6.2</td><td>×10⁹/L</td><td>3.5~9.5</td></tr>
<tr><td>红细胞计数</td><td>4.8</td><td>×10¹²/L</td><td>4.3~5.8</td></tr>
<tr><td>血红蛋白</td><td>145</td><td>g/L</td><td>130~175</td></tr>
<tr><td>血小板计数</td><td>220</td><td>×10⁹/L</td><td>125~350</td></tr>
</tbody>
</table>
</div>
<div class="report-sub">
<div class="report-sub__title">肝功能</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>丙氨酸氨基转移酶(ALT)</td><td>25</td><td>U/L</td><td>9~50</td></tr>
<tr><td>天门冬氨酸氨基转移酶(AST)</td><td>22</td><td>U/L</td><td>15~40</td></tr>
</tbody>
</table>
</div>
<div class="report-sub">
<div class="report-sub__title">血脂四项</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>总胆固醇</td><td>4.6</td><td>mmol/L</td><td>&lt;5.2</td></tr>
<tr><td>甘油三酯</td><td class="result-abnormal">1.8 ↑</td><td>mmol/L</td><td>&lt;1.7</td></tr>
<tr><td>高密度脂蛋白胆固醇</td><td>1.25</td><td>mmol/L</td><td>&gt;1.04</td></tr>
<tr><td>低密度脂蛋白胆固醇</td><td>2.8</td><td>mmol/L</td><td>&lt;3.4</td></tr>
</tbody>
</table>
</div>
<div class="report-sub">
<div class="report-sub__title">血糖</div>
<table>
<thead><tr><th>项目名称</th><th>结果</th><th>单位</th><th>参考值</th></tr></thead>
<tbody>
<tr><td>空腹血糖</td><td>5.3</td><td>mmol/L</td><td>3.9~6.1</td></tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="modal__footer">
<button class="btn btn-primary" onclick="closeReport()">关闭</button>
</div>
</div>
</div>
</main>
<script>
/* 查看报告弹窗 */
function openReport(name){
document.getElementById('report-title').textContent=name+' · 常规体检报告';
document.getElementById('report-modal').classList.add('open');
}
function closeReport(){
document.getElementById('report-modal').classList.remove('open');
}
/* 侧边栏展开/折叠交互 */
function toggleSubgroup(header){
header.parentElement.classList.toggle('open');
@@ -1,504 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>健康体检 - 体检结果名册 | 健康CQ原型</title>
<style>
*{box-sizing:border-box;margin:0;padding:0;}
body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei',sans-serif;background:#F5F7FA;color:#333;min-width:1280px;}
:root{
--primary:#1890FF;--primary-light:#E6F7FF;--success:#52C41A;--warning:#FAAD14;--danger:#FF4D4F;
--text-primary:#333;--text-secondary:#666;--text-placeholder:#999;--border:#E8E8E8;--background:#F5F7FA;
--font-xs:11px;--font-sm:13px;--font-base:15px;--font-lg:17px;--font-xl:20px;--font-xxl:24px;
--radius-sm:4px;--radius-md:8px;--radius-lg:12px;
--shadow-sm:0 1px 4px rgba(0,0,0,0.08);--shadow-md:0 4px 12px rgba(0,0,0,0.12);
}
/* 顶部导航 */
.top-bar{display:flex;align-items:center;height:56px;background:#001529;padding:0 24px;position:fixed;top:0;left:0;right:0;z-index:100;}
.top-bar__logo{display:flex;align-items:center;gap:8px;color:#fff;font-size:var(--font-lg);font-weight:600;white-space:nowrap;width:240px;flex-shrink:0;}
.top-bar__logo svg{width:28px;height:28px;}
.top-bar__right{display:flex;align-items:center;gap:16px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);}
.top-bar__right .btn-back{color:rgba(255,255,255,0.65);cursor:pointer;display:flex;align-items:center;gap:4px;text-decoration:none;}
.top-bar__right .btn-back:hover{color:#fff;}
.avatar{width:32px;height:32px;border-radius:50%;background:#1890FF;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-sm);cursor:pointer;}
.top-bar__nav{display:flex;align-items:center;gap:4px;flex:1;}
.top-bar__nav a{color:rgba(255,255,255,0.65);text-decoration:none;padding:6px 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);transition:all .2s;}
.top-bar__nav a:hover{color:#fff;background:rgba(255,255,255,0.08);}
.top-bar__nav a.active{color:#fff;background:var(--primary);}
/* 侧边栏 */
.sidebar{position:fixed;top:56px;left:0;bottom:0;width:240px;background:#001529;overflow-y:auto;z-index:90;padding-top:8px;}
.sidebar-menu__title{color:rgba(255,255,255,0.35);font-size:var(--font-xs);padding:16px 24px 8px;text-transform:uppercase;letter-spacing:.5px;}
.sidebar-item{display:flex;align-items:center;gap:8px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;text-decoration:none;}
.sidebar-item:hover{color:#fff;background:rgba(255,255,255,0.06);}
.sidebar-item.active{color:#fff;background:var(--primary);}
.sidebar-subgroup__header{display:flex;align-items:center;gap:6px;padding:10px 24px;color:rgba(255,255,255,0.65);font-size:var(--font-sm);cursor:pointer;transition:all .15s;user-select:none;}
.sidebar-subgroup__header:hover{color:rgba(255,255,255,0.85);background:rgba(255,255,255,0.04);}
.sidebar-subgroup__header .arrow{width:10px;height:10px;transition:transform .2s;flex-shrink:0;}
.sidebar-subgroup__header .arrow path{stroke:rgba(255,255,255,0.45);}
.sidebar-subgroup.open>.sidebar-subgroup__header{color:rgba(255,255,255,0.85);}
.sidebar-subgroup.open>.sidebar-subgroup__header .arrow{transform:rotate(90deg);}
.sidebar-subgroup__body{display:none;padding-left:16px;}
.sidebar-subgroup.open>.sidebar-subgroup__body{display:block;}
.sidebar-subgroup__body .sidebar-item{padding-left:36px;font-size:12px;}
/* 主内容 */
.main{margin-left:240px;margin-top:56px;padding:24px;min-height:calc(100vh - 56px);}
/* 筛选栏 */
.filter-bar{background:#fff;border-radius:var(--radius-md);padding:20px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.filter-item{display:flex;align-items:center;gap:8px;}
.filter-item label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
.filter-input{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;min-width:200px;}
.filter-input:focus{border-color:var(--primary);}
.filter-select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;cursor:pointer;min-width:120px;}
.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:none;transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
.btn-primary{background:var(--primary);color:#fff;}.btn-primary:hover{background:#40a9ff;}
.btn-default{background:#fff;color:var(--text-primary);border:1px solid var(--border);}.btn-default:hover{color:var(--primary);border-color:var(--primary);}
.btn-danger{background:#fff;color:var(--danger);border:1px solid var(--danger);}.btn-danger:hover{background:#fff1f0;}
/* 表格 */
.table-card{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);overflow:hidden;}
.table-card__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);}
.table-card__title{font-size:var(--font-base);font-weight:600;}
.table-card__actions{display:flex;gap:8px;align-items:center;}
.table-card__content{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;}
.table-card__content table{min-width:100%;white-space:nowrap;}
table{width:100%;border-collapse:collapse;}
thead th{background:#FAFAFA;padding:12px 16px;text-align:left;font-size:var(--font-sm);color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;}
tbody td{padding:14px 16px;font-size:var(--font-sm);color:var(--text-primary);border-bottom:1px solid var(--border);white-space:nowrap;}
tbody tr:last-child td{border-bottom:none;}
tbody tr:hover{background:#F8FBFF;}
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:var(--font-xs);}
.tag-blue{background:var(--primary-light);color:var(--primary);}
.tag-green{background:#F6FFED;color:var(--success);}
.tag-orange{background:#FFF7E6;color:var(--warning);}
.tag-red{background:#FFF1F0;color:var(--danger);}
.link{color:var(--primary);cursor:pointer;font-size:var(--font-sm);}.link:hover{color:#40a9ff;}
/* 分页 */
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
/* 弹窗样式 */
.modal-mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:500;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .15s;}
.modal-mask.show{opacity:1;pointer-events:auto;}
.modal{background:#fff;border-radius:var(--radius-lg);width:900px;max-height:85vh;overflow-y:auto;box-shadow:0 8px 40px rgba(0,0,0,0.18);}
.modal__header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--border);}
.modal__header h3{font-size:var(--font-lg);font-weight:600;}
.modal__close{width:32px;height:32px;border:none;background:none;cursor:pointer;font-size:20px;color:var(--text-secondary);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;}
.modal__close:hover{background:#f5f5f5;color:var(--text-primary);}
.modal__body{padding:24px;}
/* 报告详情样式 */
.report-year-selector{display:flex;gap:12px;margin-bottom:20px;align-items:center;}
.report-year-selector label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
.report-year-selector select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);}
.report-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 32px;}
.report-item{display:flex;flex-direction:column;gap:4px;}
.report-item .label{font-size:var(--font-xs);color:var(--text-secondary);}
.report-item .value{font-size:var(--font-sm);color:var(--text-primary);font-weight:500;}
.report-item .value.abnormal{color:var(--danger);}
/* 趋势分析样式 */
.trend-controls{display:flex;gap:16px;margin-bottom:20px;align-items:center;flex-wrap:wrap;}
.trend-controls label{font-size:var(--font-sm);color:var(--text-secondary);white-space:nowrap;}
.trend-controls select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);}
.trend-items{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:20px;}
.trend-item{display:flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;transition:all .2s;}
.trend-item:hover{border-color:var(--primary);background:var(--primary-light);}
.trend-item.active{border-color:var(--primary);background:var(--primary-light);color:var(--primary);}
.trend-item input[type="checkbox"]{cursor:pointer;}
.trend-chart{width:100%;height:400px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fafafa;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);}
.trend-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:16px;font-size:var(--font-sm);}
.trend-legend-item{display:flex;align-items:center;gap:6px;}
.trend-legend-color{width:12px;height:12px;border-radius:2px;}
</style>
</head>
<body>
<!-- 顶部导航 -->
<div class="top-bar">
<div class="top-bar__logo">
<svg viewBox="0 0 28 28" fill="none"><rect width="28" height="28" rx="6" fill="#1890FF"/><path d="M7 14h14M14 7v14" stroke="#fff" stroke-width="2.5" stroke-linecap="round"/></svg>
健康体检
</div>
<nav class="top-bar__nav">
<a href="archive-personal.html">档案</a>
<a href="config-material-notice.html">基础配置</a>
<a href="pre-hospital-scope.html">检前</a>
<a href="mid-appointment-track.html">检中</a>
<a href="post-unit-count.html" class="active">检后</a>
<a href="exception-dirty.html">异常事件</a>
</nav>
<div class="top-bar__right">
<a class="btn-back" href="../../index.html">
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10 3L5 8l5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
返回首页
</a>
<div class="avatar"></div>
<span style="color:rgba(255,255,255,0.65);">系统管理员 ▾</span>
</div>
</div>
<!-- 侧边栏 -->
<aside class="sidebar">
<div class="sidebar-menu__title">检后</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)">
<svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg>
体检情况统计
</div>
<div class="sidebar-subgroup__body">
<a href="post-unit-count.html" class="sidebar-item">单位体检人数统计</a>
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)">
<svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg>
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item active">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
<main class="main">
<!-- 筛选栏 -->
<div class="filter-bar">
<div class="filter-item">
<label>单位</label>
<select class="filter-select">
<option>全部单位</option><option>采油一厂</option><option>采油二厂</option><option>采油三厂</option><option>勘探开发研究院</option>
</select>
</div>
<div class="filter-item">
<label>年份</label>
<select class="filter-select" style="min-width:90px;">
<option>2026年</option><option>2025年</option><option>2024年</option>
</select>
</div>
<div class="filter-item">
<label>结果分类</label>
<select class="filter-select">
<option>全部</option><option>正常</option><option>异常</option><option>重大异常</option>
</select>
</div>
<button class="btn btn-primary">查询</button>
<button class="btn btn-default">重置</button>
</div>
<!-- 操作栏 -->
<div style="display:flex;gap:12px;margin-bottom:16px;">
<button class="btn btn-primary">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M2 10v2h10v-2M7 2v7M4.5 6.5L7 9l2.5-2.5" stroke="#fff" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg>
导出列表数据
</button>
<button class="btn btn-default">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="2" y="2" width="10" height="10" rx="1.5" stroke="currentColor" stroke-width="1.4"/><path d="M4 5h6M4 7.5h4" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/></svg>
查看导出任务
</button>
</div>
<!-- 数据表格 -->
<div class="table-card">
<div class="table-card__header">
<div class="table-card__title">体检结果名册</div>
</div>
<div class="table-card__content">
<table>
<thead>
<tr>
<th>序号</th><th>姓名</th><th>员工编号</th><th>单位</th><th>部门</th><th>体检日期</th><th>结果分类</th><th>主要异常项</th><th>操作</th>
</tr>
</thead>
<tbody>
<tr><td>1</td><td>张伟</td><td>CQ001234</td><td>采油一厂</td><td>生产一队</td><td>2026-03-15</td><td><span class="tag tag-orange">异常</span></td><td>血脂偏高、脂肪肝、血压偏高</td><td><span class="link" onclick="openReportDetail('张伟','CQ001234')">报告详情</span> <span class="link" onclick="openTrendAnalysis('张伟','CQ001234')">趋势分析</span></td></tr>
<tr><td>2</td><td>李明</td><td>CQ002571</td><td>采油二厂</td><td>综合管理部</td><td>2026-03-12</td><td><span class="tag tag-orange">异常</span></td><td>尿酸偏高</td><td><span class="link" onclick="openReportDetail('李明','CQ002571')">报告详情</span> <span class="link" onclick="openTrendAnalysis('李明','CQ002571')">趋势分析</span></td></tr>
<tr><td>3</td><td>王芳</td><td>CQ003388</td><td>勘探开发研究院</td><td>地质研究室</td><td>2026-04-20</td><td><span class="tag tag-green">正常</span></td><td></td><td><span class="link" onclick="openReportDetail('王芳','CQ003388')">报告详情</span> <span class="link" onclick="openTrendAnalysis('王芳','CQ003388')">趋势分析</span></td></tr>
<tr><td>4</td><td>刘洋</td><td>CQ004102</td><td>采油三厂</td><td>生产二队</td><td>2026-02-28</td><td><span class="tag tag-red">重大异常</span></td><td>肺结节、肝功能异常、血糖偏高、心律不齐、甲状腺结节</td><td><span class="link" onclick="openReportDetail('刘洋','CQ004102')">报告详情</span> <span class="link" onclick="openTrendAnalysis('刘洋','CQ004102')">趋势分析</span></td></tr>
<tr><td>5</td><td>陈磊</td><td>CQ006890</td><td>采油一厂</td><td>安全环保部</td><td>2026-03-08</td><td><span class="tag tag-red">重大异常</span></td><td>肺结节、血脂异常、脂肪肝、高血压、颈动脉斑块、前列腺增生、肾囊肿</td><td><span class="link" onclick="openReportDetail('陈磊','CQ006890')">报告详情</span> <span class="link" onclick="openTrendAnalysis('陈磊','CQ006890')">趋势分析</span></td></tr>
<tr><td>6</td><td>孙丽</td><td>CQ007234</td><td>采油二厂</td><td>生产一队</td><td>2026-03-20</td><td><span class="tag tag-green">正常</span></td><td></td><td><span class="link" onclick="openReportDetail('孙丽','CQ007234')">报告详情</span> <span class="link" onclick="openTrendAnalysis('孙丽','CQ007234')">趋势分析</span></td></tr>
</tbody>
</table>
</div>
<div class="pagination">
<span>共 6 条</span>
<button class="page-btn active">1</button>
</div>
</div>
</main>
<!-- 报告详情弹窗 -->
<div class="modal-mask" id="reportDetailModal">
<div class="modal">
<div class="modal__header">
<h3 id="reportDetailTitle">体检报告详情</h3>
<button class="modal__close" onclick="closeModal('reportDetailModal')">×</button>
</div>
<div class="modal__body">
<div class="report-year-selector">
<label>查看年份:</label>
<select class="filter-select" onchange="switchReportYear(this.value)" style="min-width:100px;">
<option value="2026">2026年</option>
<option value="2025">2025年</option>
<option value="2024">2024年</option>
<option value="2023">2023年</option>
</select>
<span style="font-size:var(--font-sm);color:var(--text-secondary);margin-left:8px;" id="reportDateLabel">体检日期:2026-03-15 &nbsp; 体检医院:延安大学附属医院</span>
</div>
<div style="margin-bottom:16px;padding:12px 16px;background:#FAFAFA;border-radius:var(--radius-sm);display:flex;gap:24px;flex-wrap:wrap;">
<span style="font-size:var(--font-sm);"><span style="color:var(--text-secondary);">姓名:</span><strong id="rdName"></strong></span>
<span style="font-size:var(--font-sm);"><span style="color:var(--text-secondary);">员工编号:</span><strong id="rdCode"></strong></span>
<span style="font-size:var(--font-sm);"><span style="color:var(--text-secondary);">结果分类:</span><strong><span class="tag tag-orange" id="rdResult">异常</span></strong></span>
</div>
<!-- 血液检查 -->
<div style="margin-bottom:20px;">
<div style="font-size:var(--font-base);font-weight:600;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid var(--primary);">血液检查</div>
<div class="report-grid">
<div class="report-item"><span class="label">总胆固醇</span><span class="value abnormal">6.8 mmol/L <span style="font-size:10px;background:#FFF1F0;color:var(--danger);padding:1px 4px;border-radius:3px;">↑偏高</span></span></div>
<div class="report-item"><span class="label">甘油三酯</span><span class="value abnormal">3.2 mmol/L <span style="font-size:10px;background:#FFF1F0;color:var(--danger);padding:1px 4px;border-radius:3px;">↑偏高</span></span></div>
<div class="report-item"><span class="label">空腹血糖</span><span class="value">5.4 mmol/L</span></div>
<div class="report-item"><span class="label">尿酸</span><span class="value">388 μmol/L</span></div>
<div class="report-item"><span class="label">谷丙转氨酶</span><span class="value">32 U/L</span></div>
<div class="report-item"><span class="label">肌酐</span><span class="value">88 μmol/L</span></div>
</div>
</div>
<!-- 体格检查 -->
<div style="margin-bottom:20px;">
<div style="font-size:var(--font-base);font-weight:600;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid var(--primary);">体格检查</div>
<div class="report-grid">
<div class="report-item"><span class="label">血压(收缩压)</span><span class="value abnormal">148 mmHg <span style="font-size:10px;background:#FFF1F0;color:var(--danger);padding:1px 4px;border-radius:3px;">↑偏高</span></span></div>
<div class="report-item"><span class="label">血压(舒张压)</span><span class="value">88 mmHg</span></div>
<div class="report-item"><span class="label">身高</span><span class="value">172 cm</span></div>
<div class="report-item"><span class="label">体重</span><span class="value">82 kg</span></div>
<div class="report-item"><span class="label">BMI</span><span class="value abnormal">27.7 <span style="font-size:10px;background:#FFF7E6;color:var(--warning);padding:1px 4px;border-radius:3px;">超重</span></span></div>
<div class="report-item"><span class="label">腰围</span><span class="value">92 cm</span></div>
</div>
</div>
<!-- 影像学检查 -->
<div style="margin-bottom:20px;">
<div style="font-size:var(--font-base);font-weight:600;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid var(--primary);">影像学检查</div>
<div class="report-grid">
<div class="report-item"><span class="label">胸部X光</span><span class="value">未见明显异常</span></div>
<div class="report-item"><span class="label">腹部超声</span><span class="value abnormal">脂肪肝(轻度)</span></div>
<div class="report-item"><span class="label">颈动脉超声</span><span class="value">内膜增厚</span></div>
<div class="report-item"><span class="label">心电图</span><span class="value">正常心电图</span></div>
</div>
</div>
<!-- 医生建议 -->
<div style="background:#F6FFED;border:1px solid #B7EB8F;border-radius:var(--radius-sm);padding:12px 16px;font-size:var(--font-sm);color:#389E0D;line-height:1.7;">
<strong>医生建议:</strong>血脂偏高,建议低脂饮食,减少油脂摄入;轻度脂肪肝,注意控制体重;血压偏高,建议减少盐分摄入,定期监测。如有不适,请及时就医。
</div>
</div>
</div>
</div>
<!-- 趋势分析弹窗 -->
<div class="modal-mask" id="trendModal">
<div class="modal" style="width:960px;">
<div class="modal__header">
<h3 id="trendTitle">体检趋势分析</h3>
<button class="modal__close" onclick="closeModal('trendModal')">×</button>
</div>
<div class="modal__body">
<div class="trend-controls">
<label>年份范围:</label>
<select class="filter-select" style="min-width:90px;" id="trendYearFrom">
<option>2022年</option><option>2023年</option><option selected>2024年</option><option>2025年</option>
</select>
<span style="font-size:var(--font-sm);color:var(--text-secondary);"></span>
<select class="filter-select" style="min-width:90px;" id="trendYearTo">
<option>2023年</option><option>2024年</option><option>2025年</option><option selected>2026年</option>
</select>
<label style="margin-left:8px;">项目分类:</label>
<select class="filter-select" style="min-width:120px;" onchange="filterTrendItems(this.value)">
<option value="all">全部</option>
<option value="blood">血液检查</option>
<option value="physical">体格检查</option>
<option value="image">影像学检查</option>
</select>
<button class="btn btn-primary" style="margin-left:8px;" onclick="renderTrendChart()">更新图表</button>
</div>
<div style="font-size:var(--font-sm);color:var(--text-secondary);margin-bottom:10px;">勾选指标项查看对应折线变化(最多同时对比6项):</div>
<div class="trend-items" id="trendItemList">
<label class="trend-item active" data-key="cholesterol" data-category="blood"><input type="checkbox" checked onchange="toggleTrendItem(this)">总胆固醇</label>
<label class="trend-item active" data-key="triglyceride" data-category="blood"><input type="checkbox" checked onchange="toggleTrendItem(this)">甘油三酯</label>
<label class="trend-item" data-key="glucose" data-category="blood"><input type="checkbox" onchange="toggleTrendItem(this)">空腹血糖</label>
<label class="trend-item" data-key="uricacid" data-category="blood"><input type="checkbox" onchange="toggleTrendItem(this)">尿酸</label>
<label class="trend-item" data-key="alt" data-category="blood"><input type="checkbox" onchange="toggleTrendItem(this)">谷丙转氨酶</label>
<label class="trend-item" data-key="sbp" data-category="physical"><input type="checkbox" onchange="toggleTrendItem(this)">收缩压</label>
<label class="trend-item" data-key="dbp" data-category="physical"><input type="checkbox" onchange="toggleTrendItem(this)">舒张压</label>
<label class="trend-item" data-key="bmi" data-category="physical"><input type="checkbox" onchange="toggleTrendItem(this)">BMI</label>
<label class="trend-item" data-key="waist" data-category="physical"><input type="checkbox" onchange="toggleTrendItem(this)">腰围</label>
</div>
<div class="trend-chart" id="trendChartArea">
<!-- SVG折线图将由JS渲染 -->
</div>
<div class="trend-legend" id="trendLegend"></div>
<div style="margin-top:16px;font-size:var(--font-xs);color:var(--text-placeholder);">注:图表数据为原型演示数据,不代表真实体检结果。纵轴为各指标标准化百分比(0=正常下限,100=正常上限)。</div>
</div>
</div>
</div>
<script>
/* 侧边栏展开/折叠交互 */
function toggleSubgroup(header){
header.parentElement.classList.toggle('open');
}
/* 页面加载时自动展开当前页面所在的子分组 */
(function(){
var active=document.querySelector('.sidebar-item.active');
if(!active)return;
var sub=active.closest('.sidebar-subgroup');
if(sub)sub.classList.add('open');
})();
/* ========== 弹窗通用 ========== */
function closeModal(id){
document.getElementById(id).classList.remove('show');
}
// 点击遮罩关闭
document.querySelectorAll('.modal-mask').forEach(function(mask){
mask.addEventListener('click',function(e){if(e.target===mask)mask.classList.remove('show');});
});
/* ========== 报告详情 ========== */
function openReportDetail(name, code){
document.getElementById('reportDetailTitle').textContent = name + ' 的体检报告详情';
document.getElementById('rdName').textContent = name;
document.getElementById('rdCode').textContent = code;
document.getElementById('reportDetailModal').classList.add('show');
}
function switchReportYear(year){
var map={
'2026':'体检日期:2026-03-15 &nbsp; 体检医院:延安大学附属医院',
'2025':'体检日期:2025-04-10 &nbsp; 体检医院:宁夏宝石花医院',
'2024':'体检日期:2024-03-22 &nbsp; 体检医院:延安大学附属医院',
'2023':'体检日期:2023-05-08 &nbsp; 体检医院:宁夏宝石花医院'
};
document.getElementById('reportDateLabel').innerHTML = map[year]||'';
}
/* ========== 趋势分析 ========== */
// 各指标模拟数据(2022-2026,标准化百分比,100=正常上限,负值=低于下限)
var TREND_DATA = {
cholesterol: { label:'总胆固醇', unit:'mmol/L', color:'#1890FF', values:[72,85,98,108,120] },
triglyceride:{ label:'甘油三酯', unit:'mmol/L', color:'#FF4D4F', values:[55,68,85,105,130] },
glucose: { label:'空腹血糖', unit:'mmol/L', color:'#52C41A', values:[60,62,65,70,75] },
uricacid: { label:'尿酸', unit:'μmol/L', color:'#FAAD14', values:[50,55,60,70,80] },
alt: { label:'谷丙转氨酶',unit:'U/L', color:'#722ED1', values:[30,35,40,50,45] },
sbp: { label:'收缩压', unit:'mmHg', color:'#EB2F96', values:[80,90,100,115,130]},
dbp: { label:'舒张压', unit:'mmHg', color:'#13C2C2', values:[60,65,70,78,82] },
bmi: { label:'BMI', unit:'', color:'#FA8C16', values:[85,90,95,100,107]},
waist: { label:'腰围', unit:'cm', color:'#A0D911', values:[70,75,80,88,95] }
};
var YEARS = ['2022','2023','2024','2025','2026'];
var activeKeys = ['cholesterol','triglyceride'];
function openTrendAnalysis(name, code){
document.getElementById('trendTitle').textContent = name + ' 的体检趋势分析';
renderTrendChart();
document.getElementById('trendModal').classList.add('show');
}
function toggleTrendItem(checkbox){
var label = checkbox.closest('.trend-item');
var key = label.getAttribute('data-key');
if(checkbox.checked){
if(activeKeys.length>=6){checkbox.checked=false;return;}
label.classList.add('active');
if(!activeKeys.includes(key))activeKeys.push(key);
} else {
label.classList.remove('active');
activeKeys = activeKeys.filter(function(k){return k!==key;});
}
renderTrendChart();
}
function filterTrendItems(category){
document.querySelectorAll('.trend-item').forEach(function(item){
if(category==='all'||item.getAttribute('data-category')===category){
item.style.display='';
} else {
item.style.display='none';
}
});
}
function renderTrendChart(){
var W=860, H=360, padL=50, padR=20, padT=30, padB=40;
var chartW=W-padL-padR, chartH=H-padT-padB;
var years=YEARS;
var keys=activeKeys.filter(function(k){return TREND_DATA[k];});
if(!keys.length){
document.getElementById('trendChartArea').innerHTML='<span style="color:var(--text-placeholder);">请勾选至少一个指标项</span>';
document.getElementById('trendLegend').innerHTML='';
return;
}
// X轴
var xStep = chartW/(years.length-1);
// Y轴范围 0~150
var yMin=0, yMax=150;
function xPos(i){ return padL + i*xStep; }
function yPos(v){ return padT + chartH - (v-yMin)/(yMax-yMin)*chartH; }
var svgParts = ['<svg xmlns="http://www.w3.org/2000/svg" width="'+W+'" height="'+H+'" style="overflow:visible;">'];
// 网格线
svgParts.push('<g stroke="#E8E8E8" stroke-width="1">');
for(var g=0;g<=5;g++){
var gv=yMin+g*(yMax-yMin)/5;
var gy=yPos(gv);
svgParts.push('<line x1="'+padL+'" y1="'+gy+'" x2="'+(W-padR)+'" y2="'+gy+'"/>');
svgParts.push('<text x="'+(padL-6)+'" y="'+(gy+4)+'" text-anchor="end" font-size="11" fill="#999">'+Math.round(gv)+'</text>');
}
svgParts.push('</g>');
// 参考线:100% = 正常上限
var refY=yPos(100);
svgParts.push('<line x1="'+padL+'" y1="'+refY+'" x2="'+(W-padR)+'" y2="'+refY+'" stroke="#FAAD14" stroke-width="1" stroke-dasharray="6,3"/>');
svgParts.push('<text x="'+(W-padR+4)+'" y="'+(refY+4)+'" font-size="10" fill="#FAAD14">正常上限</text>');
// X轴标签
svgParts.push('<g font-size="12" fill="#666" text-anchor="middle">');
years.forEach(function(y,i){ svgParts.push('<text x="'+xPos(i)+'" y="'+(H-padB+18)+'">'+y+'</text>'); });
svgParts.push('</g>');
// 折线
keys.forEach(function(key){
var d=TREND_DATA[key];
var pts=d.values.map(function(v,i){return xPos(i)+','+yPos(v);}).join(' ');
svgParts.push('<polyline points="'+pts+'" fill="none" stroke="'+d.color+'" stroke-width="2.5" stroke-linejoin="round"/>');
d.values.forEach(function(v,i){
svgParts.push('<circle cx="'+xPos(i)+'" cy="'+yPos(v)+'" r="4" fill="'+d.color+'" stroke="#fff" stroke-width="1.5"/>');
if(v>100){
svgParts.push('<text x="'+xPos(i)+'" y="'+(yPos(v)-8)+'" text-anchor="middle" font-size="10" fill="'+d.color+'">'+Math.round(v)+'</text>');
}
});
});
svgParts.push('</svg>');
document.getElementById('trendChartArea').innerHTML=svgParts.join('');
// 图例
var legend='';
keys.forEach(function(key){
var d=TREND_DATA[key];
var unitStr = d.unit ? ' (' + d.unit + ')' : '';
legend+='<div class="trend-legend-item"><div class="trend-legend-color" style="background:'+d.color+'"></div>'+d.label+unitStr+'</div>';
});
document.getElementById('trendLegend').innerHTML=legend;
}
</script>
</body>
</html>
@@ -77,6 +77,25 @@
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
/* 表格复选框 */
.table-check{width:16px;height:16px;cursor:pointer;accent-color:var(--primary);vertical-align:middle;}
/* 弹窗与表单 */
.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:999;display:none;align-items:center;justify-content:center;}
.modal-overlay.open{display:flex;}
.modal{background:#fff;border-radius:var(--radius-md);box-shadow:0 4px 16px rgba(0,0,0,0.15);width:560px;max-height:85vh;display:flex;flex-direction:column;}
.modal__header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--border);flex-shrink:0;}
.modal__title{font-size:var(--font-lg);font-weight:600;}
.modal__close{width:32px;height:32px;border-radius:50%;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);font-size:18px;}
.modal__close:hover{background:#F5F5F5;}
.modal__body{flex:1;overflow-y:auto;padding:24px;}
.modal__footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 24px;border-top:1px solid var(--border);flex-shrink:0;}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;}
.form-item{margin-bottom:16px;}
.form-label{font-size:var(--font-sm);color:var(--text-secondary);margin-bottom:6px;display:flex;align-items:center;gap:4px;font-weight:500;}
.form-label .required{color:var(--danger);}
.form-input{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff;}
.form-input:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(24,144,255,0.2);}
.form-select{width:100%;height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);color:var(--text-primary);outline:none;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 10px center;appearance:none;cursor:pointer;}
</style>
</head>
<body>
@@ -118,7 +137,7 @@
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
@@ -129,13 +148,10 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item active">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -166,37 +182,119 @@
<button class="btn btn-default">重置</button>
</div>
<!-- 操作栏 -->
<div style="display:flex;gap:12px;margin-bottom:16px;">
<button class="btn btn-primary" onclick="openAddModal()">新增</button>
<button class="btn btn-default">批量删除</button>
</div>
<!-- 数据表格 -->
<div class="table-card">
<div class="table-card__header">
<div class="table-card__title">体检报告未匹配项目</div>
<div style="display:flex;gap:8px;">
<button class="btn btn-primary">新增</button>
<button class="btn btn-default">批量删除</button>
</div>
</div>
<div class="table-card__content">
<table>
<thead>
<tr>
<th>序号</th><th>医院名称</th><th>体检项目编码</th><th>体检项目名称</th><th>体检组合编码</th><th>体检组合名称</th><th>创建时间</th><th>操作</th>
<th style="width:40px;"><input type="checkbox" class="table-check" onclick="toggleAll(this)"></th><th>序号</th><th>医院名称</th><th>体检项目编码</th><th>体检项目名称</th><th>体检组合编码</th><th>体检组合名称</th><th>创建时间</th><th>体检年份</th><th>操作</th>
</tr>
</thead>
<tbody>
<tr><td>1</td><td>庆阳医院</td><td>fk00045</td><td>宫体</td><td>fk00001</td><td>妇科检查</td><td>2026-05-07 02:06:00</td><td><span class="link">更新体检报告</span></td></tr>
<tr><td>2</td><td>庆阳医院</td><td>TYS0000129</td><td>白细胞酯酶</td><td>TYS00012</td><td>阴道微生态评价</td><td>2026-05-07 02:06:00</td><td><span class="link">更新体检报告</span></td></tr>
<tbody id="unmatched-tbody">
<tr><td><input type="checkbox" class="table-check row-check"></td><td>1</td><td>庆阳医院</td><td>fk00045</td><td>宫体</td><td>fk00001</td><td>妇科检查</td><td>2026-05-07 02:06:00</td><td>2026</td><td><span class="link">更新体检报告</span></td></tr>
<tr><td><input type="checkbox" class="table-check row-check"></td><td>2</td><td>庆阳医院</td><td>TYS0000129</td><td>白细胞酯酶</td><td>TYS00012</td><td>阴道微生态评价</td><td>2026-05-07 02:06:00</td><td>2026</td><td><span class="link">更新体检报告</span></td></tr>
</tbody>
</table>
</div>
<div class="pagination">
<span>共 2 条</span>
<span id="page-total">共 2 条</span>
<button class="page-btn active">1</button>
</div>
</div>
<!-- 新增未匹配项目弹窗 -->
<div class="modal-overlay" id="add-modal" onclick="if(event.target===this)closeAddModal()">
<div class="modal">
<div class="modal__header">
<div class="modal__title">新增未匹配项目</div>
<button class="modal__close" onclick="closeAddModal()"></button>
</div>
<div class="modal__body">
<div class="form-grid">
<div class="form-item">
<div class="form-label"><span class="required">*</span> 体检年份</div>
<select class="form-select" id="f-year"><option>2026</option><option>2025</option><option>2024</option></select>
</div>
<div class="form-item">
<div class="form-label"><span class="required">*</span> 医院名称</div>
<select class="form-select" id="f-hospital"><option>请选择</option><option>庆阳医院</option><option>泾河医院</option><option>CQ总医院</option></select>
</div>
<div class="form-item">
<div class="form-label"><span class="required">*</span> 体检项目编码</div>
<input class="form-input" id="f-item-code" type="text" placeholder="请输入">
</div>
<div class="form-item">
<div class="form-label"><span class="required">*</span> 体检项目名称</div>
<input class="form-input" id="f-item-name" type="text" placeholder="请输入">
</div>
<div class="form-item">
<div class="form-label"><span class="required">*</span> 体检组合编码</div>
<input class="form-input" id="f-combo-code" type="text" placeholder="请输入">
</div>
<div class="form-item">
<div class="form-label"><span class="required">*</span> 体检组合名称</div>
<input class="form-input" id="f-combo-name" type="text" placeholder="请输入">
</div>
</div>
</div>
<div class="modal__footer">
<button class="btn btn-default" onclick="closeAddModal()">取消</button>
<button class="btn btn-primary" onclick="saveAdd()">确定</button>
</div>
</div>
</div>
</main>
<script>
/* 表头全选/取消全选行复选框 */
function toggleAll(el){
document.querySelectorAll('.row-check').forEach(function(c){c.checked=el.checked;});
}
/* 新增未匹配项目弹窗 */
function openAddModal(){
document.getElementById('add-modal').classList.add('open');
}
function closeAddModal(){
document.getElementById('add-modal').classList.remove('open');
}
/* 确定新增:必填校验,通过后插入新行并刷新总条数 */
function saveAdd(){
var year=document.getElementById('f-year');
var hospital=document.getElementById('f-hospital');
var codes=['f-item-code','f-item-name','f-combo-code','f-combo-name'].map(function(id){return document.getElementById(id);});
var invalid=false;
var pass;
pass=hospital.value!=='请选择';
hospital.style.borderColor=pass?'':'var(--danger)';
if(!pass)invalid=true;
codes.forEach(function(e){
pass=e.value.trim()!=='';
e.style.borderColor=pass?'':'var(--danger)';
if(!pass)invalid=true;
});
if(invalid)return;
var t=document.getElementById('unmatched-tbody');
var seq=t.rows.length+1;
var d=new Date();
function pad(n){return String(n).padStart(2,'0');}
var ts=d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate())+' '+pad(d.getHours())+':'+pad(d.getMinutes())+':'+pad(d.getSeconds());
var tr=document.createElement('tr');
tr.innerHTML='<td><input type="checkbox" class="table-check row-check"></td><td>'+seq+'</td><td>'+hospital.value+'</td><td>'+codes[0].value.trim()+'</td><td>'+codes[1].value.trim()+'</td><td>'+codes[2].value.trim()+'</td><td>'+codes[3].value.trim()+'</td><td>'+ts+'</td><td>'+year.value+'</td><td><span class="link">更新体检报告</span></td>';
t.appendChild(tr);
document.getElementById('page-total').textContent='共 '+t.rows.length+' 条';
closeAddModal();
}
/* 侧边栏展开/折叠交互 */
function toggleSubgroup(header){
header.parentElement.classList.toggle('open');
@@ -118,7 +118,7 @@
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item active">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
@@ -129,25 +129,32 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
<main class="main">
<!-- 筛选栏 -->
<div class="filter-bar">
<div class="filter-item">
<label>体检年份:</label>
<select class="filter-select">
<option>2024</option><option>2025</option><option selected>2026</option><option>2027</option>
</select>
</div>
<div class="filter-item">
<label>标准化分类:</label>
<select class="filter-select">
<option>请选择</option>
</select>
</div>
<div class="filter-item">
<label>标准化基本项名称:</label>
<input class="filter-input" type="text" placeholder="请输入" style="width:180px;min-width:unset;">
</div>
<button class="btn btn-primary">查询</button>
<button class="btn btn-default">重置</button>
</div>
+111 -9
View File
@@ -83,6 +83,22 @@
.pagination span{font-size:var(--font-sm);color:var(--text-secondary);}
.page-btn{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;cursor:pointer;font-size:var(--font-sm);display:inline-flex;align-items:center;justify-content:center;transition:all .2s;}
.page-btn:hover,.page-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);}
/* 三级单位tab下才显示的部门列 */
.col-dept{display:none;}
body.level-3 .col-dept{display:table-cell;}
/* 体检医院tab下才显示的医院筛选 */
.filter-hospital{display:none;}
body.level-hospital .filter-hospital{display:flex;}
/* 分类统计弹窗 */
.modal-mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:200;display:flex;align-items:center;justify-content:center;}
.modal{background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-md);width:440px;max-width:90vw;}
.modal__header{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--border);}
.modal__title{font-size:var(--font-base);font-weight:600;}
.modal__close{font-size:22px;color:var(--text-placeholder);cursor:pointer;line-height:1;}
.modal__close:hover{color:var(--text-secondary);}
.modal__body{padding:8px 24px;max-height:60vh;overflow-y:auto;}
.modal__footer{display:flex;justify-content:flex-end;padding:12px 24px;border-top:1px solid var(--border);}
.cell-link{margin-left:8px;}
</style>
</head>
<body>
@@ -124,7 +140,7 @@
<a href="post-hospital-count.html" class="sidebar-item">医院体检人数统计</a>
<a href="post-doctor-count.html" class="sidebar-item">医生检查人数统计</a>
<a href="post-item-stat.html" class="sidebar-item">医院体检项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查项目统计</a>
<a href="post-cancer-screening.html" class="sidebar-item">防癌筛查人数统计</a>
<a href="post-standard-stat.html" class="sidebar-item">系统标准化项目统计</a>
<a href="post-contracted-hospital.html" class="sidebar-item">签约医院人数统计</a>
</div>
@@ -135,13 +151,10 @@
体检报告信息
</div>
<div class="sidebar-subgroup__body">
<a href="post-report-employee.html" class="sidebar-item">员工体检报告</a>
<a href="post-report-employee.html" class="sidebar-item">常规体检报告</a>
<a href="post-report-unmatched.html" class="sidebar-item">体检报告未匹配项目</a>
<a href="post-report-roster.html" class="sidebar-item">体检结果名册</a>
</div>
</div>
<a href="pre-special-gastro.html" class="sidebar-item">胃肠镜体检人员配置</a>
<a href="pre-unit-expected.html" class="sidebar-item">签约单位应检人数</a>
</aside>
<!-- 主内容 -->
@@ -150,16 +163,29 @@
<div class="unit-level-tab">
<div class="unit-level-tab__item active" onclick="switchUnitLevel(this)">二级单位</div>
<div class="unit-level-tab__item" onclick="switchUnitLevel(this)">三级单位</div>
<div class="unit-level-tab__item" onclick="switchUnitLevel(this)">体检医院</div>
</div>
<!-- 筛选栏 -->
<div class="filter-bar">
<div class="filter-item">
<label>体检年份:</label>
<select class="filter-select">
<option>2024</option><option>2025</option><option selected>2026</option><option>2027</option>
</select>
</div>
<div class="filter-item">
<label>单位:</label>
<select class="filter-select">
<option>请选择</option><option>第一采油厂</option><option>第二采油厂</option><option>第三采油厂</option>
</select>
</div>
<div class="filter-item filter-hospital">
<label>医院:</label>
<select class="filter-select">
<option>请选择</option><option>泾河医院</option><option>庆阳医院</option><option>延安医院</option><option>CQ总医院</option>
</select>
</div>
</div>
<!-- 操作栏 -->
@@ -175,7 +201,7 @@
</div>
<!-- 数据表格 -->
<div class="table-card">
<div class="table-card" id="table-unit">
<div class="table-card__header">
<div class="table-card__title">单位体检人数统计</div>
</div>
@@ -186,6 +212,7 @@
<tr>
<th rowspan="2">序号</th>
<th rowspan="2">单位</th>
<th rowspan="2" class="col-dept">部门</th>
<th rowspan="2">应检人数</th>
<th rowspan="2">已选项目人数</th>
<th colspan="3" style="text-align:center;">已预约情况</th>
@@ -200,8 +227,8 @@
</tr>
</thead>
<tbody>
<tr><td>1</td><td>第一采油厂</td><td>8000</td><td>5000</td><td>4000</td><td>3000</td><td>1000</td><td>1000</td><td>500</td><td>2025</td></tr>
<tr><td>2</td><td>第二采油厂</td><td>8000</td><td>5000</td><td>4000</td><td>3000</td><td>1000</td><td>1000</td><td>500</td><td>2025</td></tr>
<tr><td>1</td><td>第一采油厂</td><td class="col-dept">采油作业一区</td><td>8000</td><td>5000</td><td>4000</td><td>3000</td><td>1000</td><td>1000</td><td>500</td><td>2025</td></tr>
<tr><td>2</td><td>第二采油厂</td><td class="col-dept">采油作业二区</td><td>8000</td><td>5000</td><td>4000</td><td>3000</td><td>1000</td><td>1000</td><td>500</td><td>2025</td></tr>
</tbody>
</table>
</div>
@@ -210,15 +237,90 @@
<button class="page-btn active">1</button>
</div>
</div>
<!-- 数据表格:体检医院维度 -->
<div class="table-card" id="table-hospital" style="display:none;">
<div class="table-card__header">
<div class="table-card__title">体检医院人数统计</div>
</div>
<div class="table-card__content">
<table>
<thead>
<!-- 按体检医院维度统计 -->
<tr>
<th>医院名称</th><th>单位</th><th>已选项目人数</th><th>已预约人数</th><th>已参检人数</th><th>未检人数</th><th>未预约人数</th><th>大病人数</th><th>体检年份</th>
</tr>
</thead>
<tbody>
<tr><td>泾河医院</td><td>第一采油厂</td><td>5000 <span class="link cell-link" onclick="showAgeStat('已选项目人数')">查看分类统计</span></td><td>4000 <span class="link cell-link" onclick="showAgeStat('已预约人数')">查看分类统计</span></td><td>3000 <span class="link cell-link" onclick="showAgeStat('已参检人数')">查看分类统计</span></td><td>1000 <span class="link cell-link" onclick="showAgeStat('未检人数')">查看分类统计</span></td><td>1000 <span class="link cell-link" onclick="showAgeStat('未预约人数')">查看分类统计</span></td><td>500</td><td>2025</td></tr>
<tr><td>庆阳医院</td><td>第二采油厂</td><td>5000 <span class="link cell-link" onclick="showAgeStat('已选项目人数')">查看分类统计</span></td><td>4000 <span class="link cell-link" onclick="showAgeStat('已预约人数')">查看分类统计</span></td><td>3000 <span class="link cell-link" onclick="showAgeStat('已参检人数')">查看分类统计</span></td><td>1000 <span class="link cell-link" onclick="showAgeStat('未检人数')">查看分类统计</span></td><td>1000 <span class="link cell-link" onclick="showAgeStat('未预约人数')">查看分类统计</span></td><td>500</td><td>2025</td></tr>
</tbody>
</table>
</div>
<div class="pagination">
<span>共 2 条</span>
<button class="page-btn active">1</button>
</div>
</div>
<!-- 分类统计弹窗 -->
<div class="modal-mask" id="age-stat-modal" style="display:none;">
<div class="modal">
<div class="modal__header">
<div class="modal__title" id="age-stat-title">分类统计</div>
<span class="modal__close" onclick="hideAgeStat()">×</span>
</div>
<div class="modal__body">
<table>
<thead>
<tr><th>年龄分类</th><th>体检额度</th><th>人数</th></tr>
</thead>
<tbody id="age-stat-body"></tbody>
</table>
</div>
<div class="modal__footer">
<button class="btn btn-default" onclick="hideAgeStat()">关闭</button>
</div>
</div>
</div>
</main>
<script>
/* 单位级别TAB切换 */
/* 单位级别TAB切换:三级单位显示部门列;体检医院tab切换到按医院统计的表格并显示医院筛选 */
function switchUnitLevel(el){
var items=el.parentElement.querySelectorAll('.unit-level-tab__item');
items.forEach(function(item){item.classList.remove('active');});
el.classList.add('active');
var tab=el.textContent.trim();
document.body.classList.toggle('level-3', tab==='三级单位');
document.body.classList.toggle('level-hospital', tab==='体检医院');
document.getElementById('table-unit').style.display = (tab==='体检医院') ? 'none' : '';
document.getElementById('table-hospital').style.display = (tab==='体检医院') ? '' : 'none';
}
/* 分类统计弹窗:各人数列的年龄分类示例数据(体检额度单位:元) */
var AGE_STAT_DATA={
'已选项目人数':[['35岁及以下',600,1200],['36-45岁',800,1500],['46-55岁',1000,1300],['56岁及以上',1200,1000]],
'已预约人数':[['35岁及以下',600,900],['36-45岁',800,1300],['46-55岁',1000,1100],['56岁及以上',1200,700]],
'已参检人数':[['35岁及以下',600,700],['36-45岁',800,950],['46-55岁',1000,850],['56岁及以上',1200,500]],
'未检人数':[['35岁及以下',600,200],['36-45岁',800,350],['46-55岁',1000,250],['56岁及以上',1200,200]],
'未预约人数':[['35岁及以下',600,300],['36-45岁',800,300],['46-55岁',1000,200],['56岁及以上',1200,200]]
};
function showAgeStat(colName){
var rows=AGE_STAT_DATA[colName]||[];
var total=0;
var html='';
rows.forEach(function(r){
total+=r[2];
html+='<tr><td>'+r[0]+'</td><td>'+r[1]+'元</td><td>'+r[2]+'</td></tr>';
});
html+='<tr style="font-weight:600;"><td colspan="2">合计</td><td>'+total+'</td></tr>';
document.getElementById('age-stat-title').textContent='「'+colName+'」年龄分类统计';
document.getElementById('age-stat-body').innerHTML=html;
document.getElementById('age-stat-modal').style.display='flex';
}
function hideAgeStat(){
document.getElementById('age-stat-modal').style.display='none';
}
/* 侧边栏展开/折叠交互 */
function toggleSubgroup(header){
@@ -159,6 +159,17 @@
<!-- 侧边栏 -->
<aside class="sidebar">
<div class="sidebar-menu__title">检前</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)">
<svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg>
胃肠镜预选配置
</div>
<div class="sidebar-subgroup__body">
<a href="pre-gastro-plan.html" class="sidebar-item">单位预选计划</a>
<a href="pre-gastro-employee.html" class="sidebar-item">员工预选信息</a>
<a href="pre-gastro-stat.html" class="sidebar-item">预选信息统计</a>
</div>
</div>
<a href="pre-hospital-scope.html" class="sidebar-item">医院承检范围配置</a>
<a href="pre-plan.html" class="sidebar-item">体检计划管理</a>
<div class="sidebar-subgroup">
@@ -98,6 +98,17 @@
<!-- 侧边栏 -->
<aside class="sidebar">
<div class="sidebar-menu__title">检前</div>
<div class="sidebar-subgroup">
<div class="sidebar-subgroup__header" onclick="toggleSubgroup(this)">
<svg class="arrow" viewBox="0 0 12 12"><path d="M4 2l4 4-4 4" fill="none" stroke-width="1.5" stroke-linecap="round"/></svg>
胃肠镜预选配置
</div>
<div class="sidebar-subgroup__body">
<a href="pre-gastro-plan.html" class="sidebar-item">单位预选计划</a>
<a href="pre-gastro-employee.html" class="sidebar-item">员工预选信息</a>
<a href="pre-gastro-stat.html" class="sidebar-item">预选信息统计</a>
</div>
</div>
<a href="pre-hospital-scope.html" class="sidebar-item">医院承检范围配置</a>
<a href="pre-plan.html" class="sidebar-item">体检计划管理</a>
<div class="sidebar-subgroup">