fix v3: per-month descriptions/files, report format with section+deadline+status inline
This commit is contained in:
parent
5ff4b44327
commit
c43e7b38c6
87
index.html
87
index.html
@ -1258,7 +1258,7 @@ function openEv(id,subIdx){
|
||||
h+=">"+mnames[mi]+"</option>"
|
||||
}
|
||||
h+="</select></div>";
|
||||
h+="<div style='margin-bottom:12px'><textarea id='evn_"+e.id+"' placeholder='Примечание / описание выполнения...' style='width:100%;padding:8px;border:1px solid #E2E8F0;border-radius:6px;font-size:12px;resize:vertical;min-height:50px'>"+esc(subIdx!==undefined?((localStorage.getItem("sn_"+e.id+"_s"+subIdx)||"")):(e.n||""))+"</textarea></div>";
|
||||
h+="<div style='margin-bottom:12px'><textarea id='evn_"+e.id+"' placeholder='Примечание / описание выполнения...' style='width:100%;padding:8px;border:1px solid #E2E8F0;border-radius:6px;font-size:12px;resize:vertical;min-height:50px'>"+esc(subIdx!==undefined?((localStorage.getItem("sn_"+e.id+"_s"+subIdx)||"")):(localStorage.getItem("sn_"+e.id+"_m"+selMonth)||e.n||""))+"</textarea></div>";
|
||||
h+="<div style='margin-bottom:12px'><strong>Файлы:</strong>";
|
||||
if(cu&&cu.bg===0){
|
||||
for(var bi=0;bi<brs.length;bi++){
|
||||
@ -1319,13 +1319,9 @@ function closeModal(){
|
||||
|
||||
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;i<evs.length;i++){
|
||||
if(evs[i].id===id){
|
||||
if(sel)evs[i].s=sel.value;
|
||||
if(inq)evs[i].q=parseInt(inq.value,10)||0;
|
||||
if(inn){if(curSub!==null){try{localStorage.setItem("sn_"+id+"_s"+curSub,inn.value.trim())}catch(e){}}else{evs[i].n=inn.value.trim()}}
|
||||
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()
|
||||
@ -1334,7 +1330,13 @@ function saveEvModal(id){
|
||||
}
|
||||
}
|
||||
var inm=document.getElementById("evm_"+id);
|
||||
if(inm)try{localStorage.setItem("evmonth_"+id,inm.value)}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);
|
||||
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()
|
||||
@ -1567,68 +1569,55 @@ function dlHTML(){
|
||||
var fl=getFilteredEvs();
|
||||
var periodLabel=getReportPeriod();
|
||||
var months=getReportMonths();
|
||||
var hh="<!DOCTYPE html><html><head><meta charset='utf-8'><title>\u041E\u0442\u0447\u0451\u0442 \u041F\u0411 \u0437\u0430 "+periodLabel+"</title><style>body{font:14px Arial,sans-serif;padding:30px;color:#1A1A2E} h2{font-size:20px;margin-bottom:4px} h3{font-size:14px;color:#005BAA;margin:16px 0 4px;border-bottom:1px solid #ddd;padding-bottom:4px} table.info{border-collapse:collapse;width:100%;margin-bottom:6px} table.info td{border:1px solid #e0e0e0;padding:4px 10px;font-size:12px} table.info td.lbl{background:#f5f5f5;font-weight:600;width:80px} .desc{font-size:12px;color:#64748B;margin:4px 0 8px 0;padding:8px;background:#F8FAFC;border-radius:4px;border-left:3px solid #005BAA} .files{margin:4px 0 8px 0;font-size:11px} .files a{color:#005BAA;display:block;margin:2px 0;padding:2px 6px;background:#EEF2FF;border-radius:3px} .files strong{color:#1A1A2E} .qty{font-weight:600;color:#2E7D32;margin:4px 0} @media print{body{padding:10mm}}</style></head><body><h2>\u041F\u043B\u0430\u043D \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0439 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438</h2><p>QAZAQtelecom HSE \u0437\u0430 "+periodLabel+"</p><p style='font-size:11px;color:#64748B'>\u041E\u0442\u0447\u0451\u0442 \u0441\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D: "+new Date().toLocaleDateString("ru-RU")+"</p><br>";
|
||||
var hh="<!DOCTYPE html><html><head><meta charset='utf-8'><title>\u041E\u0442\u0447\u0451\u0442 \u041F\u0411 \u0437\u0430 "+periodLabel+"</title><style>body{font:14px Arial,sans-serif;padding:30px;color:#1A1A2E} h2{font-size:20px;margin-bottom:4px} h3{font-size:14px;color:#005BAA;margin:16px 0 4px;border-bottom:1px solid #ddd;padding-bottom:6px} .meta{font-size:12px;color:#64748B;margin:2px 0 6px 0} .meta span{display:inline-block;margin-right:16px} .desc{font-size:12px;color:#555;margin:6px 0;padding:8px;background:#F8FAFC;border-radius:4px;border-left:3px solid #005BAA} .files{margin:6px 0 8px 0;font-size:11px} .files a{color:#005BAA;display:block;margin:2px 0;padding:2px 6px;background:#EEF2FF;border-radius:3px} .qty{font-weight:600;color:#2E7D32;margin:4px 0} @media print{body{padding:10mm}}</style></head><body><h2>\u041F\u043B\u0430\u043D \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0439 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438</h2><p>QAZAQtelecom HSE \u0437\u0430 "+periodLabel+"</p><p style='font-size:11px;color:#64748B'>\u041E\u0442\u0447\u0451\u0442 \u0441\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D: "+new Date().toLocaleDateString("ru-RU")+"</p><br>";
|
||||
for(var i=0;i<fl.length;i++){
|
||||
var e=fl[i];
|
||||
var secName=secs[e.sec].split(". ")[1]||secs[e.sec];
|
||||
hh+="<h3>N"+e.id+". "+esc(e.t)+"</h3>";
|
||||
hh+="<table class='info'><tr><td class='lbl'>\u0421\u0440\u043E\u043A</td><td>"+e.due+"</td><td class='lbl'>\u0421\u0442\u0430\u0442\u0443\u0441</td><td>"+stn[e.s]+"</td></tr></table>";
|
||||
if(e.n)hh+="<div class='desc'><strong>\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435:</strong><br>"+esc(e.n)+"</div>";
|
||||
if(e.q)hh+="<div class='qty'>\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: "+e.q+"</div>";
|
||||
hh+="<div class='meta'><span>\u0420\u0430\u0437\u0434\u0435\u043B | "+esc(secName)+"</span><span>\u0421\u0440\u043E\u043A: "+e.due+"</span><span>\u0421\u0442\u0430\u0442\u0443\u0441: "+stn[e.s]+"</span></div>";
|
||||
var reportNote="";var reportQty=0;
|
||||
for(var mi=0;mi<months.length;mi++){
|
||||
var nk="sn_"+e.id+"_m"+months[mi];var sv=localStorage.getItem(nk);
|
||||
if(sv){reportNote=sv;break}
|
||||
var qk="sq_"+e.id+"_m"+months[mi];var qv=localStorage.getItem(qk);
|
||||
if(qv)reportQty=parseInt(qv,10)||0
|
||||
}
|
||||
if(!reportNote&&e.n)reportNote=e.n;
|
||||
if(!reportQty&&e.q)reportQty=e.q;
|
||||
if(reportNote)hh+="<div class='desc'><strong>\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F:</strong><br>"+esc(reportNote)+"</div>";
|
||||
if(reportQty)hh+="<div class='qty'>\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: "+reportQty+"</div>";
|
||||
var fhtml="";
|
||||
for(var mi=0;mi<months.length;mi++){
|
||||
for(var si=-1;si<(e.sub?e.sub.length:0);si++){
|
||||
var sk=si>=0?"_s"+si:"";
|
||||
var mk="_m"+months[mi];
|
||||
var sk=si>=0?"_s"+si:"";var mk="_m"+months[mi];
|
||||
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)fhtml+="<a href='"+f.data+"' download='"+esc(f.n)+"'>\uD83D\uDCC4 "+esc(f.n)+" ("+Math.round((f.s||0)/1024)+" KB)</a>"
|
||||
}}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)fhtml+="<a href='"+f.data+"' download='"+esc(f.n)+"'>"+esc(f.n)+" ("+Math.round((f.s||0)/1024)+" KB)</a>"}}catch(ex){}}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(fhtml)hh+="<div class='files'><strong>\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044E\u0449\u0438\u0435 \u0444\u0430\u0439\u043B\u044B:</strong><br>"+fhtml+"</div>";
|
||||
}
|
||||
hh+="<br><p style='font-size:11px;color:#64748B'><em>\u041E\u0442\u0447\u0451\u0442 \u0441\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D: "+new Date().toLocaleDateString("ru-RU")+"</em></p></body></html>";
|
||||
hh+="<p style='font-size:11px;color:#64748B'><em>\u041E\u0442\u0447\u0451\u0442 \u0441\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D: "+new Date().toLocaleDateString("ru-RU")+"</em></p></body></html>";
|
||||
var blob=new Blob([hh],{type:"text/html"});
|
||||
var a=document.createElement("a");
|
||||
a.href=URL.createObjectURL(blob);
|
||||
a.download="report_pb_"+periodLabel.replace(/\s/g,"_")+".html";
|
||||
a.click()
|
||||
var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="report_pb_"+periodLabel.replace(/\s/g,"_")+".html";a.click()
|
||||
}
|
||||
function dlWord(){
|
||||
var fl=getFilteredEvs();
|
||||
var periodLabel=getReportPeriod();
|
||||
var months=getReportMonths();
|
||||
var hh="<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word' xmlns='http://www.w3.org/TR/REC-html40'><head><meta charset='utf-8'><title>\u041E\u0442\u0447\u0451\u0442 \u041F\u0411 \u0437\u0430 "+periodLabel+"</title><style>@page{size:A4;margin:20mm}body{font:12pt 'Times New Roman'}h2{font-size:16pt;text-align:center}h3{font-size:12pt;color:#005BAA;border-bottom:1px solid #ccc}table{border-collapse:collapse;width:100%;margin-bottom:8pt}td{padding:4pt 10pt;border:1px solid #ccc;font-size:10pt}td.lbl{background:#eee;font-weight:600;width:60pt}.files{font-size:9pt;margin:4pt 0}.files a{color:#005BAA;display:block}</style></head><body><h2>\u041F\u043B\u0430\u043D \u041F\u0411</h2><p style='text-align:center'>AO \u00AB\u041A\u0430\u0437\u0430\u0445\u0442\u0435\u043B\u0435\u043A\u043E\u043C\u00BB \u0437\u0430 "+periodLabel+"</p><br>";
|
||||
for(var i=0;i<fl.length;i++){
|
||||
var e=fl[i];
|
||||
var fl=getFilteredEvs();var periodLabel=getReportPeriod();var months=getReportMonths();
|
||||
var hh="<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:w='urn:schemas-microsoft-com:office:word' xmlns='http://www.w3.org/TR/REC-html40'><head><meta charset='utf-8'><title>\u041E\u0442\u0447\u0451\u0442 \u041F\u0411 \u0437\u0430 "+periodLabel+"</title><style>@page{size:A4;margin:20mm}body{font:12pt 'Times New Roman'}h2{font-size:16pt;text-align:center}h3{font-size:12pt;color:#005BAA;border-bottom:1px solid #ccc;padding-bottom:4pt}.meta{font-size:10pt;color:#555;margin:2pt 0 6pt 0}.desc{font-size:10pt;color:#555;margin:4pt 0;padding:6pt;background:#f9f9f9}.files{font-size:9pt;margin:4pt 0}.files a{color:#005BAA;display:block}.qty{font-weight:600;color:#2E7D32}</style></head><body><h2>\u041F\u043B\u0430\u043D \u041F\u0411</h2><p style='text-align:center'>AO \u00AB\u041A\u0430\u0437\u0430\u0445\u0442\u0435\u043B\u0435\u043A\u043E\u043C\u00BB \u0437\u0430 "+periodLabel+"</p><br>";
|
||||
for(var i=0;i<fl.length;i++){var e=fl[i];var secName=secs[e.sec].split(". ")[1]||secs[e.sec];
|
||||
hh+="<h3>N"+e.id+". "+esc(e.t)+"</h3>";
|
||||
hh+="<table><tr><td class='lbl'>\u0421\u0440\u043E\u043A</td><td>"+e.due+"</td><td class='lbl'>\u0421\u0442\u0430\u0442\u0443\u0441</td><td>"+stn[e.s]+"</td></tr></table>";
|
||||
if(e.n)hh+="<p style='font-size:10pt;color:#555;margin:4pt 0;padding:6pt;background:#f9f9f9'>\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435: "+esc(e.n)+"</p>";
|
||||
if(e.q)hh+="<p style='font-size:10pt;color:#2E7D32'><strong>\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E:</strong> "+e.q+"</p>";
|
||||
var fhtml="";
|
||||
for(var mi=0;mi<months.length;mi++){
|
||||
for(var si=-1;si<(e.sub?e.sub.length:0);si++){
|
||||
var sk=si>=0?"_s"+si:"";
|
||||
var mk="_m"+months[mi];
|
||||
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)fhtml+="<a href='"+f.data+"'>"+esc(f.n)+" ("+Math.round((f.s||0)/1024)+" KB)</a>"}}catch(ex){}}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(fhtml)hh+="<div class='files'><strong>\u0424\u0430\u0439\u043B\u044B:</strong><br>"+fhtml+"</div>";
|
||||
hh+="<p class='meta'>\u0420\u0430\u0437\u0434\u0435\u043B | "+esc(secName)+" | \u0421\u0440\u043E\u043A: "+e.due+" | "+stn[e.s]+"</p>";
|
||||
var rn="";var rq=0;for(var mi=0;mi<months.length;mi++){var nk="sn_"+e.id+"_m"+months[mi];var sv=localStorage.getItem(nk);if(sv){rn=sv;break}var qk="sq_"+e.id+"_m"+months[mi];var qv=localStorage.getItem(qk);if(qv)rq=parseInt(qv,10)||0}
|
||||
if(!rn&&e.n)rn=e.n;if(!rq&&e.q)rq=e.q;
|
||||
if(rn)hh+="<p class='desc'><strong>\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435:</strong> "+esc(rn)+"</p>";
|
||||
if(rq)hh+="<p class='qty'>\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: "+rq+"</p>";
|
||||
var fh="";for(var mi=0;mi<months.length;mi++){for(var si=-1;si<(e.sub?e.sub.length:0);si++){var sk=si>=0?"_s"+si:"";var mk="_m"+months[mi];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)fh+="<a href='"+f.data+"'>"+esc(f.n)+" ("+Math.round((f.s||0)/1024)+" KB)</a>"}}catch(ex){}}}}}
|
||||
if(fh)hh+="<div class='files'><strong>\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044E\u0449\u0438\u0435 \u0444\u0430\u0439\u043B\u044B:</strong><br>"+fh+"</div>";
|
||||
}
|
||||
hh+="<p style='font-size:9pt;color:#888'><em>\u041E\u0442\u0447\u0451\u0442 \u0441\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D: "+new Date().toLocaleDateString("ru-RU")+"</em></p></body></html>";
|
||||
var blob=new Blob([hh],{type:"application/msword"});
|
||||
var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="report_pb_"+periodLabel.replace(/\s/g,"_")+".doc";a.click()
|
||||
var blob=new Blob([hh],{type:"application/msword"});var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="report_pb_"+periodLabel.replace(/\s/g,"_")+".doc";a.click()
|
||||
}
|
||||
function dlPdf(){
|
||||
var fl=getFilteredEvs();
|
||||
@ -1976,6 +1965,6 @@ function dlAnalyticsWord(){
|
||||
var blob=new Blob([h],{type:"application/msword"});var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="analytics.doc";a.click()
|
||||
}
|
||||
|
||||
</script></script></script>
|
||||
</script></script></script></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user