fix: 2MB limit, qty fallback, PPT valid, quick months, ZIP by event

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

View File

@ -152,7 +152,7 @@ tr:hover{background:#FAFBFC}
<option value="h1">1-е полугодие</option>
<option value="h2">2-е полугодие</option>
</select>
<span style="font-size:12px;color:#64748B">с</span> <select id="rp_month_from" onchange="renderReports()" style="padding:6px 8px;border:1px solid #E2E8F0;border-radius:6px;font-size:12px">
<div style="display:flex;gap:4px;flex-wrap:wrap;margin-bottom:4px" id="rp_quick_months"></div><span style="font-size:12px;color:#64748B">с</span> <select id="rp_month_from" onchange="renderReports()" style="padding:6px 8px;border:1px solid #E2E8F0;border-radius:6px;font-size:12px">
<option value="0">Январь</option><option value="1">Февраль</option><option value="2">Март</option>
<option value="3">Апрель</option><option value="4">Май</option><option value="5">Июнь</option>
<option value="6">Июль</option><option value="7">Август</option><option value="8">Сентябрь</option>
@ -1313,7 +1313,7 @@ function switchEvMonth(id,subIdx){
var inn=document.getElementById("evn_"+id);var inq=document.getElementById("evq_"+id);
var subSuffix=curSub!==null?"_s"+curSub:"";
if(inn)try{localStorage.setItem("sn_"+id+subSuffix+"_m"+mv,inn.value.trim())}catch(e){}
if(inq)try{localStorage.setItem("sq_"+id+subSuffix+"_m"+mv,(parseInt(inq.value,10)||0).toString())}catch(e){}
if(inq)try{localStorage.setItem("sq_"+id+subSuffix+"_m"+mv,(parseInt(inq.value,10)||inq.value||0).toString())}catch(e){}
try{localStorage.setItem("evmonth_"+id,mv)}catch(e){}
openEv(id,subIdx!==null?subIdx:undefined)
}
@ -1321,7 +1321,7 @@ 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);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){}}
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)||inq.value||0).toString())}catch(e){}}
saveEv();closeModal();renderEv()
}
function chgSt(id){
@ -1343,7 +1343,7 @@ function upFile(id){
var inp=document.getElementById("fu_"+id);
if(!inp||!inp.files||!inp.files[0])return;
var f=inp.files[0];
if(f.size>204800){alert("\u0424\u0430\u0439\u043B \u0431\u043E\u043B\u044C\u0448\u0435 200KB. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441\u0436\u043C\u0438\u0442\u0435 \u0444\u0430\u0439\u043B \u0438\u043B\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043C\u0435\u043D\u044C\u0448\u0438\u0439.");return}
if(f.size>2097152){alert("\u0424\u0430\u0439\u043B \u0431\u043E\u043B\u044C\u0448\u0435 2MB. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441\u0436\u043C\u0438\u0442\u0435 \u0444\u0430\u0439\u043B.");return}
var fr=new FileReader();
var subKey=curSub!==null?"_s"+curSub:"";
var inm=document.getElementById("evm_"+id);
@ -1541,6 +1541,7 @@ function getReportMonths(){
return months
}
function renderReports(){
var qm=document.getElementById("rp_quick_months");if(qm){var mnames=["\u042F\u043D\u0432","\u0424\u0435\u0432","\u041C\u0430\u0440","\u0410\u043F\u0440","\u041C\u0430\u0439","\u0418\u044E\u043D","\u0418\u044E\u043B","\u0410\u0432\u0433","\u0421\u0435\u043D","\u041E\u043A\u0442","\u041D\u043E\u044F","\u0414\u0435\u043A"];var h="";for(var i=0;i<12;i++){h+="<button class='btn btn-sm' style='padding:3px 8px;font-size:11px;"+(i===0?"background:#005BAA;color:#fff":"")+"' onclick=\'document.getElementById(\"rp_period\").value=\"month\";document.getElementById(\"rp_month_from\").value="+i+";document.getElementById(\"rp_month_to\").value="+i+";renderReports()\'>"+mnames[i]+"</button>"}qm.innerHTML=h}
var fl=getFilteredEvs();
var cnt=document.getElementById("rp_count");
if(cnt)cnt.textContent="Выбрано мероприятий: "+fl.length;
@ -1643,7 +1644,7 @@ function dlZip(){
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){}}
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("event_"+e.id+"/"+esc(f.n),bin)}}}}catch(ex){}}
}
}
}
@ -2010,21 +2011,17 @@ function saveUsers(){
try{localStorage.setItem("ext_users",JSON.stringify(ex))}catch(e){}
}
function dlAnalyticsPPT(){
var total=evs.length;
var done=0,late=0,warn=0;
for(var i=0;i<evs.length;i++){
if(evs[i].s==="done")done++;else if(evs[i].s==="late")late++;else warn++
}
var total=evs.length;var done=0,late=0,warn=0;
for(var i=0;i<evs.length;i++){if(evs[i].s==="done")done++;else if(evs[i].s==="late")late++;else warn++}
var pct=total?Math.round(done/total*100):0;
var brd=[];
for(var i=0;i<brs.length;i++){brd.push({n:brs[i],t:0,d:0})}
var brd=[];for(var i=0;i<brs.length;i++){brd.push({n:brs[i],t:0,d:0})}
for(var i=0;i<evs.length;i++){var e=evs[i];brd[e.b].t++;if(e.s==="done")brd[e.b].d++}
brd.sort(function(a,b){return(b.d/b.t||0)-(a.d/a.t||0)});
var h="<!DOCTYPE html><html><head><meta charset='utf-8'><title>\u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430 HSE</title><style>body{font:16px Arial;padding:30px}@page{size:A4 landscape;margin:10mm}h1{color:#005BAA;font-size:24px}.num{font-size:36px;font-weight:800;color:#005BAA}.bar{height:20px;background:#005BAA;border-radius:4px;margin:2px 0}table{border-collapse:collapse}td{padding:8px 16px;border:1px solid #ddd}@media print{body{padding:5mm}}</style></head><body><h1>QAZAQtelecom HSE \u2014 \u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430</h1><p>\u0414\u0430\u0442\u0430: "+new Date().toLocaleDateString("ru-RU")+"</p><br><table><tr><td style='text-align:center'><div class='num'>"+total+"</div>\u0412\u0441\u0435\u0433\u043E</td><td style='text-align:center'><div class='num'>"+done+"</div>\u0418\u0441\u043F\u043E\u043B\u043D\u0435\u043D\u043E</td><td style='text-align:center'><div class='num'>"+warn+"</div>\u0412 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0435</td><td style='text-align:center'><div class='num'>"+late+"</div>\u041F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u043E</td></tr></table><br><p>\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435: <strong>"+pct+"%</strong></p><div class='bar' style='width:"+Math.round(pct*4)+"px'></div><br><h3>\u0420\u0435\u0439\u0442\u0438\u043D\u0433 \u0444\u0438\u043B\u0438\u0430\u043B\u043E\u0432</h3><table>";
for(var i=0;i<brd.length;i++){var bp=brd[i].t?Math.round(brd[i].d/brd[i].t*100):0;h+="<tr><td>"+(i+1)+". "+esc(brd[i].n)+"</td><td>"+brd[i].d+"/"+brd[i].t+"</td><td><div class='bar' style='width:"+bp+"px'></div></td><td>"+bp+"%</td></tr>"}
h+="</table></body></html>";
var blob=new Blob([h],{type:"application/vnd.openxmlformats-officedocument.presentationml.presentation"});
var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="analytics_"+new Date().toISOString().slice(0,10)+".pptx";a.click()
var h="<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:p='urn:schemas-microsoft-com:office:powerpoint'><head><meta charset='utf-8'><title>\u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430 HSE</title><style>body{font:18px Arial;padding:30px}@page{size:A4 landscape;margin:15mm}h1{color:#005BAA;font-size:28px}.num{font-size:48px;font-weight:800;color:#005BAA}.pct{font-size:72px;font-weight:800;color:"+(pct>=70?"#10B981":pct>=40?"#F59E0B":"#EF4444")+"}.bar{height:28px;background:#005BAA;border-radius:6px;margin:8px 0}.slide{page-break-after:always;min-height:350px}table{border-collapse:collapse;width:100%}td{padding:12px 20px;border:1px solid #ddd;font-size:16px}th{background:#0A1628;color:#fff;padding:10px 14px;font-size:13px}</style></head><body><div class='slide'><h1>QAZAQtelecom HSE \u2014 \u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430 \u041F\u0411</h1><p>\u0414\u0430\u0442\u0430: "+new Date().toLocaleDateString("ru-RU")+"</p><br><div style='text-align:center'><div class='pct'>"+pct+"%</div><p style='font-size:20px;color:#64748B'>\u041E\u0431\u0449\u0438\u0439 \u043F\u0440\u043E\u0446\u0435\u043D\u0442 \u0438\u0441\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F</p></div><br><table><tr><td style='text-align:center'><div class='num'>"+total+"</div>\u0412\u0441\u0435\u0433\u043E</td><td style='text-align:center'><div class='num'>"+done+"</div>\u0418\u0441\u043F\u043E\u043B\u043D\u0435\u043D\u043E</td><td style='text-align:center'><div class='num'>"+warn+"</div>\u0412 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0435</td><td style='text-align:center'><div class='num' style='color:#EF4444'>"+late+"</div>\u041F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u043E</td></tr></table><div class='bar' style='width:"+Math.round(pct*5)+"px'></div></div><div class='slide'><h2>\u0420\u0435\u0439\u0442\u0438\u043D\u0433 \u0444\u0438\u043B\u0438\u0430\u043B\u043E\u0432</h2><table><tr><th>\u2116</th><th>\u0424\u0438\u043B\u0438\u0430\u043B</th><th>\u0412\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u043E</th><th>%</th></tr>";
for(var i=0;i<brd.length;i++){var bp=brd[i].t?Math.round(brd[i].d/brd[i].t*100):0;h+="<tr><td>"+(i+1)+"</td><td>"+esc(brd[i].n)+"</td><td>"+brd[i].d+"/"+brd[i].t+"</td><td><div class='bar' style='width:"+(bp*2)+"px'></div> "+bp+"%</td></tr>"}
h+="</table></div></body></html>";
var blob=new Blob([h],{type:"application/vnd.ms-powerpoint"});
var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="analytics_"+new Date().toISOString().slice(0,10)+".ppt";a.click()
}
function dlAnalyticsPDF(){
var h=document.getElementById("tab_analytics").innerHTML;
@ -2043,6 +2040,6 @@ function dlAnalyticsWord(){
var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="analytics.doc";a.click()
}
</script></script></script></script></script>
</script></script></script></script></script></script>
</body>
</html>