diff --git a/index.html b/index.html index 5a11f21..034d065 100644 --- a/index.html +++ b/index.html @@ -270,7 +270,855 @@ function subResp(r,letter){ } }else{ if(found)cur+=String.fromCharCode(10)+p + } } + return cur||"" +} + +function init(){ + try{ + var su=localStorage.getItem("su"); + if(su)cu=JSON.parse(su); + }catch(e){} + loadEv(); + var fb=document.getElementById("fb"); + if(fb){ + for(var i=0;i"; + h+="
"+esc(secs[e.sec])+"
"; + lastSec=e.sec + } + var dr=daysRem(e.due); + var rowCl=e.s==="done"?"tr-green":dr<=0&&e.s!=="done"?"tr-red":dr<=14?"tr-amber":""; + var cl=stc[e.s]||"w"; + var drText=dr<=0&&e.s!=="done"?"Просрочено на "+Math.abs(dr)+" дн.":e.s==="done"?"Готово":dr===999?"\u2014":dr+" дн."; + var hasSub=e.sub&&e.sub.length>0; + h+=""; + h+=""+e.id+""; + h+="
"+esc(e.t)+"
"+esc(e.dname)+"
"; + h+=""+esc(nl2c(e.r))+""; + h+=""+e.due+" ("+drText+")"; + if(hasSub){h+=""} + else{ + h+=""+stn[e.s]+""; + h+="" + } + h+=""; + if(hasSub){ + for(var si=0;si"+e.id+"."+esc(e.sub[si].l)+""; + h+=""+esc(e.sub[si].t)+""; + h+=""+esc(sr)+""; + h+=""+e.due+""; + h+=""+stn[ss]+""; + h+="" + } + } + } + if(!h)h="

Нет мероприятий

"; + document.getElementById("ev_content").innerHTML=""+h+"
NМероприятиеОтветственныеСрокСтатус
" +} + +function togSub(id){ + var el=document.getElementById("sub_"+id); + if(!el)return; + var arr=document.getElementById("arr_"+id); + if(el.style.display==="none"){ + el.style.display="block"; + if(arr)arr.innerHTML="▼" + }else{ + el.style.display="none"; + if(arr)arr.innerHTML="▸" + } +} +function chkSub(id,idx,val){ + var key="ss_"+id; + var ss=localStorage.getItem(key); + var arr=[]; + if(ss){try{arr=JSON.parse(ss)}catch(e){}} + arr[idx]=val?true:false; + try{localStorage.setItem(key,JSON.stringify(arr))}catch(e){} + renderEv() +} + +function openEv(id,subIdx){ + curSub=subIdx!==undefined?subIdx:null; + var e=null; + for(var i=0;i"; + h+="
Ответственный: "+esc(nl2c(e.r))+"
"; + h+="
Филиал: "+brs[e.b]+" | Срок: "+e.due; + if(e.done&&e.done!=="\u2014")h+=" | Исполнено: "+e.done; + h+="
"; + h+="
Статус:
"; + if(e.h&&e.h.length){ + h+="
История:
    "; + for(var hi=0;hi"+esc(e.h[hi])+""} + h+="
