Синхронизация Supabase, таблица несоответствий, просмотр аудита
This commit is contained in:
parent
ab9554b122
commit
42f33f4cbb
29
app.html
29
app.html
@ -55,7 +55,9 @@ td{padding:8px 12px;border-bottom:1px solid #F2F4F7}tr:hover td{background:#F2F4
|
||||
<div class="fg"><label>Отметка</label><div class="ot"><div class="tb sf" id="os" onclick="setO('safe')">✅ ВСЕ БЕЗОПАСНО</div><div class="tb" id="od" onclick="setO('danger')">⚠️ ЕСТЬ ОПАСНО</div></div></div>
|
||||
<div class="fg" style="margin-top:10px"><label>📎 Прикрепить фото</label><input type="file" id="pfiles" multiple accept="image/*" onchange="var n=[];for(var i=0;i<this.files.length;i++)n.push(this.files[i].name);document.getElementById('fn').textContent=n.length?'📷 '+n.join(', '):''"><div id="fn" style="font-size:12px;color:#5B6573;margin-top:4px"></div></div></div>
|
||||
<div class="card"><h3>📄 Категории наблюдения</h3><div id="cats"></div></div>
|
||||
<div class="card"><h3>💬 Итог диалога</h3>
|
||||
<div class="card"><h3>📄 Таблица несоответствий и корректирующих мер</h3>
|
||||
<div style="overflow-x:auto"><table id="vioTable" style="background:transparent"><thead><tr><th style="width:30px">№</th><th>Несоответствие</th><th>Исполнитель</th><th>Вид нарушения</th><th>Меры</th><th>Ответственный</th><th>Дата</th><th>Форма завершения</th><th></th></tr></thead><tbody id="vioBody"><tr id="vioRow0"><td>1</td><td><input class="v-nc" placeholder="Описание" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><input class="v-ex" placeholder="Исполнитель" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><select class="v-tp" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"><option>Нарушение</option><option>Замечание</option><option>Риск</option></select></td><td><input class="v-ms" placeholder="Меры" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><input class="v-rs" placeholder="Ответственный" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><input type="date" class="v-dt" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><input class="v-fn" placeholder="Завершение" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><button onclick="removeVioRow(this)" style="background:none;border:none;color:#E63946;cursor:pointer;font-size:16px">×</button></td></tr></tbody></table></div>
|
||||
<button class="btn bo bs" onclick="addVioRowFn()" style="margin-top:6px">+ Добавить строку</button></div>
|
||||
<div class="ci"><input type="checkbox" id="d0"><label for="d0">Работник привёл примеры безопасных действий</label></div>
|
||||
<div class="ci"><input type="checkbox" id="d1"><label for="d1">Были обсуждены риски / проблемы</label></div>
|
||||
<div class="ci"><input type="checkbox" id="d2"><label for="d2">Определены корректирующие меры</label></div>
|
||||
@ -94,6 +96,14 @@ function getU(){try{return JSON.parse(localStorage.getItem("pab_users")||"{}")}c
|
||||
function allU(){var r=getU();r.admin={pass:"admin",name:"Администратор",role:"Руководитель",email:"admin@telecom.kz",branch:"АО «Казахтелеком»",dept:"ЦА",region:"Центральный",oblast:"—",city:"г. Астана"};return r}
|
||||
function getA(){try{return JSON.parse(localStorage.getItem("pab_audits")||"[]")}catch(e){return[]}}
|
||||
function saveA(d){localStorage.setItem("pab_audits",JSON.stringify(d))}
|
||||
function saveU(d){localStorage.setItem("pab_users",JSON.stringify(d))}
|
||||
|
||||
// Supabase sync — фоном, не ломает вкладки
|
||||
function sbSyncAll(){sbPullUsers();sbPullAudits()}
|
||||
function sbPullUsers(){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(){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";
|
||||
@ -153,13 +163,22 @@ function rDB(){
|
||||
},300);
|
||||
}
|
||||
|
||||
// Violations table
|
||||
var vioRC=1;
|
||||
function addVioRowFn(){vioRC++;var tr=document.createElement("tr");tr.innerHTML='<td>'+vioRC+'</td><td><input class="v-nc" placeholder="Описание" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><input class="v-ex" placeholder="Исполнитель" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><select class="v-tp" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"><option>Нарушение</option><option>Замечание</option><option>Риск</option></select></td><td><input class="v-ms" placeholder="Меры" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><input class="v-rs" placeholder="Ответственный" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><input type="date" class="v-dt" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><input class="v-fn" placeholder="Завершение" style="width:100%;padding:4px;border:1px solid #E2E6EB;border-radius:4px;font-size:12px"></td><td><button onclick="removeVioRow(this)" style="background:none;border:none;color:#E63946;cursor:pointer;font-size:16px">×</button></td>';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&&dd<td)st="overdue";av.push({nc:v.nc,ex:v.executor,ms:v.measure,rs:v.responsible,dt:dd,dn:v.done||"",st:st,ad:x.date,an:x.number||"—"})})}
|
||||
else if(x.totalViolations>0&&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="<div class=\"stats\"><div class=\"st\"><div class=\"n\">"+av.length+"</div><div class=\"l\">Всего</div></div><div class=\"st gr\"><div class=\"n\">"+av.filter(function(v){return v.st==="done"}).length+"</div><div class=\"l\">Устранено</div></div><div class=\"st rd\"><div class=\"n\">"+av.filter(function(v){return v.st==="overdue"}).length+"</div><div class=\"l\">Просрочено</div></div><div class=\"st\"><div class=\"n\" style=\"color:#E76F51\">"+av.filter(function(v){return v.st==="pending"}).length+"</div><div class=\"l\">В работе</div></div></div>"+(av.length>0?"<table><thead><tr><th>№</th><th>Несоответствие</th><th>Аудит</th><th>Исполнитель</th><th>Меры</th><th>Срок</th><th>Статус</th></tr></thead><tbody>"+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"<tr><td>"+(i+1)+"</td><td>"+v.nc+"</td><td>"+v.ad+"</td><td>"+v.ex+"</td><td>"+(v.ms||"—")+"</td><td>"+(v.dt||"—")+"</td><td><span class=\"badge "+sc+"\">"+sl+"</span></td></tr>"}).join("")+"</tbody></table>":"<p style=\"color:#5B6573;padding:20px\">Несоответствий не найдено</p>")}
|
||||
|
||||
function rHS(){var a=getA(),tb=document.getElementById("hbd");if(!tb)return;tb.innerHTML=a.length===0?"<tr><td colspan=\"7\" style=\"text-align:center;padding:20px;color:#5B6573\">Нет записей</td></tr>":a.map(function(x){var ab=isA()?"<a style=\"color:#00B4D8;cursor:pointer;font-weight:600\" onclick=\"editA("+x.id+")\">✏️</a> <button class=\"btn bd\" style=\"padding:4px 8px;font-size:11px\" onclick=\"delA("+x.id+")\">🗑️</button>":"чтение";return"<tr><td>"+(x.number||"—")+"</td><td>"+x.date+"</td><td>"+x.location+"</td><td>"+x.observer+"</td><td><span class=\"badge "+(x.overallSafe?"bs":"bd2")+"\">"+(x.overallSafe?"Безопасно":"Нарушения")+"</span></td><td>"+(x.totalViolations||0)+"</td><td>"+ab+"</td></tr>"}).join("")}
|
||||
function rHS(){var a=getA(),tb=document.getElementById("hbd");if(!tb)return;tb.innerHTML=a.length===0?"<tr><td colspan=\"7\" style=\"text-align:center;padding:20px;color:#5B6573\">Нет записей</td></tr>":a.map(function(x){var ab="<a style=\"color:#00B4D8;cursor:pointer;font-weight:600\" onclick=\"viewA("+x.id+")\">👁️</a>"+(isA()?" <a style=\"color:#00B4D8;cursor:pointer;font-weight:600\" onclick=\"editA("+x.id+")\">✏️</a> <button class=\"btn bd\" style=\"padding:4px 8px;font-size:11px\" onclick=\"delA("+x.id+")\">🗑️</button>":"");return"<tr><td>"+(x.number||"—")+"</td><td>"+x.date+"</td><td>"+x.location+"</td><td>"+x.observer+"</td><td><span class=\"badge "+(x.overallSafe?"bs":"bd2")+"\">"+(x.overallSafe?"Безопасно":"Нарушения")+"</span></td><td>"+(x.totalViolations||0)+"</td><td>"+ab+"</td></tr>"}).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<files.length;i++){(function(f){var fn=Date.now()+"_"+Math.random().toString(36).slice(2)+"_"+f.name.replace(/[^a-zA-Z0-9._-]/g,"_");fetch(SBU+"/storage/v1/object/photos/"+fn,{method:"POST",headers:{"apikey":SBK,"Authorization":"Bearer "+SBK,"Content-Type":f.type},body:f}).then(function(r){if(r.ok){urls.push(SBU+"/storage/v1/object/public/photos/"+fn)}check()}).catch(function(){check()})})(files[i])}}
|
||||
|
||||
@ -170,8 +189,8 @@ function submitAudit(){
|
||||
uploadPhotos(files,function(photoUrls){
|
||||
var cats={},tv=0;CATS.forEach(function(cat){var ch=[];cat.items.forEach(function(item,i){var cb=document.getElementById("cb-"+cat.id+"-"+i);if(cb&&cb.checked)ch.push({item:item})});cats[cat.id]={items:ch,allSafe:ch.length===0};tv+=ch.length});
|
||||
var dl=[];if(document.getElementById("d0").checked)dl.push("Работник привёл примеры безопасных действий");if(document.getElementById("d1").checked)dl.push("Были обсуждены риски / проблемы");if(document.getElementById("d2").checked)dl.push("Определены корректирующие меры");if(document.getElementById("d3").checked)dl.push("Предложения работника зафиксированы");
|
||||
var e={id:editId||Date.now(),number:document.getElementById("pn").value.trim(),date:document.getElementById("pd").value,location:loc,region:document.getElementById("pr").value,workType:document.getElementById("pw").value.trim(),workerCount:parseInt(document.getElementById("pc").value)||1,observer:document.getElementById("po").value.trim()||U.name,observerRole:document.getElementById("por").value.trim(),overallSafe:document.getElementById("os").classList.contains("sf"),categories:cats,totalViolations:tv,dialogue:dl,photos:photoUrls,createdBy:U.login,createdAt:new Date().toISOString()};
|
||||
var audits=getA();if(editId){audits=audits.map(function(a){return a.id===editId?e:a});editId=null}else{audits.unshift(e)}saveA(audits);lastSubmitted=e;
|
||||
var e={id:editId||Date.now(),number:document.getElementById("pn").value.trim(),date:document.getElementById("pd").value,location:loc,region:document.getElementById("pr").value,workType:document.getElementById("pw").value.trim(),workerCount:parseInt(document.getElementById("pc").value)||1,observer:document.getElementById("po").value.trim()||U.name,observerRole:document.getElementById("por").value.trim(),overallSafe:document.getElementById("os").classList.contains("sf"),categories:cats,totalViolations:tv,violations:getVioData(),dialogue:dl,photos:photoUrls,createdBy:U.login,createdAt:new Date().toISOString()};
|
||||
var audits=getA();if(editId){audits=audits.map(function(a){return a.id===editId?e:a});editId=null}else{audits.unshift(e)} saveA(audits);lastSubmitted=e;sbPushAudit(e);
|
||||
document.getElementById("sd").innerHTML="<b>Бланк №"+(e.number||"—")+"</b> | "+e.date+" | "+(e.overallSafe?"БЕЗОПАСНО":"НАРУШЕНИЙ: "+e.totalViolations);document.getElementById("fs").style.display="block";setTimeout(function(){document.getElementById("fs").style.display="none"},20000);
|
||||
resetF();rVL();
|
||||
});
|
||||
@ -225,7 +244,7 @@ function importData(){
|
||||
input.click();
|
||||
}
|
||||
|
||||
rHS();
|
||||
rHS();sbSyncAll();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
12
index.html
12
index.html
@ -53,18 +53,24 @@ button:hover{background:#48CAE4}
|
||||
<script>
|
||||
document.getElementById('tL').onclick=function(){document.getElementById('loginForm').style.display='block';document.getElementById('regForm').style.display='none';this.classList.add('ac');document.getElementById('tR').classList.remove('ac')};
|
||||
document.getElementById('tR').onclick=function(){document.getElementById('loginForm').style.display='none';document.getElementById('regForm').style.display='block';this.classList.add('ac');document.getElementById('tL').classList.remove('ac')};
|
||||
function doAppLogin(login,data){sessionStorage.setItem('pab_user',JSON.stringify({login:login,name:data.name,role:data.role,freq:data.freq||'',email:data.email||'',branch:data.branch||'',dept:data.dept||'',region:data.region||'',oblast:data.oblast||'',city:data.city||''}));location.href='app.html'}
|
||||
document.getElementById('lb').onclick=function(){
|
||||
var u=document.getElementById('lu').value.trim().toLowerCase();
|
||||
var p=document.getElementById('lp').value.trim();
|
||||
if(u==='admin'&&p==='admin'){sessionStorage.setItem('pab_user',JSON.stringify({login:'admin',name:'Администратор',role:'Руководитель',freq:'0,month',email:'admin@telecom.kz',branch:'АО «Казахтелеком»',dept:'ЦА',region:'Центральный',oblast:'—',city:'г. Астана'}));location.href='app.html';return}
|
||||
var users={};try{users=JSON.parse(localStorage.getItem('pab_users')||'{}')}catch(e){}if(users[u]&&users[u].pass===p){sessionStorage.setItem('pab_user',JSON.stringify({login:u,name:users[u].name,role:users[u].role,freq:users[u].freq||'',email:users[u].email||'',branch:users[u].branch||'',dept:users[u].dept||'',region:users[u].region||'',oblast:users[u].oblast||'',city:users[u].city||''}));location.href='app.html';return}
|
||||
document.getElementById('lerr').style.display='block'
|
||||
var users={};try{users=JSON.parse(localStorage.getItem('pab_users')||'{}')}catch(e){}
|
||||
if(users[u]&&users[u].pass===p){doAppLogin(u,users[u]);return}
|
||||
// Проверка через Supabase
|
||||
fetch("https://znexbjafkvyjffffbhlf.supabase.co/rest/v1/users?login=eq."+encodeURIComponent(u),{headers:{"apikey":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InpuZXhiamFma3Z5amZmZmZiaGxmIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc4MDY0NDE4MiwiZXhwIjoyMDk2MjIwMTgyfQ.5pOYTkL5eCmpSHBY3EwKof6NVKt7tL4Fn8xUAKM8itE","Authorization":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InpuZXhiamFma3Z5amZmZmZiaGxmIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc4MDY0NDE4MiwiZXhwIjoyMDk2MjIwMTgyfQ.5pOYTkL5eCmpSHBY3EwKof6NVKt7tL4Fn8xUAKM8itE"}}).then(function(r){return r.json()}).then(function(d){if(d.length>0&&d[0].pass===p){var ud=d[0];doAppLogin(u,ud);users[u]={pass:ud.pass,name:ud.name,email:ud.email,role:ud.role,freq:ud.freq,branch:ud.branch,dept:ud.dept,region:ud.region,oblast:ud.oblast,city:ud.city};localStorage.setItem('pab_users',JSON.stringify(users))}else{document.getElementById('lerr').style.display='block'}}).catch(function(){document.getElementById('lerr').style.display='block'});
|
||||
};
|
||||
document.getElementById('lp').onkeydown=function(e){if(e.key==='Enter')document.getElementById('lb').onclick()};
|
||||
document.getElementById('rbb').onclick=function(){
|
||||
var l=document.getElementById('rl').value.trim().toLowerCase(),p=document.getElementById('rp').value.trim(),n=document.getElementById('rn').value.trim(),em=document.getElementById('re').value.trim(),r=document.getElementById('rr').value,fr=document.getElementById('rf').value,br=document.getElementById('rb').value.trim(),dp=document.getElementById('rd').value.trim(),rg=document.getElementById('rg').value.trim(),ob=document.getElementById('ro').value.trim(),ct=document.getElementById('rc').value.trim();
|
||||
var e=document.getElementById('rerr'),ok=document.getElementById('rok');ok.style.display='none';if(!l||l.length<2){e.textContent='Логин мин. 2 символа';e.style.display='block';return}if(!p||p.length<3){e.textContent='Пароль мин. 3 символа';e.style.display='block';return}if(!n){e.textContent='Укажите ФИО';e.style.display='block';return}if(!r){e.textContent='Выберите должность';e.style.display='block';return}if(!em||em.indexOf('@')<0){e.textContent='Укажите Email';e.style.display='block';return}if(!br){e.textContent='Укажите филиал';e.style.display='block';return}if(!rg){e.textContent='Укажите регион';e.style.display='block';return}if(!ct){e.textContent='Укажите город';e.style.display='block';return}if(!dp){e.textContent='Укажите подразделение';e.style.display='block';return}if(!fr){e.textContent='Укажите периодичность ПАБ';e.style.display='block';return}
|
||||
var users={};try{users=JSON.parse(localStorage.getItem('pab_users')||'{}')}catch(e){}if(users[l]){e.textContent='Логин занят';e.style.display='block';return}e.style.display='none';users[l]={pass:p,name:n,email:em,role:r,freq:fr,branch:br,dept:dp,region:rg,oblast:ob,city:ct};localStorage.setItem('pab_users',JSON.stringify(users));ok.style.display='block';document.getElementById('lu').value=l;setTimeout(function(){ok.style.display='none';document.getElementById('tL').onclick()},2000)
|
||||
var users={};try{users=JSON.parse(localStorage.getItem('pab_users')||'{}')}catch(e){}if(users[l]){e.textContent='Логин занят';e.style.display='block';return}e.style.display='none';users[l]={pass:p,name:n,email:em,role:r,freq:fr,branch:br,dept:dp,region:rg,oblast:ob,city:ct};localStorage.setItem('pab_users',JSON.stringify(users));
|
||||
// Отправка в Supabase
|
||||
fetch("https://znexbjafkvyjffffbhlf.supabase.co/rest/v1/users",{method:"POST",headers:{"apikey":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InpuZXhiamFma3Z5amZmZmZiaGxmIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc4MDY0NDE4MiwiZXhwIjoyMDk2MjIwMTgyfQ.5pOYTkL5eCmpSHBY3EwKof6NVKt7tL4Fn8xUAKM8itE","Authorization":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InpuZXhiamFma3Z5amZmZmZiaGxmIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc4MDY0NDE4MiwiZXhwIjoyMDk2MjIwMTgyfQ.5pOYTkL5eCmpSHBY3EwKof6NVKt7tL4Fn8xUAKM8itE","Content-Type":"application/json","Prefer":"resolution=merge-duplicates"},body:JSON.stringify({login:l,pass:p,name:n,email:em,role:r,freq:fr,branch:br,dept:dp,region:rg,oblast:ob,city:ct})}).catch(function(){});
|
||||
ok.style.display='block';document.getElementById('lu').value=l;setTimeout(function(){ok.style.display='none';document.getElementById('tL').onclick()},2000)
|
||||
};
|
||||
</script>
|
||||
</body>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user