From 5e4eed60b9fb2f14d9da31107bb6013435fbed7e Mon Sep 17 00:00:00 2001 From: liuyunqin Date: Mon, 21 Sep 2026 10:16:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=81=A5=E5=BA=B7=E4=BD=93=E6=A3=80?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=89=B9=E9=87=8F=E4=B8=8A=E7=BA=BF=E3=80=8C?= =?UTF-8?q?=E9=AB=98=E7=BA=A7=E6=9F=A5=E8=AF=A2=E3=80=8D=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=99=A8=EF=BC=8C=E4=BE=A7=E8=BE=B9=E6=A0=8F?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=94=B6=E6=95=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 检中/检后/检前多个列表页(个人档案、单位档案、体检预约跟踪、单位预约统计、指定防癌、必检项目、项目组合模板、结果动态综合统计、员工主数据等)将固定筛选下拉替换为「高级查询」动态条件构建器(字段/操作符/值/区间,支持增删行与清空),并移除冗余的性别/年龄/岗位/是否异常/体检医院/费用审核状态/防癌类型等固定筛选项 - 体检预约跟踪页重构:新增高级查询、轻提示,移除医院/性别/年龄范围/机构分类/是否上市/防癌项/体检状态/预约状态/前置机预约状态等固定筛选 - 侧边栏及 index.html SITE_MAP 收敛:体检预约、已选项目、已检员工三项入口注释下线,合并入「体检预约跟踪」 --- index.html | 6 +- .../health-checkup/archive-personal.html | 159 ++++++++- web-admin/health-checkup/archive-unit.html | 139 ++++++++ .../health-checkup/mid-appointment-track.html | 196 ++++++++--- .../mid-appointment-track2.html | 323 ++++++++++++------ .../mid-cta-appointment-track.html | 6 +- .../mid-cta-unit-appointment.html | 141 +++++++- .../health-checkup/mid-doctor-realtime.html | 6 +- .../mid-gastro-appointment-track.html | 6 +- .../mid-gastro-questionnaire.html | 6 +- .../mid-gastro-unit-appointment.html | 141 +++++++- .../mid-hospital-appointment.html | 6 +- .../health-checkup/mid-hospital-realtime.html | 6 +- .../health-checkup/mid-participation.html | 6 +- .../health-checkup/mid-selected-items.html | 6 +- .../health-checkup/mid-unit-appointment.html | 141 +++++++- .../health-checkup/mid-unit-expected.html | 6 +- .../health-checkup/post-employee-master.html | 23 +- .../post-result-comprehensive-stat.html | 146 ++++++-- .../pre-item-combo-template.html | 147 +++++++- .../health-checkup/pre-item-required.html | 160 +++++++-- .../health-checkup/pre-special-cancer.html | 164 +++++++-- 22 files changed, 1620 insertions(+), 320 deletions(-) diff --git a/index.html b/index.html index 4e668a4..93ffedb 100644 --- a/index.html +++ b/index.html @@ -238,10 +238,10 @@ const SITE_MAP = [ { file:'pre-cta-plan-mgmt.html', label:'冠脉CTA单位体检计划管理' }, { file:'pre-special-cta.html', label:'冠脉CTA体检人员' }, { file:'pre-special-hospital.html', label:'指定员工体检医院' }, - { file:'mid-appointment-track.html', label:'体检预约' }, + // { file:'mid-appointment-track.html', label:'体检预约' }, { file:'mid-appointment-track2.html', label:'体检预约跟踪' }, - { file:'mid-selected-items.html', label:'已选项目' }, - { file:'mid-participation.html', label:'已检员工' }, + // { file:'mid-selected-items.html', label:'已选项目' }, + // { file:'mid-participation.html', label:'已检员工' }, { file:'mid-unit-appointment.html', label:'单位预约人数统计' }, { file:'mid-hospital-realtime.html', label:'医院实时预约人数' }, { file:'mid-doctor-realtime.html', label:'医生实时检查情况' }, diff --git a/web-admin/health-checkup/archive-personal.html b/web-admin/health-checkup/archive-personal.html index df355fa..d0dd56f 100644 --- a/web-admin/health-checkup/archive-personal.html +++ b/web-admin/health-checkup/archive-personal.html @@ -168,6 +168,21 @@ .year-picker__dropdown div{padding:8px 14px;font-size:var(--font-sm);cursor:pointer;} .year-picker__dropdown div:hover{background:var(--primary-light);} .year-picker__dropdown div.selected{color:var(--primary);font-weight:600;} +/* 高级查询 */ +.adv-panel{background:#fff;border-radius:var(--radius-md);padding:16px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:none;} +.adv-panel.open{display:block;} +.adv-panel__head{font-size:var(--font-base);font-weight:600;margin-bottom:12px;} +#advConditions{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;} +.adv-cond-row{display:flex;align-items:center;gap:8px;margin-bottom:0;min-width:0;} +.adv-field{min-width:140px;flex:1;} +.adv-op{min-width:72px;flex:none;} +.adv-value-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:0;max-width:none;} +.adv-value{flex:1;min-width:0;} +.adv-range-sep{color:var(--text-secondary);flex-shrink:0;} +.adv-del{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text-secondary);cursor:pointer;flex-shrink:0;font-size:var(--font-sm);line-height:1;} +.adv-del:hover{color:var(--danger);border-color:var(--danger);} +.adv-actions{display:flex;gap:12px;margin-top:2px;} +.adv-arrow{font-size:10px;} @@ -237,16 +252,20 @@ -
- - -
+ + + + +
+
高级查询
+
+
+ + + +
@@ -585,21 +604,135 @@ function hasAbnormal(r){ for(var k in r.r){if(r.r[k][1])return true;} return false; } -/* 按筛选条件取当前展示行:异常员工 + 姓名/员工编号/身份证号模糊匹配 */ +/* 按筛选条件取当前展示行:姓名模糊匹配 + 高级查询条件 */ function getDisplayRows(){ - var v=document.getElementById('abnormalFilter').value; var name=document.getElementById('fName').value.trim(); var empNo=document.getElementById('fEmpNo').value.trim(); var idCard=document.getElementById('fIdCard').value.trim(); + var conds=readAdvancedConditions(); return MASTER_ROWS.filter(function(r){ - if(v==='abnormal'&&!hasAbnormal(r))return false; - if(v==='normal'&&hasAbnormal(r))return false; if(name&&r.name.indexOf(name)<0)return false; if(empNo&&r.empNo.indexOf(empNo)<0)return false; if(idCard&&r.idCard.indexOf(idCard)<0)return false; + for(var i=0;i','>=','<','<=','范围']; +var ADV_FIELD_OPTS=''; +/* 字段下拉选项:基本信息 + 全部体检项目(按一级分类分组,二级分类·项目名 去重) */ +function buildAdvFieldOpts(){ + var o=''; + BASE_COLS.forEach(function(c){if(c.key!=='idx')o+='';}); + o+=''; + ITEM_TREE.forEach(function(g){ + o+=''; + g.lvl2.forEach(function(s){ + s.items.forEach(function(it){o+='';}); + }); + o+=''; + }); + return o; +} +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +/* 运算符切换为"范围"时,值区域变成最小/最大两个输入框 */ +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){ + document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML()); +} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function clearAdvanced(){ + document.getElementById('advConditions').innerHTML=''; + renderBigTable(); + showToast('已清空高级查询条件'); +} +/* 读取面板中已填值的条件(忽略值为空的行;范围条件任一边有值即计入) */ +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +/* 取某字段在某员工上的值:基本信息直接用 key,项目结果取"结果"字符串 */ +function getFieldRaw(row,field){ + if(field.indexOf('|')>=0){ + var i=field.indexOf('|'); + var cat=field.slice(0,i),name=field.slice(i+1); + var val=row.r[cat+'|'+name]||row.r[name]; + if(!val)val=[(CAT_DEFAULTS[cat]||['-'])[0]]; + return val[0]; + } + return row[field]; +} +/* 数值化:取结果中的首个数字 */ +function numericOf(v){ + var m=String(v).match(/[-+]?\d+(?:\.\d+)?/); + return m?parseFloat(m[0]):null; +} +/* 单条条件匹配:包含/=/!= 按字符串,>、>=、<、<=、范围 按数值 */ +function matchCondition(row,cond){ + var raw=getFieldRaw(row,cond.field); + var str=String(raw==null?'':raw); + if(cond.op==='包含')return str.indexOf(cond.value)>=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){ + var lo=parseFloat(cond.from); + if(!isNaN(lo)&&nhi)return false; + } + return true; + } + var c=parseFloat(cond.value); + if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n @@ -184,6 +203,18 @@ + + + + +
+
高级查询
+
+
+ + + +
@@ -399,6 +430,114 @@ document.querySelectorAll('.year-picker>input').forEach(function(inp){ document.addEventListener('click',function(){ document.querySelectorAll('.year-picker__dropdown.open').forEach(function(d){d.classList.remove('open');}); }); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_ROW_SELECTOR='#unitTable tbody tr'; +var ADV_FIELDS=[ + {key:'unit',label:'单位',idx:1},{key:'dept',label:'部门',idx:2},{key:'year',label:'体检年份',idx:3}, + {key:'signHospital',label:'签约医院',idx:4},{key:'hospital',label:'承检医院',idx:5},{key:'range',label:'体检计划日期范围',idx:6}, + {key:'total',label:'总人数',idx:7},{key:'should',label:'应检人数',idx:8},{key:'selected',label:'已选项目人数',idx:9}, + {key:'booked',label:'已预约人数',idx:10},{key:'checked',label:'已检人数',idx:11},{key:'unchecked',label:'未检人数',idx:12}, + {key:'rate',label:'受检率',idx:13},{key:'detectRate',label:'检出率',idx:14},{key:'keyAbn',label:'重点指标异常人数',idx:15}, + {key:'ctaAbn',label:'冠脉CTA异常人数',idx:16},{key:'cancerAbn',label:'防癌筛查异常人数',idx:17}, + {key:'planFee',label:'计划总费用(元)',idx:18},{key:'actualFee',label:'实际总费用(元)',idx:19},{key:'perFee',label:'人均费用(元)',idx:20} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(key){for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +
diff --git a/web-admin/health-checkup/mid-appointment-track.html b/web-admin/health-checkup/mid-appointment-track.html index 77201ab..1b711d1 100644 --- a/web-admin/health-checkup/mid-appointment-track.html +++ b/web-admin/health-checkup/mid-appointment-track.html @@ -120,6 +120,25 @@ .year-picker__dropdown div{padding:8px 14px;font-size:var(--font-sm);cursor:pointer;} .year-picker__dropdown div:hover{background:var(--primary-light);} .year-picker__dropdown div.selected{color:var(--primary);font-weight:600;} +/* 高级查询 */ +.adv-panel{background:#fff;border-radius:var(--radius-md);padding:16px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:none;} +.adv-panel.open{display:block;} +.adv-panel__head{font-size:var(--font-base);font-weight:600;margin-bottom:12px;} +#advConditions{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;} +.adv-cond-row{display:flex;align-items:center;gap:8px;margin-bottom:0;min-width:0;} +.adv-field{min-width:140px;flex:1;} +.adv-op{min-width:72px;flex:none;} +.adv-value-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:0;max-width:none;} +.adv-value{flex:1;min-width:0;} +.adv-range-sep{color:var(--text-secondary);flex-shrink:0;} +.adv-del{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text-secondary);cursor:pointer;flex-shrink:0;font-size:var(--font-sm);line-height:1;} +.adv-del:hover{color:var(--danger);border-color:var(--danger);} +.adv-actions{display:flex;gap:12px;margin-top:2px;} +.adv-arrow{font-size:10px;} +/* 轻提示 */ +.toast{position:fixed;top:76px;left:50%;transform:translateX(-50%) translateY(-16px);background:#fff;box-shadow:var(--shadow-md);border-radius:var(--radius-sm);padding:10px 20px;font-size:var(--font-sm);color:var(--text-primary);opacity:0;pointer-events:none;transition:all .25s;z-index:1000;display:flex;align-items:center;gap:8px;} +.toast.show{opacity:1;transform:translateX(-50%) translateY(0);} +.toast svg{flex-shrink:0;} @@ -157,9 +176,9 @@ 常规体检 -
- - -
@@ -231,53 +244,23 @@
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
+ + + + +
+
高级查询
+
+
+ + + +
@@ -509,6 +492,117 @@ document.querySelectorAll('.year-picker>input').forEach(function(inp){ document.addEventListener('click',function(){ document.querySelectorAll('.year-picker__dropdown.open').forEach(function(d){d.classList.remove('open');}); }); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_ROW_SELECTOR='.table-card__content tbody tr'; +var ADV_FIELDS=[ + {key:'name',label:'姓名',idx:1},{key:'gender',label:'性别',idx:2},{key:'age',label:'年龄',idx:3}, + {key:'ageRange',label:'年龄范围',idx:4},{key:'idCard',label:'身份证号',idx:5},{key:'unit',label:'单位',idx:6}, + {key:'dept',label:'部门',idx:7},{key:'orgType',label:'机构分类',idx:8},{key:'empNo',label:'员工编号',idx:9}, + {key:'examCode',label:'体检编码',idx:10},{key:'empType',label:'用工形式',idx:11},{key:'marriage',label:'婚姻状态',idx:12}, + {key:'examType',label:'体检类型',idx:13},{key:'cancer',label:'防癌项',idx:14},{key:'listed',label:'是否上市员工',idx:15}, + {key:'hospital',label:'体检医院',idx:16},{key:'feeTotal',label:'体检总费用',idx:17},{key:'fee1',label:'必检费用',idx:18}, + {key:'fee2',label:'选检费用',idx:19},{key:'fee3',label:'妇科费用',idx:20},{key:'fee4',label:'防癌筛查费用',idx:21}, + {key:'bookStatus',label:'预约状态',idx:22},{key:'bookInfo',label:'体检预约信息',idx:23},{key:'bookDate',label:'预约日期',idx:24}, + {key:'examStatus',label:'体检状态',idx:25},{key:'examDate',label:'体检日期',idx:26},{key:'year',label:'体检年份',idx:27}, + {key:'plan',label:'体检计划',idx:28} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(key){for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +
diff --git a/web-admin/health-checkup/mid-appointment-track2.html b/web-admin/health-checkup/mid-appointment-track2.html index 54c948e..e7495bf 100644 --- a/web-admin/health-checkup/mid-appointment-track2.html +++ b/web-admin/health-checkup/mid-appointment-track2.html @@ -146,6 +146,25 @@ .year-picker__dropdown div{padding:8px 14px;font-size:var(--font-sm);cursor:pointer;} .year-picker__dropdown div:hover{background:var(--primary-light);} .year-picker__dropdown div.selected{color:var(--primary);font-weight:600;} +/* 高级查询 */ +.adv-panel{background:#fff;border-radius:var(--radius-md);padding:16px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:none;} +.adv-panel.open{display:block;} +.adv-panel__head{font-size:var(--font-base);font-weight:600;margin-bottom:12px;} +[id^="advConditions"]{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;} +.adv-cond-row{display:flex;align-items:center;gap:8px;margin-bottom:0;min-width:0;} +.adv-field{min-width:140px;flex:1;} +.adv-op{min-width:72px;flex:none;} +.adv-value-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:0;max-width:none;} +.adv-value{flex:1;min-width:0;} +.adv-range-sep{color:var(--text-secondary);flex-shrink:0;} +.adv-del{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text-secondary);cursor:pointer;flex-shrink:0;font-size:var(--font-sm);line-height:1;} +.adv-del:hover{color:var(--danger);border-color:var(--danger);} +.adv-actions{display:flex;gap:12px;margin-top:2px;} +.adv-arrow{font-size:10px;} +/* 轻提示 */ +.toast{position:fixed;top:76px;left:50%;transform:translateX(-50%) translateY(-16px);background:#fff;box-shadow:var(--shadow-md);border-radius:var(--radius-sm);padding:10px 20px;font-size:var(--font-sm);color:var(--text-primary);opacity:0;pointer-events:none;transition:all .25s;z-index:1000;display:flex;align-items:center;gap:8px;} +.toast.show{opacity:1;transform:translateX(-50%) translateY(0);} +.toast svg{flex-shrink:0;} @@ -183,9 +202,9 @@ 常规体检 -
- - -
- +
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
+ + + + +
+
高级查询
+
+
+ + + +
@@ -405,12 +382,6 @@ -
- - -
@@ -428,6 +399,18 @@ 查询 + +
+ + +
+
高级查询
+
+
+ + + +
@@ -509,12 +492,6 @@ -
- - -
@@ -527,15 +504,23 @@
-
- - -
+ + + + +
+
高级查询
+
+
+ + + +
@@ -622,54 +607,38 @@
-
-
- -
- +
- +
- -
-
- - -
-
- - -
-
- - -
-
- - - - +
+ + + + +
+
高级查询
+
+
+ + + +
@@ -1114,6 +1083,148 @@ document.querySelectorAll('.year-picker>input').forEach(function(inp){ document.addEventListener('click',function(){ document.querySelectorAll('.year-picker__dropdown.open').forEach(function(d){d.classList.remove('open');}); }); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_TABS={ + 'should':{ + selector:'#tab-should .table-card__content tbody tr', + fields:[ + {key:'name',label:'姓名',idx:1},{key:'empNo',label:'员工编号',idx:2},{key:'gender',label:'性别',idx:3}, + {key:'age',label:'年龄',idx:4},{key:'idCard',label:'身份证号',idx:5},{key:'unit',label:'单位',idx:6}, + {key:'dept',label:'部门',idx:7},{key:'orgType',label:'机构分类',idx:8},{key:'examCode',label:'体检编码',idx:9}, + {key:'empType',label:'用工形式',idx:10},{key:'marriage',label:'婚姻状态',idx:11},{key:'cancer',label:'防癌项',idx:12}, + {key:'listed',label:'是否上市员工',idx:13},{key:'bookStatus',label:'预约状态',idx:14},{key:'frontStatus',label:'前置机预约状态',idx:15}, + {key:'bookDate',label:'预约日期',idx:16},{key:'examStatus',label:'体检状态',idx:17},{key:'examDate',label:'体检日期',idx:18}, + {key:'year',label:'体检年份',idx:19},{key:'plan',label:'体检计划',idx:20} + ] + }, + 'selected':{ + selector:'#tab-selected .table-card__content tbody tr', + fields:[ + {key:'name',label:'姓名',idx:1},{key:'empNo',label:'员工编号',idx:2},{key:'gender',label:'性别',idx:3}, + {key:'age',label:'年龄',idx:4},{key:'idCard',label:'身份证号',idx:5},{key:'unit',label:'单位',idx:6}, + {key:'dept',label:'部门',idx:7},{key:'hospital',label:'体检医院',idx:8},{key:'itemCount',label:'体检项目数',idx:9}, + {key:'feeTotal',label:'体检总费用',idx:10},{key:'fee1',label:'必检费用',idx:11},{key:'fee2',label:'选检费用',idx:12}, + {key:'fee3',label:'妇科费用',idx:13},{key:'fee4',label:'防癌筛查费用',idx:14},{key:'submitDate',label:'提交项目日期',idx:15}, + {key:'year',label:'体检年份',idx:16},{key:'plan',label:'体检计划',idx:17} + ] + }, + 'booked':{ + selector:'#tab-booked .table-card__content tbody tr', + fields:[ + {key:'name',label:'姓名',idx:2},{key:'empNo',label:'员工编号',idx:3},{key:'gender',label:'性别',idx:4}, + {key:'age',label:'年龄',idx:5},{key:'idCard',label:'身份证号',idx:6},{key:'unit',label:'单位',idx:7}, + {key:'dept',label:'部门',idx:8},{key:'hospital',label:'体检医院',idx:9},{key:'examCode',label:'体检编码',idx:10}, + {key:'bookDate',label:'预约日期',idx:11},{key:'year',label:'体检年份',idx:12},{key:'plan',label:'体检计划',idx:13} + ] + }, + 'participated':{ + selector:'#tab-participated .table-card__content tbody tr', + fields:[ + {key:'name',label:'姓名',idx:1},{key:'empNo',label:'员工编号',idx:2},{key:'gender',label:'性别',idx:3}, + {key:'age',label:'年龄',idx:4},{key:'idCard',label:'身份证号',idx:5},{key:'unit',label:'单位',idx:6}, + {key:'dept',label:'部门',idx:7},{key:'hospital',label:'体检医院',idx:8},{key:'examCode',label:'体检编码',idx:9}, + {key:'sysStatus',label:'系统体检状态',idx:10},{key:'hospStatus',label:'医院体检状态',idx:11},{key:'examDate',label:'体检日期',idx:12}, + {key:'checkedItems',label:'已检项/全部',idx:13},{key:'year',label:'体检年份',idx:14},{key:'plan',label:'体检计划',idx:15} + ] + } +}; +function fieldOpts(tabId){return ADV_TABS[tabId].fields.map(function(f){return '';}).join('');} +function advConditionRowHTML(tabId){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(tabId){document.getElementById('advConditions-'+tabId).insertAdjacentHTML('beforeend',advConditionRowHTML(tabId));} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(tabId){ + var p=document.getElementById('advPanel-'+tabId); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle-'+tabId).querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(tabId); +} +function readAdvancedConditions(tabId){ + var conds=[]; + document.querySelectorAll('#advConditions-'+tabId+' .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(tabId,key){var fields=ADV_TABS[tabId].fields;for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +
diff --git a/web-admin/health-checkup/mid-cta-appointment-track.html b/web-admin/health-checkup/mid-cta-appointment-track.html index e393162..36452f3 100644 --- a/web-admin/health-checkup/mid-cta-appointment-track.html +++ b/web-admin/health-checkup/mid-cta-appointment-track.html @@ -150,9 +150,9 @@ 常规体检 + + +
+
高级查询
+
+
+ + + +
@@ -246,6 +277,110 @@ function toggleSubgroup(header){ var sub=active.closest('.sidebar-subgroup'); if(sub)sub.classList.add('open'); })(); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_ROW_SELECTOR='.table-card__content tbody tr'; +var ADV_FIELDS=[ + {key:'unit',label:'单位',idx:1},{key:'dept',label:'部门',idx:2},{key:'should',label:'应体检人数',idx:3}, + {key:'booked',label:'已预约人数',idx:4},{key:'participated',label:'已参检人数',idx:5},{key:'unparticipated',label:'未参检人数',idx:6}, + {key:'unbooked',label:'未预约人数',idx:7},{key:'year',label:'体检年份',idx:8} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(key){for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +
diff --git a/web-admin/health-checkup/mid-doctor-realtime.html b/web-admin/health-checkup/mid-doctor-realtime.html index 484eced..73b062b 100644 --- a/web-admin/health-checkup/mid-doctor-realtime.html +++ b/web-admin/health-checkup/mid-doctor-realtime.html @@ -128,9 +128,9 @@ 常规体检 + + +
+
高级查询
+
+
+ + + +
@@ -246,6 +277,110 @@ function toggleSubgroup(header){ var sub=active.closest('.sidebar-subgroup'); if(sub)sub.classList.add('open'); })(); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_ROW_SELECTOR='.table-card__content tbody tr'; +var ADV_FIELDS=[ + {key:'unit',label:'单位',idx:1},{key:'dept',label:'部门',idx:2},{key:'should',label:'应体检人数',idx:3}, + {key:'questionnaire',label:'填写问卷人数',idx:4},{key:'booked',label:'已预约人数',idx:5},{key:'participated',label:'已参检人数',idx:6}, + {key:'unparticipated',label:'未参检人数',idx:7},{key:'unbooked',label:'未预约人数',idx:8},{key:'year',label:'体检年份',idx:9} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(key){for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +
diff --git a/web-admin/health-checkup/mid-hospital-appointment.html b/web-admin/health-checkup/mid-hospital-appointment.html index 85468ff..4bf2dca 100644 --- a/web-admin/health-checkup/mid-hospital-appointment.html +++ b/web-admin/health-checkup/mid-hospital-appointment.html @@ -124,9 +124,9 @@ 常规体检 + + +
+
高级查询
+
+
+ + + +
@@ -286,6 +317,110 @@ document.querySelectorAll('.year-picker>input').forEach(function(inp){ document.addEventListener('click',function(){ document.querySelectorAll('.year-picker__dropdown.open').forEach(function(d){d.classList.remove('open');}); }); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_ROW_SELECTOR='.table-card__content tbody tr'; +var ADV_FIELDS=[ + {key:'unit',label:'单位',idx:1},{key:'dept',label:'部门',idx:2},{key:'should',label:'应体检人数',idx:3}, + {key:'selected',label:'已选项目人数',idx:4},{key:'booked',label:'已预约人数',idx:5},{key:'participated',label:'已参检人数',idx:6}, + {key:'unparticipated',label:'未参检人数',idx:7},{key:'unbooked',label:'未预约人数',idx:8},{key:'year',label:'体检年份',idx:9} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(key){for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +
diff --git a/web-admin/health-checkup/mid-unit-expected.html b/web-admin/health-checkup/mid-unit-expected.html index 2490df2..c862361 100644 --- a/web-admin/health-checkup/mid-unit-expected.html +++ b/web-admin/health-checkup/mid-unit-expected.html @@ -113,9 +113,9 @@ 常规体检 -
- - -
@@ -558,16 +551,13 @@ function hasAbnormal(r){ for(var k in r.r){if(r.r[k][1])return true;} return false; } -/* 按筛选条件取当前展示行:异常员工 + 姓名/员工编号/身份证号模糊匹配 + 高级查询条件 */ +/* 按筛选条件取当前展示行:姓名模糊匹配 + 高级查询条件 */ function getDisplayRows(){ - var v=document.getElementById('abnormalFilter').value; var name=document.getElementById('fName').value.trim(); var empNo=document.getElementById('fEmpNo').value.trim(); var idCard=document.getElementById('fIdCard').value.trim(); var conds=readAdvancedConditions(); return MASTER_ROWS.filter(function(r){ - if(v==='abnormal'&&!hasAbnormal(r))return false; - if(v==='normal'&&hasAbnormal(r))return false; if(name&&r.name.indexOf(name)<0)return false; if(empNo&&r.empNo.indexOf(empNo)<0)return false; if(idCard&&r.idCard.indexOf(idCard)<0)return false; @@ -707,7 +697,6 @@ function applyFilter(){ showToast('查询完成'); } function resetFilter(){ - document.getElementById('abnormalFilter').value=''; document.getElementById('fName').value=''; document.getElementById('fEmpNo').value=''; document.getElementById('fIdCard').value=''; diff --git a/web-admin/health-checkup/post-result-comprehensive-stat.html b/web-admin/health-checkup/post-result-comprehensive-stat.html index 906b91e..2f7d0a6 100644 --- a/web-admin/health-checkup/post-result-comprehensive-stat.html +++ b/web-admin/health-checkup/post-result-comprehensive-stat.html @@ -170,6 +170,21 @@ .report-note--conclusion{border:1px solid #FFD591;background:#FFF7E6;color:#873800;} .report-note--advice{border:1px solid #B7EB8F;background:#F6FFED;color:#389E0D;} .result-abnormal{color:var(--danger);font-weight:600;} +/* 高级查询 */ +.adv-panel{background:#fff;border-radius:var(--radius-md);padding:16px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:none;} +.adv-panel.open{display:block;} +.adv-panel__head{font-size:var(--font-base);font-weight:600;margin-bottom:12px;} +#advConditions{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;} +.adv-cond-row{display:flex;align-items:center;gap:8px;margin-bottom:0;min-width:0;} +.adv-field{min-width:140px;flex:1;} +.adv-op{min-width:72px;flex:none;} +.adv-value-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:0;max-width:none;} +.adv-value{flex:1;min-width:0;} +.adv-range-sep{color:var(--text-secondary);flex-shrink:0;} +.adv-del{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text-secondary);cursor:pointer;flex-shrink:0;font-size:var(--font-sm);line-height:1;} +.adv-del:hover{color:var(--danger);border-color:var(--danger);} +.adv-actions{display:flex;gap:12px;margin-top:2px;} +.adv-arrow{font-size:10px;} @@ -373,30 +388,18 @@ -
- - -
-
- - -
-
- - -
-
- - -
+ + + + + +
+
高级查询
+
+
+ + +
@@ -783,23 +786,100 @@ function getListRows(){ var unit=document.getElementById('fUnit').value; var name=document.getElementById('fName').value.trim(); var empNo=document.getElementById('fEmpNo').value.trim(); - var gender=document.getElementById('fGender').value; - var age=document.getElementById('fAge').value; - var pos=document.getElementById('fPos').value; - var abn=document.getElementById('fAbn').value; + var conds=readAdvancedConditions(); return LIST_ROWS.filter(function(r){ if(unit&&r.unit!==unit)return false; if(name&&r.name.indexOf(name)<0)return false; if(empNo&&r.empNo.indexOf(empNo)<0)return false; - if(gender&&r.gender!==gender)return false; - if(age&&r.ageRange!==age)return false; - if(pos&&r.position!==pos)return false; if(selectedCodes.length&&selectedCodes.indexOf(r.itemCode)<0)return false; - if(abn==='yes'&&!r.abnormal)return false; - if(abn==='no'&&r.abnormal)return false; + for(var i=0;i','>=','<','<=','范围']; +var ADV_FIELDS=[ + {key:'name',label:'姓名'},{key:'empNo',label:'员工编号'},{key:'gender',label:'性别'}, + {key:'age',label:'年龄'},{key:'ageRange',label:'年龄范围'},{key:'unit',label:'单位'}, + {key:'dept',label:'部门'},{key:'position',label:'岗位'},{key:'itemCode',label:'项目编码'}, + {key:'itemName',label:'体检项目'},{key:'abnormal',label:'是否异常'} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function getFieldRaw(row,field){ + if(field==='abnormal')return row.abnormal?'是':'否'; + return row[field]; +} +function numericOf(v){var m=String(v).match(/[-+]?\d+(?:\.\d+)?/);return m?parseFloat(m[0]):null;} +function matchCondition(row,cond){ + var raw=getFieldRaw(row,cond.field); + var str=String(raw==null?'':raw); + if(cond.op==='包含')return str.indexOf(cond.value)>=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n @@ -290,20 +309,20 @@ -
- - -
-
- - -
+ + + + +
+
高级查询
+
+
+ + + +
@@ -1041,6 +1060,110 @@ document.querySelectorAll('.year-picker>input').forEach(function(inp){ document.addEventListener('click',function(){ document.querySelectorAll('.year-picker__dropdown.open').forEach(function(d){d.classList.remove('open');}); }); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_ROW_SELECTOR='.table-card__content tbody tr'; +var ADV_FIELDS=[ + {key:'hospital',label:'医院名称',idx:1},{key:'year',label:'体检年份',idx:2},{key:'tplName',label:'模板名称',idx:3}, + {key:'gender',label:'性别',idx:4},{key:'ageRange',label:'年龄区间',idx:5},{key:'discountType',label:'折扣类型',idx:6}, + {key:'discountValue',label:'折扣数值(元)',idx:7},{key:'discountPercent',label:'折扣百分比(%)',idx:8} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(key){for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +
diff --git a/web-admin/health-checkup/pre-item-required.html b/web-admin/health-checkup/pre-item-required.html index 6c44eed..742844b 100644 --- a/web-admin/health-checkup/pre-item-required.html +++ b/web-admin/health-checkup/pre-item-required.html @@ -146,6 +146,25 @@ .year-picker__dropdown div{padding:8px 14px;font-size:var(--font-sm);cursor:pointer;} .year-picker__dropdown div:hover{background:var(--primary-light);} .year-picker__dropdown div.selected{color:var(--primary);font-weight:600;} +/* 高级查询 */ +.adv-panel{background:#fff;border-radius:var(--radius-md);padding:16px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:none;} +.adv-panel.open{display:block;} +.adv-panel__head{font-size:var(--font-base);font-weight:600;margin-bottom:12px;} +#advConditions{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;} +.adv-cond-row{display:flex;align-items:center;gap:8px;margin-bottom:0;min-width:0;} +.adv-field{min-width:140px;flex:1;} +.adv-op{min-width:72px;flex:none;} +.adv-value-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:0;max-width:none;} +.adv-value{flex:1;min-width:0;} +.adv-range-sep{color:var(--text-secondary);flex-shrink:0;} +.adv-del{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text-secondary);cursor:pointer;flex-shrink:0;font-size:var(--font-sm);line-height:1;} +.adv-del:hover{color:var(--danger);border-color:var(--danger);} +.adv-actions{display:flex;gap:12px;margin-top:2px;} +.adv-arrow{font-size:10px;} +/* 轻提示 */ +.toast{position:fixed;top:76px;left:50%;transform:translateX(-50%) translateY(-16px);background:#fff;box-shadow:var(--shadow-md);border-radius:var(--radius-sm);padding:10px 20px;font-size:var(--font-sm);color:var(--text-primary);opacity:0;pointer-events:none;transition:all .25s;z-index:1000;display:flex;align-items:center;gap:8px;} +.toast.show{opacity:1;transform:translateX(-50%) translateY(0);} +.toast svg{flex-shrink:0;} @@ -282,32 +301,20 @@ -
- - -
-
- - -
-
- - -
-
- - -
+ + + + +
+
高级查询
+
+
+ + + +
@@ -992,6 +999,111 @@ document.querySelectorAll('.year-picker>input').forEach(function(inp){ document.addEventListener('click',function(){ document.querySelectorAll('.year-picker__dropdown.open').forEach(function(d){d.classList.remove('open');}); }); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_ROW_SELECTOR='.table-card__content tbody tr'; +var ADV_FIELDS=[ + {key:'comboName',label:'项目组合名称',idx:2},{key:'hospital',label:'承检医院',idx:3},{key:'unit',label:'单位',idx:4}, + {key:'year',label:'体检年份',idx:5},{key:'gender',label:'性别',idx:6},{key:'ageRange',label:'年龄范围',idx:7}, + {key:'declaredFee',label:'本次提交费用(元)',idx:8},{key:'auditStatus',label:'费用审核状态',idx:9}, + {key:'effectiveFee',label:'必检项目费用(已生效)',idx:10},{key:'genStatus',label:'生成状态',idx:11},{key:'genTime',label:'生成时间',idx:12} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(key){for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +
diff --git a/web-admin/health-checkup/pre-special-cancer.html b/web-admin/health-checkup/pre-special-cancer.html index aa065a9..f21eed0 100644 --- a/web-admin/health-checkup/pre-special-cancer.html +++ b/web-admin/health-checkup/pre-special-cancer.html @@ -153,6 +153,25 @@ .year-picker__dropdown div{padding:8px 14px;font-size:var(--font-sm);cursor:pointer;} .year-picker__dropdown div:hover{background:var(--primary-light);} .year-picker__dropdown div.selected{color:var(--primary);font-weight:600;} +/* 高级查询 */ +.adv-panel{background:#fff;border-radius:var(--radius-md);padding:16px 24px;margin-bottom:16px;box-shadow:var(--shadow-sm);display:none;} +.adv-panel.open{display:block;} +.adv-panel__head{font-size:var(--font-base);font-weight:600;margin-bottom:12px;} +#advConditions{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;} +.adv-cond-row{display:flex;align-items:center;gap:8px;margin-bottom:0;min-width:0;} +.adv-field{min-width:140px;flex:1;} +.adv-op{min-width:72px;flex:none;} +.adv-value-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:0;max-width:none;} +.adv-value{flex:1;min-width:0;} +.adv-range-sep{color:var(--text-secondary);flex-shrink:0;} +.adv-del{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text-secondary);cursor:pointer;flex-shrink:0;font-size:var(--font-sm);line-height:1;} +.adv-del:hover{color:var(--danger);border-color:var(--danger);} +.adv-actions{display:flex;gap:12px;margin-top:2px;} +.adv-arrow{font-size:10px;} +/* 轻提示 */ +.toast{position:fixed;top:76px;left:50%;transform:translateX(-50%) translateY(-16px);background:#fff;box-shadow:var(--shadow-md);border-radius:var(--radius-sm);padding:10px 20px;font-size:var(--font-sm);color:var(--text-primary);opacity:0;pointer-events:none;transition:all .25s;z-index:1000;display:flex;align-items:center;gap:8px;} +.toast.show{opacity:1;transform:translateX(-50%) translateY(0);} +.toast svg{flex-shrink:0;} @@ -300,33 +319,20 @@ -
- - -
-
- - -
-
- - -
+ + + + +
+
高级查询
+
+
+ + + +
@@ -827,6 +833,114 @@ document.querySelectorAll('.year-picker>input').forEach(function(inp){ document.addEventListener('click',function(){ document.querySelectorAll('.year-picker__dropdown.open').forEach(function(d){d.classList.remove('open');}); }); +/* ============ 高级查询 ============ */ +var ADV_OPS=['包含','=','!=','>','>=','<','<=','范围']; +var ADV_ROW_SELECTOR='.table-card__content tbody tr'; +var ADV_FIELDS=[ + {key:'name',label:'姓名',idx:1},{key:'empNo',label:'员工编号',idx:2},{key:'gender',label:'性别',idx:3}, + {key:'age',label:'年龄',idx:4},{key:'ageRange',label:'年龄范围',idx:5},{key:'idCard',label:'身份证号',idx:6}, + {key:'phone',label:'手机号',idx:7},{key:'unit',label:'单位',idx:8},{key:'dept',label:'部门',idx:9}, + {key:'year',label:'体检年份',idx:10},{key:'plan',label:'体检计划',idx:11},{key:'planUnit',label:'体检计划单位',idx:12}, + {key:'cancerType',label:'防癌筛查类型',idx:13},{key:'cancerYear',label:'防癌检查年份',idx:14}, + {key:'s9Checked',label:'Septin9是否已检',idx:15},{key:'s9Abn',label:'Septin9检查异常',idx:16},{key:'s9Value',label:'Septin9项目值',idx:17}, + {key:'caChecked',label:'CA724是否已检',idx:18},{key:'caAbn',label:'CA724检查异常',idx:19},{key:'caValue',label:'CA724项目值',idx:20} +]; +var ADV_FIELD_OPTS=ADV_FIELDS.map(function(f){return '';}).join(''); +function advConditionRowHTML(){ + return '
' + +'' + +'' + +'' + +'' + +'
'; +} +function onAdvOpChange(sel){ + var wrap=sel.parentElement.querySelector('.adv-value-wrap'); + var isRange=sel.value==='范围'; + var alreadyRange=!!wrap.querySelector('.adv-range-from'); + if(isRange&&!alreadyRange){ + wrap.innerHTML='' + +'~' + +''; + }else if(!isRange&&alreadyRange){ + wrap.innerHTML=''; + } +} +function addAdvCondition(){document.getElementById('advConditions').insertAdjacentHTML('beforeend',advConditionRowHTML());} +function removeAdvCondition(el){el.parentElement.remove();} +function toggleAdvanced(){ + var p=document.getElementById('advPanel'); + var open=p.classList.toggle('open'); + var arr=document.getElementById('advToggle').querySelector('.adv-arrow'); + if(arr)arr.textContent=open?'▴':'▾'; + if(open&&!p.querySelector('.adv-cond-row'))addAdvCondition(); +} +function readAdvancedConditions(){ + var conds=[]; + document.querySelectorAll('#advConditions .adv-cond-row').forEach(function(row){ + var field=row.querySelector('.adv-field').value; + var op=row.querySelector('.adv-op').value; + if(op==='范围'){ + var from=row.querySelector('.adv-range-from').value.trim(); + var to=row.querySelector('.adv-range-to').value.trim(); + if(from!==''||to!=='')conds.push({field:field,op:op,from:from,to:to}); + }else{ + var value=row.querySelector('.adv-value').value.trim(); + if(value!=='')conds.push({field:field,op:op,value:value}); + } + }); + return conds; +} +function fieldByKey(key){for(var i=0;i=0; + if(cond.op==='=')return str===cond.value; + if(cond.op==='!=')return str!==cond.value; + var n=numericOf(str); + if(n===null)return false; + if(cond.op==='范围'){ + if(cond.from!==''){var lo=parseFloat(cond.from);if(!isNaN(lo)&&nhi)return false;} + return true; + } + var c=parseFloat(cond.value);if(isNaN(c))return false; + if(cond.op==='>')return n>c; + if(cond.op==='>=')return n>=c; + if(cond.op==='<')return n + +
+ + +