" + } + h+="
AI-анализ: "+esc(e.ai||"\u2014")+"
"; + h+="
Отчётность:
"; + h+="
"; + h+="Количество: "; + var now=new Date(); + var curMonth=now.getMonth(); + h+="Месяц:
"; + h+="
"; + h+="
Файлы:"; + if(cu&&cu.bg===0){ + for(var bi=0;bi
"; + for(var fi=0;fi("+(f.s?Math.round(f.s/1024)+"KB":"")+", "+esc(f.u||"")+" "+esc(f.d||"")+")СкачатьУдалить" + } + }catch(ex){} + } + } + }else{ + var bk=fk+"_b"+(cu?cu.bg:0); + var fd=localStorage.getItem(bk); + if(fd){ + try{ + var fa=JSON.parse(fd); + for(var fi=0;fi("+(f.s?Math.round(f.s/1024)+"KB":"")+", "+esc(f.u||"")+" "+esc(f.d||"")+")СкачатьУдалить" + } + }catch(ex){} + } + } + h+="
"; + h+=""; + if(subIdx===undefined&&e.sub&&e.sub.length>0){ + h+="
Подпункты:"; + var ss=localStorage.getItem("ss_"+e.id); + for(var si=0;si "+esc(e.sub[si].l)+") "+esc(e.sub[si].t)+"
" + } + h+="" + } + h+="
"; + h+="
"; + h+=""; + showModal(h) +} + +function showModal(html){ + var mb=document.getElementById("modal_body"); + var m=document.getElementById("modal"); + if(!mb||!m)return; + mb.innerHTML=html; + m.style.display="flex" +} +function closeModal(){ + document.getElementById("modal").style.display="none" +} + +function saveEvModal(id){ + var sel=document.getElementById("evs_"+id); + var inq=document.getElementById("evq_"+id); + var inn=document.getElementById("evn_"+id); + for(var i=0;i3145728){alert("\u0424\u0430\u0439\u043B \u0431\u043E\u043B\u044C\u0448\u0435 3MB");return} + var fr=new FileReader(); + var subKey=curSub!==null?"_s"+curSub:""; + var brKey="_b"+(cu?cu.bg:0); + fr.onload=function(){ + var key="sf_"+id+subKey+brKey; + var arr=[]; + var ex=localStorage.getItem(key); + if(ex){try{arr=JSON.parse(ex)}catch(e){}} + var d=new Date(); + arr.push({n:f.name,s:f.size,d:d.getDate()+"."+String(d.getMonth()+1).padStart(2,"0")+"."+d.getFullYear(),u:cu?cu.n:"",data:fr.result}); + try{localStorage.setItem(key,JSON.stringify(arr))}catch(e){alert("\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F")} + openEv(id,curSub!==null?curSub:undefined) + }; + fr.readAsDataURL(f) +} +function dlFile(id,idx){ + var key="sf_"+id+(curSub!==null?"_s"+curSub:"")+"_b"+(cu?cu.bg:0); + var ex=localStorage.getItem(key); + if(!ex)return; + try{ + var arr=JSON.parse(ex); + var f=arr[idx]; + if(!f||!f.data)return; + var a=document.createElement("a"); + a.href=f.data; + a.download=f.n; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a) + }catch(e){} +} +function delFile(id,idx){ + if(!confirm("\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0444\u0430\u0439\u043B?"))return; + var key="sf_"+id+(curSub!==null?"_s"+curSub:"")+"_b"+(cu?cu.bg:0); + var ex=localStorage.getItem(key); + if(!ex)return; + try{ + var arr=JSON.parse(ex); + arr.splice(idx,1); + if(arr.length){localStorage.setItem(key,JSON.stringify(arr))} + else{localStorage.removeItem(key)} + openEv(id,curSub!==null?curSub:undefined) + }catch(e){} +} + +function saveBackup(){ + saveEv(); + var blob=new Blob([JSON.stringify(evs,null,2)],{type:"application/json"}); + var a=document.createElement("a"); + a.href=URL.createObjectURL(blob); + a.download="backup_"+new Date().toISOString().slice(0,10)+".json"; + a.click() +} +function loadBackup(inp){ + if(!inp.files||!inp.files[0])return; + var fr=new FileReader(); + fr.onload=function(){ + try{ + var d=JSON.parse(fr.result); + if(!d||!d.length){alert("\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442");return} + var out=[]; + for(var i=0;i"; + html+="
\u0418\u0441\u043F\u043E\u043B\u043D\u0435\u043D\u043E
"+done+"
"+Math.round(done/total*100)+"%
"; + html+="
\u041F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u043E
"+late+"
"; + html+="
В процессе
"+warn+"
"; + document.getElementById("an_stats").innerHTML=html; + + var problem=[]; + for(var i=0;i"+esc(pt[i].t)+""+brs[pt[i].b]+""+stn[pt[i].s]+""+(pt[i].dr<=0?"\u041F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u043E":pt[i].dr+" \u0434\u043D.")+"" + } + ph+=""; + document.getElementById("an_top").innerHTML=ph + }else{ + document.getElementById("an_top").innerHTML="

\u041F\u0440\u043E\u0431\u043B\u0435\u043C \u043D\u0435\u0442

" + } +} + +function getFilteredEvs(){ + var period=document.getElementById("rp_period").value; + var statusF=document.getElementById("rp_status").value; + var year=parseInt(document.getElementById("rp_year").value,10)||2026; + var month=parseInt(document.getElementById("rp_month").value,10)||0; + var months=[]; + if(period==="month"){months=[month]} + else if(period==="q1"){months=[0,1,2]} + else if(period==="q2"){months=[3,4,5]} + else if(period==="q3"){months=[6,7,8]} + else if(period==="q4"){months=[9,10,11]} + else if(period==="h1"){months=[0,1,2,3,4,5]} + else if(period==="h2"){months=[6,7,8,9,10,11]} + else if(period==="year"){months=[0,1,2,3,4,5,6,7,8,9,10,11]} + var r=[]; + for(var i=0;i

План производственной безопасности

QAZAQtelecom HSE за "+month+"."+year+"


"; + for(var i=0;i=0?"_s"+si:""; + for(var bk=0;bk"+esc(f.n)+" ("+Math.round((f.s||0)/1024)+" KB"+", "+esc(f.u||"")+")" + }}catch(ex){} + } + } + if(fhtml)fhtml="
"+fhtml+"
"; + hh+="
" + } + hh+="
NМероприятиеСрокСтатусКол-воПримечание / Файлы
"+e.id+""+esc(e.t)+""+e.due+""+stn[e.s]+""+(e.q||"")+""+notes+fhtml+"


