From 2c1faefee2462bb0292924b01a170c417fbb834d Mon Sep 17 00:00:00 2001 From: Dauren777 Date: Wed, 10 Jun 2026 09:50:23 +0000 Subject: [PATCH] =?UTF-8?q?Supabase=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE?= =?UTF-8?q?=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B1=D0=B5=D0=B7?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20showPanel=20=E2=80=94?= =?UTF-8?q?=20=D0=B2=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=B0=D1=8E=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.html | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/app.html b/app.html index 5de980a..766d144 100644 --- a/app.html +++ b/app.html @@ -55,9 +55,7 @@ td{padding:8px 12px;border-bottom:1px solid #F2F4F7}tr:hover td{background:#F2F4
✅ ВСЕ БЕЗОПАСНО
⚠️ ЕСТЬ ОПАСНО

📄 Категории наблюдения

-

📄 Таблица несоответствий и корректирующих мер

-
НесоответствиеИсполнительВид нарушенияМерыОтветственныйДатаФорма завершения
1
-
+

💬 Итог диалога

@@ -98,11 +96,9 @@ function getA(){try{return JSON.parse(localStorage.getItem("pab_audits")||"[]")} function saveA(d){localStorage.setItem("pab_audits",JSON.stringify(d))} function saveU(d){localStorage.setItem("pab_users",JSON.stringify(d))} -// Supabase sync — фоном, не ломает вкладки -function sbPullUsers(){return fetch(SBU+"/rest/v1/users?select=*",{headers:{"apikey":SBK,"Authorization":"Bearer "+SBK}}).then(function(r){return r.json()}).then(function(d){var um=getU();d.forEach(function(x){if(!um[x.login])um[x.login]={pass:x.pass,name:x.name,email:x.email,role:x.role,freq:x.freq,branch:x.branch,dept:x.dept,region:x.region,oblast:x.oblast,city:x.city}});saveU(um)}).catch(function(){})} -function sbPullAudits(){return fetch(SBU+"/rest/v1/audits?select=*&order=created_at.desc",{headers:{"apikey":SBK,"Authorization":"Bearer "+SBK}}).then(function(r){return r.json()}).then(function(d){var am=[],ca=getA();d.forEach(function(x){am.push({id:x.id,number:x.number,date:x.date,location:x.location,region:x.region,workType:x.work_type,workerCount:x.worker_count,observer:x.observer,observerRole:x.observer_role,overallSafe:x.overall_safe,categories:x.categories,totalViolations:x.total_violations,dialogue:x.dialogue,photos:x.photos,docs:x.docs,createdBy:x.created_by,createdAt:x.created_at})});ca.forEach(function(a){var found=false;am.forEach(function(b){if(b.id===a.id)found=true});if(!found)am.push(a)});saveA(am)}).catch(function(){})} +// Supabase — фоновая синхронизация, не трогает вкладки +function sbSync(){fetch(SBU+"/rest/v1/audits?select=*&order=created_at.desc",{headers:{"apikey":SBK,"Authorization":"Bearer "+SBK}}).then(function(r){return r.json()}).then(function(d){var am=[],ca=getA();d.forEach(function(x){am.push({id:x.id,number:x.number,date:x.date,location:x.location,region:x.region,workType:x.work_type,workerCount:x.worker_count,observer:x.observer,observerRole:x.observer_role,overallSafe:x.overall_safe,categories:x.categories,totalViolations:x.total_violations,dialogue:x.dialogue,photos:x.photos,docs:x.docs,createdBy:x.created_by,createdAt:x.created_at})});ca.forEach(function(a){var found=false;am.forEach(function(b){if(b.id===a.id)found=true});if(!found)am.push(a)});saveA(am)}).catch(function(){})} function sbPushAudit(e){fetch(SBU+"/rest/v1/audits",{method:"POST",headers:{"apikey":SBK,"Authorization":"Bearer "+SBK,"Content-Type":"application/json","Prefer":"resolution=merge-duplicates"},body:JSON.stringify({id:e.id,number:e.number,date:e.date,location:e.location,region:e.region,work_type:e.workType,worker_count:e.workerCount,observer:e.observer,observer_role:e.observerRole,overall_safe:e.overallSafe,categories:e.categories,total_violations:e.totalViolations,dialogue:e.dialogue,photos:e.photos,docs:e.docs,created_by:e.createdBy,created_at:e.createdAt})}).catch(function(){})} -function sbPushUser(login,data){fetch(SBU+"/rest/v1/users",{method:"POST",headers:{"apikey":SBK,"Authorization":"Bearer "+SBK,"Content-Type":"application/json","Prefer":"resolution=merge-duplicates"},body:JSON.stringify({login:login,pass:data.pass,name:data.name,email:data.email,role:data.role,freq:data.freq,branch:data.branch,dept:data.dept,region:data.region,oblast:data.oblast,city:data.city})}).catch(function(){})} // Supabase для фото var SBU="https://znexbjafkvyjffffbhlf.supabase.co"; @@ -128,9 +124,7 @@ function showPanel(n){ ["NA","MS","DB","VL","HS"].forEach(function(id){document.getElementById("pn"+id).classList.remove("ac")}); document.getElementById("pn"+n).classList.add("ac"); document.querySelectorAll("nav a").forEach(function(a){a.classList.toggle("ac",a.getAttribute("onclick").indexOf("'"+n+"'")>=0)}); - if(n==="MS")rMS();if(n==="DB")rDB();if(n==="VL")rVL();if(n==="HS")rHS(); - // Фоновая синхронизация с Supabase - sbPullUsers();sbPullAudits(); + if(n==="MS")rMS();if(n==="DB")rDB();if(n==="VL")rVL();if(n==="HS")rHS();sbSync(); } function doLogout(){sessionStorage.removeItem("pab_user");location.href="index.html"} @@ -164,22 +158,13 @@ function rDB(){ },300); } -// Violations table -var vioRC=1; -function addVioRowFn(){vioRC++;var tr=document.createElement("tr");tr.innerHTML=''+vioRC+'';document.getElementById("vioBody").appendChild(tr)} -function removeVioRow(btn){var rows=document.querySelectorAll("#vioBody tr");if(rows.length<=1)return;btn.closest("tr").remove();document.querySelectorAll("#vioBody tr").forEach(function(r,i){r.querySelector("td").textContent=i+1});vioRC=document.querySelectorAll("#vioBody tr").length} -function getVioData(){var r=[];document.querySelectorAll("#vioBody tr").forEach(function(row){var nc=row.querySelector(".v-nc");if(!nc||!nc.value.trim())return;r.push({nc:nc.value.trim(),executor:row.querySelector(".v-ex").value.trim(),type:row.querySelector(".v-tp").value,measure:row.querySelector(".v-ms").value.trim(),responsible:row.querySelector(".v-rs").value.trim(),date:row.querySelector(".v-dt").value,done:row.querySelector(".v-fn").value.trim()})});return r} - -// View audit -function viewA(id){var a=getA().find(function(x){return x.id===id});if(!a)return;var t="БЛАНК ПАБ №"+(a.number||"—")+"\nДата: "+a.date+"\nМесто: "+a.location+"\nНаблюдатель: "+a.observer+"\nСтатус: "+(a.overallSafe?"БЕЗОПАСНО":"НАРУШЕНИЙ: "+a.totalViolations)+"\n\n=== КАТЕГОРИИ ===";CATS.forEach(function(c){var cd=a.categories&&a.categories[c.id];var it=cd?cd.items:[];t+="\n"+c.title+": "+(it.length===0?"БЕЗОПАСНО":it.map(function(i){return"☒ "+i.item}).join("; "))});if(a.violations&&a.violations.length>0){t+="\n\n=== НЕСООТВЕТСТВИЯ ===";a.violations.forEach(function(v,i){t+="\n"+(i+1)+". "+v.nc+" | Исп: "+v.executor+" | Меры: "+v.measure+" | Срок: "+v.date+" | Завершение: "+(v.done||"—"))})}if(a.dialogue&&a.dialogue.length>0)t+="\n\n=== ДИАЛОГ ===\n"+a.dialogue.join("\n");alert(t)} - function rVL(){var c=document.getElementById("vlc");if(!c)return;var a=getA(),td=new Date().toISOString().split("T")[0],av=[]; a.forEach(function(x){ if(x.violations&&x.violations.length>0){x.violations.forEach(function(v){var dd=v.date||"",dn=v.done&&v.done.trim();var st="pending";if(dn)st="done";else if(dd&&dd0&&x.categories){Object.values(x.categories).forEach(function(cat){if(cat.items)cat.items.forEach(function(it){av.push({nc:it.item+" ("+x.location+")",ex:x.observer,ms:"",rs:"",dt:"",dn:"",st:"info",ad:x.date,an:x.number||"—"})})})} });c.innerHTML="
"+av.length+"
Всего
"+av.filter(function(v){return v.st==="done"}).length+"
Устранено
"+av.filter(function(v){return v.st==="overdue"}).length+"
Просрочено
"+av.filter(function(v){return v.st==="pending"}).length+"
В работе
"+(av.length>0?""+av.map(function(v,i){var sc=v.st==="done"?"bs":v.st==="overdue"?"bd2":"bw";var sl=v.st==="done"?"Устранено":v.st==="overdue"?"Просрочено":"В работе";return""}).join("")+"
НесоответствиеАудитИсполнительМерыСрокСтатус
"+(i+1)+""+v.nc+""+v.ad+""+v.ex+""+(v.ms||"—")+""+(v.dt||"—")+""+sl+"
":"

Несоответствий не найдено

")} -function rHS(){var a=getA(),tb=document.getElementById("hbd");if(!tb)return;tb.innerHTML=a.length===0?"Нет записей":a.map(function(x){var ab="👁️"+(isA()?" ✏️ ":"");return""+(x.number||"—")+""+x.date+""+x.location+""+x.observer+""+(x.overallSafe?"Безопасно":"Нарушения")+""+(x.totalViolations||0)+""+ab+""}).join("")} +function rHS(){var a=getA(),tb=document.getElementById("hbd");if(!tb)return;tb.innerHTML=a.length===0?"Нет записей":a.map(function(x){var ab=isA()?"✏️ ":"чтение";return""+(x.number||"—")+""+x.date+""+x.location+""+x.observer+""+(x.overallSafe?"Безопасно":"Нарушения")+""+(x.totalViolations||0)+""+ab+""}).join("")} function uploadPhotos(files,callback){var urls=[];var done=0;function check(){done++;if(done>=files.length)callback(urls)}if(files.length===0){callback([]);return}for(var i=0;i | "+e.date+" | "+(e.overallSafe?"БЕЗОПАСНО":"НАРУШЕНИЙ: "+e.totalViolations);document.getElementById("fs").style.display="block";setTimeout(function(){document.getElementById("fs").style.display="none"},20000); resetF();rVL(); }); @@ -244,8 +229,7 @@ function importData(){ }; input.click(); } - -rHS();sbPullUsers();sbPullAudits(); +rHS();sbSync();