v48: фильтр по месяцам на вкладке Мероприятия

This commit is contained in:
Dauren777 2026-06-09 09:16:57 +00:00
parent 4067e3dfcc
commit 74e4ba272a

View File

@ -110,7 +110,7 @@ function esc(s){return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g
function sb(s){var m={done:"g",warn:"a",late:"r",wait:"w"};return'<span class="badge '+m[s]+'">'+st[s]+'</span>'}
var U={"curator@telecom.kz":{n:"Куратор",b:0,r:"cur"},"dpp@telecom.kz":{n:"Директор ДПБ",b:0,r:"br"},"ahmetov@telecom.kz":{n:"Ахметов К.Т.",b:6,r:"br"},"serikov@telecom.kz":{n:"Сериков А.М.",b:1,r:"br"},"nurlanov@telecom.kz":{n:"Нурланов Д.С.",b:8,r:"br"},"aliev@telecom.kz":{n:"Алиев Г.С.",b:4,r:"br"},"tulegenov@telecom.kz":{n:"Тулегенов Е.А.",b:2,r:"br"},"saparov@telecom.kz":{n:"Сапаров А.Д.",b:3,r:"br"},"maratov@telecom.kz":{n:"Маратов Ж.К.",b:5,r:"br"},"iskakov@telecom.kz":{n:"Искаков Р.Н.",b:7,r:"br"}};
var cu=null,cm=5,cr=0,esi=-1,ex={},sc2=null,sd2=1;
var cu=null,cm=5,cr=0,esi=-1,ex={},sc2=null,sd2=1,evMonth=-1;
function getMD(id,ri,si){ri=ri||0;var k=si>=0?"sf_"+id+"_s"+si+"_r"+ri:"sf_"+id+"_r"+ri;var r=localStorage.getItem(k);return r?JSON.parse(r):{}}
function setMD(id,o,ri,si){ri=ri||0;var k=si>=0?"sf_"+id+"_s"+si+"_r"+ri:"sf_"+id+"_r"+ri;localStorage.setItem(k,JSON.stringify(o))}
@ -181,17 +181,19 @@ function re(){
if(bf)list=list.filter(function(e){return e.b===parseInt(bf)});
if(sc2){list.sort(function(a,b){var va=a[sc2],vb=b[sc2];if(typeof va==="string")va=va.toLowerCase(),vb=vb.toLowerCase();return va>vb?sd2:va<vb?-sd2:0})}
var h='<div class="card"><div class="fr"><input id="sr2" placeholder="Поиск..." oninput="re()"><select id="sf2" onchange="re()"><option value="">Все статусы</option><option value="wait">Не начато</option><option value="warn">В процессе</option><option value="done">Исполнено</option><option value="late">Просрочено</option></select><select id="bf2" onchange="re()"><option value="">Все филиалы</option>'+br.map(function(b,i){return'<option value="'+i+'">'+b+'</option>'}).join("")+'</select><span style="font-size:12px;color:var(--g5);margin-left:auto">Найдено: '+list.length+'</span></div>';
var h='<div class="card"><div class="fr"><input id="sr2" placeholder="Поиск..." oninput="re()"><select id="sf2" onchange="re()"><option value="">Все статусы</option><option value="wait">Не начато</option><option value="warn">В процессе</option><option value="done">Исполнено</option><option value="late">Просрочено</option></select><select id="bf2" onchange="re()"><option value="">Все филиалы</option>'+br.map(function(b,i){return'<option value="'+i+'">'+b+'</option>'}).join("")+'</select><select id="mf2" onchange="evMonth=this.value?parseInt(this.value):-1;re()"><option value="">Все месяцы</option>'+ms.map(function(m,i){return'<option value="'+i+'">'+M(i)+'</option>'}).join("")+'</select><span style="font-size:12px;color:var(--g5);margin-left:auto">Найдено: '+list.length+'</span></div>';
h+='<table><tr>';
[{k:null,l:"№"},{k:null,l:"Мероприятие"},{k:"b",l:"Филиал"},{k:"sec",l:"Раздел"},{k:"due",l:"Срок"},{k:"s",l:"Статус"},{k:null,l:""}].forEach(function(c){h+='<th onclick="sc2=\''+c.k+'\';sd2=sc2===c.k?-sd2:1;re()">'+c.l+(sc2===c.k?(sd2===1?' ▲':' ▼'):'')+'</th>'});
[{k:null,l:"№"},{k:null,l:"Мероприятие"},{k:"b",l:"Филиал"},{k:"sec",l:"Раздел"},{k:"due",l:"Срок"},{k:"s",l:"Статус"},null].forEach(function(c){if(!c){h+='<th>Отчёт за месяц</th>'}else h+='<th onclick="sc2=\''+c.k+'\';sd2=sc2===c.k?-sd2:1;re()">'+c.l+(sc2===c.k?(sd2===1?' ▲':' ▼'):'')+'</th>'});
h+='</tr>';
list.forEach(function(e){
var hs=e.sub&&e.sub.length,s=gsc(e.id),sdd=hs?s.length:0,stt=hs?e.sub.length:0,cl=dls(e);
h+='<tr class="'+cl+'"><td>'+e.id+'</td><td style="font-size:12px;max-width:340px">';
// Month indicator
var mi="";if(evMonth>=0){var mk=ms[evMonth],fc=0,hr=false;reg.forEach(function(ri){var d=getMD(e.id,ri,-1);if(d[mk]){if(d[mk].report)hr=true;fc+=(d[mk].files||[]).length}if(e.sub)e.sub.forEach(function(s,si){var sd=getMD(e.id,ri,si);if(sd[mk]){if(sd[mk].report)hr=true;fc+=(sd[mk].files||[]).length}})});if(hr||fc)mi='<span style="font-size:10px;color:var(--gn)">✅ '+(hr?'отчёт':'')+(fc?' 📎'+fc:'')+'</span>';else mi='<span style="font-size:10px;color:var(--g5)"></span>'}
h+='<tr class="'+cl+'"><td>'+e.id+'</td><td style="font-size:12px;max-width:300px">';
if(hs)h+='<span onclick="toggleEx('+e.id+')" style="cursor:pointer;margin-right:4px">'+(ex[e.id]?'▼':'▶')+'</span>';
h+=esc(e.t);if(hs)h+=' <span style="font-size:10px;color:var(--g5)">('+sdd+'/'+stt+')</span>';
h+='</td><td style="font-size:11px">'+br[e.b]+'</td><td><span class="badge b">'+["I","II","III","IV","V"][e.sec]+'</span></td><td>'+e.due+'</td><td>'+sb(e.s)+'</td><td><button class="btn btn-sm" onclick="oe('+e.id+')">📝</button></td></tr>';
if(hs&&ex[e.id])e.sub.forEach(function(s,i){var ch=s.indexOf(i)>=0;h+='<tr style="background:var(--g1)"><td></td><td style="font-size:11px;padding-left:40px"><input type="checkbox" '+(ch?"checked":"")+' onchange="ts('+e.id+','+i+',this.checked)"> '+s.l+') '+esc(s.t)+'</td><td></td><td></td><td></td><td></td><td></td></tr>'});
h+='</td><td style="font-size:11px">'+br[e.b]+'</td><td><span class="badge b">'+["I","II","III","IV","V"][e.sec]+'</span></td><td>'+e.due+'</td><td>'+sb(e.s)+'</td><td style="text-align:center">'+mi+'</td><td><button class="btn btn-sm" onclick="oe('+e.id+','+(evMonth>=0?evMonth:cm)+')">📝</button></td></tr>';
if(hs&&ex[e.id])e.sub.forEach(function(s,i){var ch=s.indexOf(i)>=0;h+='<tr style="background:var(--g1)"><td></td><td style="font-size:11px;padding-left:40px"><input type="checkbox" '+(ch?"checked":"")+' onchange="ts('+e.id+','+i+',this.checked)"> '+s.l+') '+esc(s.t)+'</td><td></td><td></td><td></td><td></td><td></td><td></td></tr>'});
});
h+='</table></div>';
document.getElementById("pg-ev").innerHTML=h;