fix: remove duplicate saveEvModal, add ZIP export with files, fix qty always 1

This commit is contained in:
Dauren777 2026-06-11 10:41:04 +00:00
parent eeb642101d
commit 276c773e74

View File

@ -179,6 +179,7 @@ tr:hover{background:#FAFBFC}
<button class="btn btn-sm" onclick="dlHTML()">HTML</button>
<button class="btn btn-sm btn-o" onclick="dlWord()">Word</button>
<button class="btn btn-sm btn-r" onclick="dlPdf()">PDF</button>
<button class="btn btn-sm" style="background:#7C3AED;color:#fff" onclick="dlZip()">ZIP</button>
</div>
<p id="rp_count" style="font-size:12px;color:#64748B;margin-top:8px"></p>
</div>
@ -1323,13 +1324,6 @@ function saveEvModal(id){
if(inm){var mv=inm.value;try{localStorage.setItem("evmonth_"+id,mv)}catch(e){};var inq=document.getElementById("evq_"+id);var inn=document.getElementById("evn_"+id);var subSuffix2=curSub!==null?"_s"+curSub:"";if(inn)try{localStorage.setItem("sn_"+id+subSuffix2+"_m"+mv,inn.value.trim())}catch(e){};if(inq)try{localStorage.setItem("sq_"+id+subSuffix2+"_m"+mv,(parseInt(inq.value,10)||0).toString())}catch(e){}}
saveEv();closeModal();renderEv()
}
function saveEvModal(id){
var sel=document.getElementById("evs_"+id);
for(var i=0;i<evs.length;i++){if(evs[i].id===id){if(sel)evs[i].s=sel.value;if(sel&&sel.value==="done"&&(evs[i].done==="\u2014"||!evs[i].done)){var d=new Date();evs[i].done=d.getDate()+"."+String(d.getMonth()+1).padStart(2,"0")+"."+d.getFullYear()}break}}
var inm=document.getElementById("evm_"+id);
if(inm){var mv=inm.value;try{localStorage.setItem("evmonth_"+id,mv)}catch(e){};var inq=document.getElementById("evq_"+id);var inn=document.getElementById("evn_"+id);if(inn)try{localStorage.setItem("sn_"+id+"_m"+mv,inn.value.trim())}catch(e){};if(inq)try{localStorage.setItem("sq_"+id+"_m"+mv,(parseInt(inq.value,10)||0).toString())}catch(e){}}
saveEv();closeModal();renderEv()
}
function chgSt(id){
var sel=document.getElementById("evs_"+id);
if(!sel)return;
@ -1621,6 +1615,48 @@ function dlPdf(){
hh+="</table><p><em>\\u041E\\u0442\\u0447\\u0451\\u0442 \\u0441\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u043D: "+new Date().toLocaleDateString("ru-RU")+"</em></p><script>window.onload=function(){window.print()}<\/script></body></html>";
var w=window.open("","_blank","width=900,height=700");w.document.write(hh);w.document.close()
}
function dlZip(){
var fl=getFilteredEvs();var periodLabel=getReportPeriod();
var zipParts=[];var offsets=[];var centralDir=[];var offset=0;
function addFile(name,bytes){
var encoder=new TextEncoder();var data=typeof bytes==="string"?encoder.encode(bytes):new Uint8Array(bytes);
var nameBytes=encoder.encode(name);var crc=crc32(data);
var localHeader=new Uint8Array(30+nameBytes.length);var v=new DataView(localHeader.buffer);
v.setUint32(0,0x04034b50,true);v.setUint16(8,0,true);v.setUint16(10,0,true);v.setUint16(26,nameBytes.length,true);
v.setUint32(14,crc,true);v.setUint32(18,data.length,true);v.setUint32(22,data.length,true);
localHeader.set(nameBytes,30);zipParts.push(localHeader);zipParts.push(data);
var cd=new Uint8Array(46+nameBytes.length);var cdv=new DataView(cd.buffer);
cdv.setUint32(0,0x02014b50,true);cdv.setUint16(8,0,true);cdv.setUint16(10,0,true);cdv.setUint16(28,nameBytes.length,true);
cdv.setUint32(16,crc,true);cdv.setUint32(20,data.length,true);cdv.setUint32(24,data.length,true);cdv.setUint32(42,offset,true);
cd.set(nameBytes,46);centralDir.push(cd);offset+=30+nameBytes.length+data.length
}
function crc32(data){var c=0xffffffff;for(var i=0;i<data.length;i++){c^=data[i];for(var j=0;j<8;j++){if(c&1)c=(c>>>1)^0xedb88320;else c>>>=1}}return(c^0xffffffff)>>>0}
var html='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Отчёт ПБ за '+periodLabel+'</title><style>body{font:14px Arial;padding:20px}h2{font-size:20px}h3{font-size:14px;color:#005BAA;border-bottom:1px solid #ccc}.meta{font-size:12px;color:#555}.desc{font-size:12px;margin:6px 0;padding:8px;background:#f9f9f9}.files{font-size:11px;margin:4px 0}</style></head><body><h2>План ПБ — QAZAQtelecom HSE</h2><p>Период: '+periodLabel+'</p><p>Дата: '+new Date().toLocaleDateString("ru-RU")+'</p><br>';
for(var i=0;i<fl.length;i++){var e=fl[i];var sn=secs[e.sec].split(". ")[1]||secs[e.sec];
html+='<h3>N'+e.id+'. '+esc(e.t)+'</h3><div class="meta">Раздел | '+esc(sn)+' | Срок: '+e.due+' | '+stn[e.s]+'</div>';
if(e.n)html+='<div class="desc"><strong>Описание:</strong> '+esc(e.n)+'</div>';
if(e.q)html+='<div>Количество: '+e.q+'</div>'
}
html+='<p><em>Отчёт сформирован: '+new Date().toLocaleDateString("ru-RU")+'</em></p></body></html>';
addFile("report.html",html);
for(var i=0;i<fl.length;i++){var e=fl[i];
for(var mi=0;mi<12;mi++){var mk="_m"+mi;
for(var si=-1;si<(e.sub?e.sub.length:0);si++){var sk=si>=0?"_s"+si:"";
for(var bk=0;bk<brs.length;bk++){var key="sf_"+e.id+mk+sk+"_b"+bk;var fd=localStorage.getItem(key);
if(fd){try{var arr=JSON.parse(fd);for(var fi=0;fi<arr.length;fi++){var f=arr[fi];if(f&&f.n&&f.data){var b64=f.data.split(",")[1];if(b64){var bin=Uint8Array.from(atob(b64),function(c){return c.charCodeAt(0)});addFile("files/"+esc(f.n),bin)}}}}catch(ex){}}
}
}
}
}
var cdOffset=offset;for(var i=0;i<centralDir.length;i++)zipParts.push(centralDir[i]);
var cdSize=zipParts.reduce(function(s,p){return s+p.length},0)-cdOffset;
var eocd=new Uint8Array(22);var ev=new DataView(eocd.buffer);
ev.setUint32(0,0x06054b50,true);ev.setUint16(8,centralDir.length,true);ev.setUint16(10,centralDir.length,true);
ev.setUint32(12,cdSize,true);ev.setUint32(16,cdOffset,true);
zipParts.push(eocd);
var blob=new Blob(zipParts,{type:"application/zip"});
var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="report_pb_"+periodLabel.replace(/\s/g,"_")+".zip";a.click()
}
function hseSend(){
var btn=document.getElementById("hse_btn");
var result=document.getElementById("hse_result");