@@ -212,48 +312,171 @@ var rows=[
];
var dim='dep';
var period='week';
-/* 各周期对应的统计区间(演示口径:周=上一自然周,月=本月,年=本年度) */
+/* 单位→部门两级映射,与站点管理/告警记录页口径一致 */
+var unitDeparts={'采油一厂':['樊学作业区','麻子山作业区'],'采油二厂':['桐园作业区','姬圪台作业区'],'第四采油厂':['西峰作业区'],'采气一厂':['靖边气田']};
+var selUnit='',selDept='';
+function initFilters(){
+ var us=[];rows.forEach(function(r){if(us.indexOf(r.unit)<0)us.push(r.unit);});
+ document.getElementById('filterUnit').innerHTML='
全部单位 '+us.map(function(u){return '
'+u+' ';}).join('');
+}
+/* [交互] 站点统计:单位部门级联筛选,选中即即时出数 */
+function toggleOrg(){
+ document.getElementById('orgPanel').classList.toggle('open');
+ document.getElementById('orgTrigger').classList.toggle('open');
+}
+function selectUnit(elem,unitName){
+ document.querySelectorAll('#unitCol .org-item').forEach(function(i){i.classList.remove('active');});
+ elem.classList.add('active');
+ selUnit=unitName;
+ var html='
部门
全部部门
';
+ (unitDeparts[unitName]||[]).forEach(function(d){html+='
'+d+'
';});
+ document.getElementById('deptCol').innerHTML=html;
+ selDept='';
+ document.getElementById('orgTrigger').textContent=(selUnit||'全部单位')+' / '+(selDept||'全部部门');
+ render();
+}
+function selectDept(elem,deptName){
+ document.querySelectorAll('#deptCol .org-item').forEach(function(i){i.classList.remove('active');});
+ elem.classList.add('active');
+ selDept=deptName;
+ document.getElementById('orgTrigger').textContent=(selUnit||'全部单位')+' / '+(selDept||'全部部门');
+ render();
+ document.getElementById('orgPanel').classList.remove('open');
+ document.getElementById('orgTrigger').classList.remove('open');
+}
+/* 各周期统计区间:周从日历选周取值,月/年/选时来自对应可选控件(带默认值) */
+function pad2(n){return ('0'+n).slice(-2);}
+function fmtDate(d){return d.getFullYear()+'-'+pad2(d.getMonth()+1)+'-'+pad2(d.getDate());}
+function monthRange(m){
+ var mm=String(m||'').match(/^(\d{4})-(\d{2})$/);
+ if(!mm)return [m,m];
+ var y=+mm[1],mo=+mm[2];
+ return [y+'-'+mm[2]+'-01',fmtDate(new Date(y,mo,0))];
+}
+/* [交互] 周选择:点击「统计时间」打开日历,点选一周(周一至周日),展示为日期范围 */
+var weekSelStart='2026-08-31'; // 选中周的周一
+var calYear=2026,calMonth=8; // 日历当前显示的月份(0 起,8=9月)
+function parseDate(s){var p=s.split('-');return new Date(+p[0],+p[1]-1,+p[2]);}
+function weekEndOf(start){return fmtDate(new Date(start.getFullYear(),start.getMonth(),start.getDate()+6));}
+function updateWeekTrigger(){
+ var d=parseDate(weekSelStart);
+ document.getElementById('weekTrigger').textContent=fmtDate(d)+' 至 '+weekEndOf(d);
+}
+function toggleWeekPanel(){
+ var open=document.getElementById('weekPanel').classList.toggle('open');
+ document.getElementById('weekTrigger').classList.toggle('open',open);
+ if(open)renderWeekCalendar();
+}
+function shiftWeekMonth(delta){
+ calMonth+=delta;
+ if(calMonth<0){calMonth=11;calYear--;}
+ if(calMonth>11){calMonth=0;calYear++;}
+ renderWeekCalendar();
+}
+function renderWeekCalendar(){
+ document.getElementById('weekCalTitle').textContent=calYear+'年'+(calMonth+1)+'月';
+ var first=new Date(calYear,calMonth,1);
+ var start=new Date(calYear,calMonth,1-((first.getDay()+6)%7)); // 该月首日所在周的周一
+ var sel=parseDate(weekSelStart);
+ var html='';
+ for(var r=0;r<6;r++){
+ var ws=new Date(start.getFullYear(),start.getMonth(),start.getDate()+r*7);
+ var isSel=ws.getTime()===sel.getTime();
+ html+='
';
+ for(var c=0;c<7;c++){
+ var d=new Date(ws.getFullYear(),ws.getMonth(),ws.getDate()+c);
+ html+='
'+d.getDate()+'
';
+ }
+ html+='
';
+ }
+ document.getElementById('weekCalBody').innerHTML=html;
+}
+function selectWeek(start){
+ weekSelStart=start;
+ var d=parseDate(start);
+ calYear=d.getFullYear();calMonth=d.getMonth();
+ updateWeekTrigger();
+ document.getElementById('weekPanel').classList.remove('open');
+ document.getElementById('weekTrigger').classList.remove('open');
+ render();
+}
+/* [交互] 年选择:点击「统计时间」打开十年历,点选年份 */
+var yearSel=2026;
+var yearPage=2020; // 当前展示的十年起始
+function updateYearTrigger(){document.getElementById('yearTrigger').textContent=yearSel+'年';}
+function toggleYearPanel(){
+ var open=document.getElementById('yearPanel').classList.toggle('open');
+ document.getElementById('yearTrigger').classList.toggle('open',open);
+ if(open)renderYearPanel();
+}
+function shiftYearPage(delta){yearPage+=delta*10;renderYearPanel();}
+function renderYearPanel(){
+ document.getElementById('yearPageTitle').textContent=yearPage+' - '+(yearPage+9);
+ var html='';
+ for(var i=0;i<10;i++){
+ var y=yearPage+i;
+ html+='
'+y+'
';
+ }
+ document.getElementById('yearPanelBody').innerHTML=html;
+}
+function selectYear(y){
+ yearSel=y;
+ updateYearTrigger();
+ document.getElementById('yearPanel').classList.remove('open');
+ document.getElementById('yearTrigger').classList.remove('open');
+ render();
+}
function curRange(){
- if(period==='week')return ['2026-09-01','2026-09-07'];
- if(period==='month')return ['2026-09-01','2026-09-30'];
- if(period==='year')return ['2026-01-01','2026-12-31'];
+ if(period==='week'){var d=parseDate(weekSelStart);return [fmtDate(d),weekEndOf(d)];}
+ if(period==='month')return monthRange(document.getElementById('monthInput').value);
+ if(period==='year')return [yearSel+'-01-01',yearSel+'-12-31'];
return [document.getElementById('filterFrom').value,document.getElementById('filterTo').value];
}
function head(){
var dimCol=dim==='dep'?'部门':'站点名称';
- return '
序号 单位 '+dimCol+' '
+ var depTh=dim==='station'?'部门 ':'';
+ return '序号 单位 '+depTh+''+dimCol+' '
+'呼叫设备数量 已分配数量 总呼叫次数 已接通次数 未接通次数 '
+'已急救处理次数 未急救处理次数 告警次数 ';
}
-function num(v,color){return '
'+v+' ';}
+function num(v){return '
'+v+' ';}
function render(){
var rg=curRange(),f=rg[0],t=rg[1];
var inRange=!!(f&&t)&&!(t<'2026-09-01'||f>'2026-09-30');
- var list=inRange?rows.slice():[];
+ var list=inRange?rows.filter(function(r){
+ if(dim==='dep'){var u=document.getElementById('filterUnit').value;return !u||r.unit===u;}
+ return (!selUnit||r.unit===selUnit)&&(!selDept||r.dep===selDept);
+ }):[];
document.getElementById('thead').innerHTML=head();
+ var depExtra=dim==='station';
document.getElementById('tbody').innerHTML=list.map(function(r,i){
var dimCell=dim==='dep'?r.dep:r.station;
- return '
'+(i+1)+' '+r.unit+' '+dimCell+' '
- +num(r.dev)+num(r.alloc,r.alloc';
- }).join('')||''+(inRange?'暂无符合条件的统计数据':'所选周期内无统计数据(演示数据仅覆盖 2026-09)')+' ';
+ return ''+(i+1)+' '+r.unit+' '+(depExtra?''+r.dep+' ':'')+''+dimCell+' '
+ +num(r.dev)+num(r.alloc)+num(r.calls)+num(r.ok)+num(r.miss)
+ +num(r.done)+num(r.undone)+num(r.alarm)+' ';
+ }).join('')||''+(inRange?'暂无符合条件的统计数据':'所选周期内无统计数据(演示数据仅覆盖 2026-09)')+' ';
var sum=function(k){return list.reduce(function(s,r){return s+r[k];},0);};
- var tv=list.length?'合计 '+list.length+' 个'+(dim==='dep'?'部门':'站点')+' '
+ var tv=list.length?'合计 '+(depExtra?' ':'')+''+list.length+' 个'+(dim==='dep'?'部门':'站点')+' '
+num(sum('dev'))+num(sum('alloc'))+num(sum('calls'))+num(sum('ok'))+num(sum('miss'))+num(sum('done'))+num(sum('undone'))+num(sum('alarm'))+' ':'';
document.getElementById('tfoot').innerHTML=tv;
document.getElementById('totalTip').textContent='共 '+list.length+' 行 · 统计区间 '+(f||'—')+' 至 '+(t||'—');
}
-/* [交互] 周期切换:非选时隐藏时间范围并即时出数,选时默认展示上一周期区间 */
+/* [交互] 周期切换:周/月/年显示对应可选时间控件(带默认值),选时统计展开起止日期 */
function setPeriod(p){
period=p;
['Week','Month','Year','Custom'].forEach(function(k){document.getElementById('seg'+k).classList.toggle('active',p===k.toLowerCase());});
- document.getElementById('rangeItem').style.display=p==='custom'?'flex':'none';
+ document.getElementById('weekItem').style.display=(p==='week')?'flex':'none';
+ document.getElementById('monthItem').style.display=(p==='month')?'flex':'none';
+ document.getElementById('yearItem').style.display=(p==='year')?'flex':'none';
+ document.getElementById('rangeItem').style.display=(p==='custom')?'flex':'none';
render();
}
function switchDim(d){
dim=d;
document.getElementById('tabDep').classList.toggle('active',d==='dep');
document.getElementById('tabStation').classList.toggle('active',d==='station');
+ document.getElementById('unitFilterItem').style.display=(d==='dep')?'flex':'none';
+ document.getElementById('orgFilterItem').style.display=(d==='station')?'flex':'none';
render();
}
function doExport(){showToast('导出任务已提交,完成后可在「查看导出任务」下载');}
@@ -277,7 +500,7 @@ function showToast(msg){
var t=document.getElementById('toast');t.textContent=msg;t.classList.add('show');
clearTimeout(t._timer);t._timer=setTimeout(function(){t.classList.remove('show');},2200);
}
-render();
+initFilters();updateWeekTrigger();updateYearTrigger();setPeriod('week');