+
@@ -404,22 +422,145 @@ function renderEcgChart(){
c.innerHTML='
';
}
document.getElementById('ecgDetailModal').addEventListener('click',function(e){if(e.target===this)this.classList.remove('show');});
-// 查看问卷弹窗
-var surveyAnswers=[
- {cat:'饮食习惯',desc:'今天是否按时吃早餐?',answer:'是'},
- {cat:'饮食习惯',desc:'今天饮水量是否达到1500ml?',answer:'是'},
- {cat:'运动锻炼',desc:'今天是否进行了30分钟以上运动?',answer:'否'},
- {cat:'睡眠质量',desc:'昨晚睡眠时间是否达到7小时?',answer:'是'},
- {cat:'心理状态',desc:'今天是否感到焦虑或压力过大?',answer:'否'}
+
+/* ===== 健康排查 ===== */
+/* 活动数据 */
+var hcActivities = [
+ {id:1, name:'2026年上半年员工健康排查', org:'能源集团', dept:'人力资源部', dateFrom:'2026-01-01', dateTo:'2026-03-31', surveys:['健康记录问卷','职业健康排查问卷'], attended:true, attendTime:'2026-03-05 09:32'},
+ {id:2, name:'2026年Q2心理健康专项排查', org:'能源集团', dept:'安全环保部', dateFrom:'2026-04-01', dateTo:'2026-06-30', surveys:['心理健康评估问卷'], attended:true, attendTime:'2026-04-10 14:20'},
+ {id:3, name:'2026年Q3职业健康排查', org:'能源集团', dept:'安全环保部', dateFrom:'2026-07-01', dateTo:'2026-09-30', surveys:['职业健康排查问卷','健康记录问卷'], attended:false, attendTime:''},
+ {id:4, name:'新员工入职健康基线调查', org:'能源集团', dept:'人力资源部', dateFrom:'2026-06-01', dateTo:'2026-12-31', surveys:['新员工健康基线问卷'], attended:true, attendTime:'2026-06-05 08:50'},
+ {id:5, name:'慢病患者季度随访', org:'能源集团', dept:'工会', dateFrom:'2026-04-01', dateTo:'2026-06-30', surveys:['慢病管理随访问卷'], attended:false, attendTime:''}
];
-function openSurveyModal(time){
- document.getElementById('surveyTime').textContent=time;
- var html='';
- surveyAnswers.forEach(function(s){html+='
| '+s.cat+' | '+s.desc+' | '+s.answer+' |
';});
- document.getElementById('surveyTbody').innerHTML=html;
+
+/* 问卷填写模拟数据 */
+var hcSurveyAnswers = {
+ 1: [
+ {surveyName:'健康记录问卷', questions:[
+ {q:'今天是否按时吃早餐?', type:'radio', opts:['是','否'], answer:'是'},
+ {q:'今天饮水量是否达到1500ml?', type:'radio', opts:['是','否'], answer:'否'},
+ {q:'今天是否进行了30分钟以上运动?', type:'radio', opts:['是','否'], answer:'是'},
+ {q:'昨晚睡眠时间是否达到7小时?', type:'radio', opts:['是','否'], answer:'是'},
+ {q:'今天是否感到焦虑或压力过大?', type:'radio', opts:['是','否'], answer:'否'}
+ ]},
+ {surveyName:'职业健康排查问卷', questions:[
+ {q:'今天工作中是否接触有害物质?', type:'radio', opts:['是','否'], answer:'否'},
+ {q:'今天是否佩戴了防护用品?', type:'radio', opts:['是','否'], answer:'是'},
+ {q:'本周是否参加了安全培训?', type:'radio', opts:['是','否'], answer:'是'}
+ ]}
+ ],
+ 2: [
+ {surveyName:'心理健康评估问卷', questions:[
+ {q:'最近两周是否经常感到情绪低落?', type:'radio', opts:['经常','偶尔','很少','从不'], answer:'偶尔'},
+ {q:'最近是否对以前感兴趣的事情失去兴趣?', type:'radio', opts:['是','否'], answer:'否'},
+ {q:'最近是否感到睡眠不足?', type:'radio', opts:['是','否'], answer:'是'},
+ {q:'请描述您最近的心理状态', type:'text', opts:[], answer:'工作压力较大,但整体可控'}
+ ]}
+ ],
+ 4: [
+ {surveyName:'新员工健康基线问卷', questions:[
+ {q:'您是否有既往病史?', type:'radio', opts:['有','无'], answer:'无'},
+ {q:'您是否有药物过敏史?', type:'radio', opts:['有','无'], answer:'无'},
+ {q:'您最近一次体检是什么时候?', type:'radio', opts:['3个月内','半年内','一年内','一年以上'], answer:'半年内'},
+ {q:'您的BMI指数是否正常?', type:'radio', opts:['是','否'], answer:'是'}
+ ]}
+ ]
+};
+
+function renderHcTable(filter){
+ var data = hcActivities;
+ if(filter === 'done') data = hcActivities.filter(function(a){return a.attended;});
+ else if(filter === 'pending') data = hcActivities.filter(function(a){return !a.attended;});
+
+ var html = '';
+ if(data.length === 0){
+ html = '
| 暂无数据 |
';
+ } else {
+ data.forEach(function(a){
+ var surveys = a.surveys.map(function(s){return '
'+esc(s)+'';}).join(' ');
+ var attendedTag = a.attended
+ ? '
已参加'
+ : '
未参加';
+ var attendTime = a.attended ? a.attendTime : '
—';
+ var actionBtn = a.attended
+ ? '
'
+ : '—';
+ html += '
';
+ html += '| '+esc(a.name)+' | ';
+ html += ''+esc(a.org)+' | ';
+ html += ''+esc(a.dept)+' | ';
+ html += ''+a.dateFrom+' ~ '+a.dateTo+' | ';
+ html += ''+surveys+' | ';
+ html += ''+attendedTag+' | ';
+ html += ''+attendTime+' | ';
+ html += ''+actionBtn+' | ';
+ html += '
';
+ });
+ }
+ document.getElementById('hcTbody').innerHTML = html;
+ document.getElementById('hcPageInfo').textContent = '共 '+data.length+' 条数据';
+}
+
+function filterHcTable(){
+ var v = document.getElementById('hcAttendFilter').value;
+ renderHcTable(v);
+}
+
+function resetHcFilter(){
+ document.getElementById('hcAttendFilter').value = 'all';
+ renderHcTable('all');
+}
+
+function openSurveyDetail(actId){
+ var act = hcActivities.find(function(a){return a.id === actId;});
+ if(!act) return;
+ var empName = document.getElementById('empName').textContent;
+ document.getElementById('surveyModalTitle').textContent = empName+' — 问卷填写详情';
+ var answers = hcSurveyAnswers[actId];
+ var html = '';
+ if(!answers || answers.length === 0){
+ html = '
暂无问卷填写记录
';
+ } else {
+ answers.forEach(function(sv){
+ html += '
';
+ html += '
';
+ sv.questions.forEach(function(q,i){
+ html += '
';
+ html += '
'+(i+1)+'. '+esc(q.q)+'
';
+ if(q.type==='text'){
+ html += '
'+esc(q.answer)+'
';
+ } else if(q.type==='checkbox'){
+ html += '
';
+ q.opts.forEach(function(opt){
+ var isSel = q.answer && q.answer.indexOf(opt) > -1;
+ html += '
'+esc(opt)+'
';
+ });
+ html += '
';
+ } else {
+ html += '
';
+ q.opts.forEach(function(opt){
+ var isSel = (q.answer === opt);
+ html += '
'+esc(opt)+'
';
+ });
+ html += '
';
+ }
+ html += '
';
+ });
+ html += '
';
+ });
+ }
+ document.getElementById('surveyModalBody').innerHTML = html;
document.getElementById('surveyModal').classList.add('show');
}
-document.getElementById('surveyModal').addEventListener('click',function(e){if(e.target===this)this.classList.remove('show');});
+
+function closeModal(id){document.getElementById(id).classList.remove('show');}
+function esc(s){return (s||'').replace(/&/g,'&').replace(/"/g,'"').replace(//g,'>');}
+
+/* 点击遮罩关闭弹窗 */
+document.querySelectorAll('.modal-mask').forEach(function(m){
+ m.addEventListener('click',function(e){if(e.target===m) closeModal(m.id);});
+});
+
// URL参数回显
(function(){
var params=new URLSearchParams(location.search);
@@ -431,6 +572,7 @@ document.getElementById('surveyModal').addEventListener('click',function(e){if(e
document.getElementById('empCode').textContent='员工编号:'+(id||'EMP001');
document.getElementById('empUnit').textContent=emp.unit;
document.getElementById('empDept').textContent=emp.dept;
+ renderHcTable('all');
})();
// 穿戴监测默认渲染心率图表(切到该tab时触发)
var origSwitch=switchMainPanel;
diff --git a/web-admin/health-monitor/archive-personal.html b/web-admin/health-monitor/archive-personal.html
index c4a7fa4..aeeec5b 100644
--- a/web-admin/health-monitor/archive-personal.html
+++ b/web-admin/health-monitor/archive-personal.html
@@ -78,6 +78,7 @@ tbody tr:hover{background:#F8FBFF;}
.tag-red{background:#FFF1F0;color:var(--danger);}
.link{color:var(--primary);cursor:pointer;font-size:var(--font-sm);text-decoration:none;}.link:hover{color:#40a9ff;}
.tag-A{background:#FFF1F0;color:#FF4D4F;}.tag-B{background:#FFF7E6;color:#FA8C16;}.tag-C{background:#FFFBE6;color:#FAAD14;}.tag-D{background:#E6F7FF;color:#1890FF;}.tag-E{background:#F6FFED;color:#52C41A;}
+.txt-red{color:var(--danger);font-weight:600;}
/* 分页 */
.pagination{display:flex;align-items:center;justify-content:flex-end;padding:16px 24px;gap:8px;border-top:1px solid var(--border);}
@@ -112,9 +113,9 @@ tbody tr:hover{background:#F8FBFF;}
@@ -168,12 +169,13 @@ tbody tr:hover{background:#F8FBFF;}
所属单位 |
所属部门 |
健康现状 |
-
健康排查 |
+
健康排查 |
穿戴监测 |
- | 积分 ↕ |
- 连续签到天数 ↕ |
+ 应参加活动 ↕ |
+ 已参加活动 ↕ |
+ 未参加活动 ↕ |
绑定设备 ↕ |
异常次数 ↕ |
操作 |
@@ -183,35 +185,35 @@ tbody tr:hover{background:#F8FBFF;}
| 张伟 | EMP001 | CQ能源总部 | 研发部 |
E类 |
- 92 | 128 |
- 是 | 2 |
+ 5 | 5 | 0 |
+ 是 | 2 |
详细信息 |
| 李娜 | EMP002 | CQ能源总部 | 市场部 |
D类 |
- 88 | 125 |
- 是 | 1 |
+ 5 | 4 | 1 |
+ 是 | 1 |
详细信息 |
| 陈刚 | EMP005 | CQ能源总部 | 人事部 |
B类 |
- 78 | 120 |
- 是 | 3 |
+ 5 | 3 | 2 |
+ 是 | 3 |
详细信息 |
| 王磊 | EMP003 | 采油一厂 | 运营部 |
C类 |
- 76 | 98 |
+ 4 | 2 | 2 |
否 | 0 |
详细信息 |
| 赵敏 | EMP004 | 采油二厂 | 财务部 |
A类 |
- 95 | 131 |
+ 5 | 5 | 0 |
是 | 0 |
详细信息 |
diff --git a/web-admin/health-monitor/archive-unit-health-checkup-detail.html b/web-admin/health-monitor/archive-unit-health-checkup-detail.html
index 23f131c..c28e7c2 100644
--- a/web-admin/health-monitor/archive-unit-health-checkup-detail.html
+++ b/web-admin/health-monitor/archive-unit-health-checkup-detail.html
@@ -40,31 +40,48 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
.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);outline:none;background:#fff;min-width:180px;}
.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);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;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);}
+.filter-select{height:36px;border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 28px 0 12px;font-size:var(--font-sm);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;min-width:120px;cursor:pointer;}
+.filter-select:focus{border-color:var(--primary);}
+.btn{height:36px;padding:0 16px;border-radius:var(--radius-sm);font-size:var(--font-sm);cursor:pointer;border:1px solid var(--border);background:#fff;color:var(--text-primary);transition:all .2s;display:inline-flex;align-items:center;gap:6px;}
+.btn:hover{color:var(--primary);border-color:var(--primary);}
+.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary);}
+.btn-primary:hover{background:#40a9ff;border-color:#40a9ff;color:#fff;}
.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__content{overflow-x:auto;overflow-y:hidden;}
+.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);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);text-decoration:none;background:none;border:none;}
+.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);}
-.detail-title{font-size:var(--font-lg);font-weight:600;margin-bottom:4px;}
-.detail-meta{font-size:var(--font-sm);color:var(--text-secondary);margin-bottom:16px;}
+.empty-state{text-align:center;padding:40px 20px;color:var(--text-placeholder);}
+.empty-state svg{width:64px;height:64px;margin-bottom:12px;opacity:0.3;}
+.empty-state__title{font-size:var(--font-sm);color:var(--text-secondary);}
+/* 弹窗 */
+.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:85%;max-width:960px;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);}
+.modal__close:hover{background:#f5f5f5;}
+.modal__body{padding:0;}
+.modal__footer{padding:16px 24px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px;}
+/* 弹窗内筛选 */
+.modal-filter{padding:16px 24px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
@@ -75,7 +92,7 @@ tbody tr:hover{background:#F8FBFF;}
健康监测