Отчёт сформирован: "+new Date().toLocaleDateString("ru-RU")+"

"; + var blob=new Blob([hh],{type:"text/html"}); + var a=document.createElement("a"); + a.href=URL.createObjectURL(blob); + a.download="report_pb_"+year+"_"+month+".html"; + a.click() +} +function dlWord(){ + var fl=getFilteredEvs(); + var month=parseInt(document.getElementById("rp_month").value,10)+1; + var year=document.getElementById("rp_year").value; + var hh="Отчёт План ПБ "+month+"."+year+"

План производственной безопасности

AO «Казахтелеком» за "+month+"."+year+"


"; + for(var i=0;i" + } + hh+="
NМероприятиеФилиалСрокСтатусПрогрессКол-воПримечание
"+esc(e.t)+""+brs[e.b]+""+e.due+""+stn[e.s]+""+(e.p||0)+"%"+(e.q||"")+""+esc(e.n||"")+"


Отчёт сформирован: "+new Date().toLocaleDateString("ru-RU")+"

"; + var blob=new Blob([hh],{type:"application/msword"}); + var a=document.createElement("a"); + a.href=URL.createObjectURL(blob); + a.download="report_pb_"+year+"_"+month+".doc"; + a.click() +} +function dlPdf(){ + var fl=getFilteredEvs(); + var month=parseInt(document.getElementById("rp_month").value,10)+1; + var year=document.getElementById("rp_year").value; + var hh="Отчёт План ПБ "+month+"."+year+"

План производственной безопасности

AO «Казахтелеком» за "+month+"."+year+"


"; + for(var i=0;i" + } + hh+="
NМероприятиеФилиалСрокСтатусПрогрессКол-воПримечание
"+esc(e.t)+""+brs[e.b]+""+e.due+""+stn[e.s]+""+(e.p||0)+"%"+(e.q||"")+""+esc(e.n||"")+"


Отчёт сформирован: "+new Date().toLocaleDateString("ru-RU")+"