v87: Word/PDF exports + hse.sk.kz integration (fixed)
This commit is contained in:
parent
507281dfee
commit
71734eddac
115
index.html
115
index.html
@ -83,7 +83,6 @@ tr:hover{background:#FAFBFC}
|
||||
<a class=" active" id="snav_events" onclick="switchTab('events')"><span>Мероприятия</span></a>
|
||||
<a class="" id="snav_analytics" onclick="switchTab('analytics')"><span>Аналитика</span></a>
|
||||
<a class="" id="snav_reports" onclick="switchTab('reports')"><span>Отчётность</span></a>
|
||||
<a class="" id="snav_reports" onclick="switchTab('reports')"><span>Отчётность</span></a>
|
||||
<a class="" id="snav_ai" onclick="switchTab('ai')"><span>ИИ-помощник</span></a>
|
||||
<a class="" id="snav_hse" onclick="switchTab('hse')"><span>HSE.sk.kz</span></a>
|
||||
<div class="logout"><button class="btn btn-sm btn-r" style="width:100%" onclick="doLogout()">Выйти</button></div>
|
||||
@ -555,58 +554,17 @@ function saveBackup(){
|
||||
a.download="backup_"+new Date().toISOString().slice(0,10)+".json";
|
||||
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="<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>Отчёт План ПБ "+month+"."+year+"</title><style>@page{size:A4;margin:20mm}body{font:12pt 'Times New Roman'}h2{font-size:16pt;text-align:center}table{border-collapse:collapse;width:100%}th,td{border:1px solid #000;padding:4px 8px;font-size:11pt}th{background:#ddd}</style></head><body><h2>План производственной безопасности</h2><p style='text-align:center'>AO «Казахтелеком» за "+month+"."+year+"</p><br><table><tr><th>N</th><th>Мероприятие</th><th>Филиал</th><th>Срок</th><th>Статус</th><th>Прогресс</th><th>Кол-во</th><th>Примечание</th></tr>";
|
||||
for(var i=0;i<fl.length;i++){
|
||||
var e=fl[i];
|
||||
hh+="<tr><td>"+e.id+"</td><td>"+esc(e.t)+"</td><td>"+brs[e.b]+"</td><td>"+e.due+"</td><td>"+stn[e.s]+"</td><td>"+(e.p||0)+"%</td><td>"+(e.q||"")+"</td><td>"+esc(e.n||"")+"</td></tr>"
|
||||
}
|
||||
hh+="</table><p><br><em>Отчёт сформирован: "+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_"+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="<!DOCTYPE html><html><head><meta charset='utf-8'><title>Отчёт План ПБ "+month+"."+year+"</title><style>body{font:14px Arial;padding:20px}table{border-collapse:collapse;width:100%}th,td{border:1px solid #ccc;padding:6px 10px;font-size:12px;text-align:left}th{background:#0B1A2E;color:#fff}@media print{body{padding:10mm}table{page-break-inside:auto}tr{page-break-inside:avoid}}</style></head><body><h2>План производственной безопасности</h2><p>AO «Казахтелеком» за "+month+"."+year+"</p><br><table><tr><th>N</th><th>Мероприятие</th><th>Филиал</th><th>Срок</th><th>Статус</th><th>Прогресс</th><th>Кол-во</th><th>Примечание</th></tr>";
|
||||
for(var i=0;i<fl.length;i++){
|
||||
var e=fl[i];
|
||||
hh+="<tr><td>"+e.id+"</td><td>"+esc(e.t)+"</td><td>"+brs[e.b]+"</td><td>"+e.due+"</td><td>"+stn[e.s]+"</td><td>"+(e.p||0)+"%</td><td>"+(e.q||"")+"</td><td>"+esc(e.n||"")+"</td></tr>"
|
||||
}
|
||||
hh+="</table><p><br><em>Отчёт сформирован: "+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 hseSend(){
|
||||
var btn=document.getElementById("hse_btn");
|
||||
var result=document.getElementById("hse_result");
|
||||
btn.disabled=true;btn.textContent="Отправка...";result.innerHTML="";
|
||||
var month=document.getElementById("hse_month").value;
|
||||
var fmt=document.getElementById("hse_fmt").value;
|
||||
var apiKey=document.getElementById("hse_key").value;
|
||||
if(!month){result.innerHTML="<span style='color:#EF4444'>Выберите месяц</span>";btn.disabled=false;btn.textContent="Отправить отчёт в HSE.sk.kz";return}
|
||||
if(!apiKey){result.innerHTML="<span style='color:#EF4444'>Введите API ключ</span>";btn.disabled=false;btn.textContent="Отправить отчёт в HSE.sk.kz";return}
|
||||
var fl=getFilteredEvs();
|
||||
var total=fl.length;
|
||||
var done=0;for(var i=0;i<fl.length;i++){if(fl[i].s==="done")done++}
|
||||
var pct=total?Math.round(done/total*100):0;
|
||||
var payload={month:month,events:fl.map(function(e){return{id:e.id,title:e.t,branch:brs[e.b],deadline:e.due,status:e.s,progress:e.p||0,quantity:e.q||"",note:e.n||""}}),summary:{total:total,done:done,pct:pct}};
|
||||
try{
|
||||
fetch("http://localhost:5000/api/hse/send",{method:"POST",headers:{"Content-Type":"application/json","Authorization":"Bearer hse-integration"},body:JSON.stringify({month:month,api_key:apiKey,format:fmt,report:payload})}).then(function(r){return r.json()}).then(function(d){
|
||||
if(d.ok){result.innerHTML="<span style='color:#10B981'>Отчёт за "+month+" отправлен в HSE.sk.kz</span>"}
|
||||
else{result.innerHTML="<span style='color:#EF4444'>Ошибка: "+(d.error||"соединение")+"</span>"}
|
||||
}).catch(function(e){result.innerHTML="<span style='color:#EF4444'>Сервер не запущен. Запустите <code>python3 server.py</code></span>"}).finally(function(){btn.disabled=false;btn.textContent="Отправить отчёт в HSE.sk.kz"})
|
||||
}catch(e){}
|
||||
}
|
||||
|
||||
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<d.length;i++){
|
||||
out.push({id:d[i].id,s:d[i].s||"wait",p:d[i].p||0,done:d[i].done||"\u2014",h:d[i].h||[]})
|
||||
}
|
||||
localStorage.setItem("se5",JSON.stringify(out));
|
||||
loadEv();
|
||||
renderEv();
|
||||
@ -767,6 +725,57 @@ function dlHTML(){
|
||||
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="<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>Отчёт План ПБ "+month+"."+year+"</title><style>@page{size:A4;margin:20mm}body{font:12pt 'Times New Roman'}h2{font-size:16pt;text-align:center}table{border-collapse:collapse;width:100%}th,td{border:1px solid #000;padding:4px 8px;font-size:11pt}th{background:#ddd}</style></head><body><h2>План производственной безопасности</h2><p style='text-align:center'>AO «Казахтелеком» за "+month+"."+year+"</p><br><table><tr><th>N</th><th>Мероприятие</th><th>Филиал</th><th>Срок</th><th>Статус</th><th>Прогресс</th><th>Кол-во</th><th>Примечание</th></tr>";
|
||||
for(var i=0;i<fl.length;i++){
|
||||
var e=fl[i];
|
||||
hh+="<tr><td>"+e.id+"</td><td>"+esc(e.t)+"</td><td>"+brs[e.b]+"</td><td>"+e.due+"</td><td>"+stn[e.s]+"</td><td>"+(e.p||0)+"%</td><td>"+(e.q||"")+"</td><td>"+esc(e.n||"")+"</td></tr>"
|
||||
}
|
||||
hh+="</table><p><br><em>Отчёт сформирован: "+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_"+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="<!DOCTYPE html><html><head><meta charset='utf-8'><title>Отчёт План ПБ "+month+"."+year+"</title><style>body{font:14px Arial;padding:20px}table{border-collapse:collapse;width:100%}th,td{border:1px solid #ccc;padding:6px 10px;font-size:12px;text-align:left}th{background:#0B1A2E;color:#fff}@media print{body{padding:10mm}table{page-break-inside:auto}tr{page-break-inside:avoid}}</style></head><body><h2>План производственной безопасности</h2><p>AO «Казахтелеком» за "+month+"."+year+"</p><br><table><tr><th>N</th><th>Мероприятие</th><th>Филиал</th><th>Срок</th><th>Статус</th><th>Прогресс</th><th>Кол-во</th><th>Примечание</th></tr>";
|
||||
for(var i=0;i<fl.length;i++){
|
||||
var e=fl[i];
|
||||
hh+="<tr><td>"+e.id+"</td><td>"+esc(e.t)+"</td><td>"+brs[e.b]+"</td><td>"+e.due+"</td><td>"+stn[e.s]+"</td><td>"+(e.p||0)+"%</td><td>"+(e.q||"")+"</td><td>"+esc(e.n||"")+"</td></tr>"
|
||||
}
|
||||
hh+="</table><p><br><em>Отчёт сформирован: "+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 hseSend(){
|
||||
var btn=document.getElementById("hse_btn");
|
||||
var result=document.getElementById("hse_result");
|
||||
btn.disabled=true;btn.textContent="Отправка...";result.innerHTML="";
|
||||
var month=document.getElementById("hse_month").value;
|
||||
var fmt=document.getElementById("hse_fmt").value;
|
||||
var apiKey=document.getElementById("hse_key").value;
|
||||
if(!month){result.innerHTML="<span style='color:#EF4444'>Выберите месяц</span>";btn.disabled=false;btn.textContent="Отправить отчёт в HSE.sk.kz";return}
|
||||
if(!apiKey){result.innerHTML="<span style='color:#EF4444'>Введите API ключ</span>";btn.disabled=false;btn.textContent="Отправить отчёт в HSE.sk.kz";return}
|
||||
var fl=getFilteredEvs();
|
||||
var total=fl.length;
|
||||
var done=0;for(var i=0;i<fl.length;i++){if(fl[i].s==="done")done++}
|
||||
var pct=total?Math.round(done/total*100):0;
|
||||
var payload={month:month,events:fl.map(function(e){return{id:e.id,title:e.t,branch:brs[e.b],deadline:e.due,status:e.s,progress:e.p||0,quantity:e.q||"",note:e.n||""}}),summary:{total:total,done:done,pct:pct}};
|
||||
try{
|
||||
fetch("http://localhost:5000/api/hse/send",{method:"POST",headers:{"Content-Type":"application/json","Authorization":"Bearer hse-integration"},body:JSON.stringify({month:month,api_key:apiKey,format:fmt,report:payload})}).then(function(r){return r.json()}).then(function(d){
|
||||
if(d.ok){result.innerHTML="<span style='color:#10B981'>Отчёт за "+month+" отправлен в HSE.sk.kz</span>"}
|
||||
else{result.innerHTML="<span style='color:#EF4444'>Ошибка: "+(d.error||"соединение")+"</span>"}
|
||||
}).catch(function(e){result.innerHTML="<span style='color:#EF4444'>Сервер не запущен. Запустите <code>python3 server.py</code></span>"}).finally(function(){btn.disabled=false;btn.textContent="Отправить отчёт в HSE.sk.kz"})
|
||||
}catch(e){}
|
||||
}
|
||||
|
||||
var aiGreeted=false;
|
||||
function renderAI(){
|
||||
|
||||
Loading…
Reference in New Issue
Block a user