From fa77de1526de2a82d8c14650ed3e941ad1c05373 Mon Sep 17 00:00:00 2001 From: Dauren777 Date: Thu, 11 Jun 2026 04:34:49 +0000 Subject: [PATCH] =?UTF-8?q?CSV:=20UTF-8=20BOM,=20=D1=80=D0=B0=D0=B7=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=20;=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20Excel,=20=D0=AD=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20CSV=20=D0=B2=D0=BC=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=BE=20JSON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.html | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app.html b/app.html index e6db40a..da1b9b6 100644 --- a/app.html +++ b/app.html @@ -210,7 +210,7 @@ function resetF(){ document.getElementById("pfiles").value="";document.getElementById("fn").textContent=""; } -function exportCSV(){var a=getA();if(a.length===0){alert("Нет данных");return}var all=allU(),h="Бланк №;Дата;Место;Наблюдатель;Должность;Филиал;Регион;Город;Статус;Нарушений",rs=a.map(function(x){var u=all[x.createdBy]||{};return(x.number||"")+";"+x.date+";"+x.location+";"+x.observer+";"+(x.observerRole||"")+";"+(u.branch||"")+";"+(u.region||"")+";"+(u.city||"")+";"+(x.overallSafe?"Безопасно":"Нарушения")+";"+(x.totalViolations||0)}),csv="\uFEFF"+h+"\n"+rs.join("\n"),bl=new Blob([csv],{type:"text/csv"}),ur=URL.createObjectURL(bl),dl=document.createElement("a");dl.href=ur;dl.download="pab.csv";dl.click();URL.revokeObjectURL(ur)} +function exportCSV(){var a=getA();if(a.length===0){alert("Нет данных");return}var all=allU(),h="Бланк №;Дата;Место;Область;Город;Наблюдатель;Должность;Филиал;Регион;Статус;Нарушений",rs=a.map(function(x){var u=all[x.createdBy]||{};return(x.number||"")+";"+x.date+";"+x.location+";"+(x.oblast||"")+";"+(x.city||"")+";"+x.observer+";"+(x.observerRole||"")+";"+(u.branch||"")+";"+(u.region||"")+";"+(x.overallSafe?"Безопасно":"Нарушения")+";"+(x.totalViolations||0)});var bom="\uFEFF",csv=bom+h+"\n"+rs.join("\n"),bl=new Blob([csv],{type:"text/csv;charset=utf-8"}),ur=URL.createObjectURL(bl),dl=document.createElement("a");dl.href=ur;dl.download="pab.csv";dl.click();URL.revokeObjectURL(ur);alert("CSV в кодировке UTF-8. Откройте в Excel: Данные → Из текста → выберите файл → UTF-8")} function editA(id){if(!isA()){alert("Только админ");return}alert("Редактирование: аудит #"+id)} function delA(id){if(!isA()){alert("Только админ");return}if(!confirm("Удалить?"))return;saveA(getA().filter(function(a){return a.id!==id}));rHS()} function delUser(login){if(!isA())return;if(!confirm("Удалить пользователя "+login+" и все его аудиты?"))return;var u=getU();delete u[login];saveU(u);var a=getA().filter(function(x){return x.createdBy!==login});saveA(a);fetch(SBU+"/rest/v1/users?login=eq."+encodeURIComponent(login),{method:"DELETE",headers:{"apikey":SBK,"Authorization":"Bearer "+SBK}}).catch(function(){});rMS();rHS();rDB()} @@ -218,12 +218,11 @@ function downloadFullCSV(){var a=getA();if(a.length===0){alert("Нет данн function showAllUsers(){if(!isA())return;var all=allU(),h="

👥 Пользователи

";for(var k in all){var u=all[k];h+=""}h+="
ЛогинФИОДолжностьФилиалРегионГород
"+k+(k==="admin"?" ⭐":"")+""+u.name+""+u.role+""+(u.branch||"—")+""+(u.region||"—")+""+(u.city||"—")+"
";var w=window.open("","_blank","width=800,height=500");w.document.write("Пользователи"+h+"");w.document.close()} function downloadSummaryHTML(){var a=getA(),all=allU(),t=a.length;var w=window.open("","_blank","width=800,height=600");w.document.write("Отчёт ПАБ

📊 Сводный отчёт ПАБ

Сформирован: "+new Date().toLocaleString("ru")+" | Всего аудитов: "+t+"

📋 Аудиты

"+a.map(function(x){return""}).join("")+"
ДатаМестоНаблюдательСтатусНарушений
"+(x.number||"—")+""+x.date+""+x.location+""+x.observer+""+(x.overallSafe?"Безопасно":"Нарушения")+""+(x.totalViolations||0)+"
");w.document.close()} function exportData(){ - var data={users:getU(),audits:getA(),exported:new Date().toISOString()}; - var json=JSON.stringify(data,null,2); - var blob=new Blob([json],{type:"application/json"}); - var url=URL.createObjectURL(blob);var dl=document.createElement("a"); - dl.href=url;dl.download="pab-data-"+new Date().toISOString().split("T")[0]+".json";dl.click();URL.revokeObjectURL(url); - alert("Файл сохранён. Отправьте его админу для импорта."); + var a=getA();if(a.length===0){alert("Нет данных");return} + var all=allU(),h="Бланк №;Дата;Время;Место;Область;Город;Наблюдатель;Должность;Руководитель;Тип работы;Регион;Филиал;Статус;Нарушений"; + var rs=a.map(function(x){var u=all[x.createdBy]||{};return(x.number||"")+";"+x.date+";"+(x.timeStart||"")+"-"+(x.timeEnd||"")+";"+x.location+";"+(x.oblast||"")+";"+(x.city||"")+";"+x.observer+";"+(x.observerRole||"")+";"+(x.supervisor||"")+";"+(x.workType||"")+";"+(x.region||"")+";"+(u.branch||"")+";"+(x.overallSafe?"Безопасно":"Нарушения")+";"+(x.totalViolations||0)}); + var csv="\uFEFF"+h+"\n"+rs.join("\n"),bl=new Blob([csv],{type:"text/csv;charset=utf-8"}),ur=URL.createObjectURL(bl),dl=document.createElement("a"); + dl.href=ur;dl.download="pab-export-"+new Date().toISOString().split("T")[0]+".csv";dl.click();URL.revokeObjectURL(ur); } function importData(){ var input=document.createElement("input");input.type="file";input.accept=".json";