Логин подтягивает всех из Supabase + кнопка Синхронизировать для админа

This commit is contained in:
Dauren777 2026-06-11 04:44:13 +00:00
parent fa77de1526
commit e55485b30a
2 changed files with 18 additions and 6 deletions

View File

@ -158,7 +158,7 @@ function rDB(){
if(dt&&dt.value)a=a.filter(function(x){return x.date<=dt.value});
var t=a.length,sf=a.filter(function(x){return x.overallSafe}).length,wd=a.filter(function(x){return !x.overallSafe}).length,tv=a.reduce(function(s,x){return s+(x.totalViolations||0)},0);
var ot=0,bh=0,ov=0;for(var k in all){if(k==="admin")continue;var u=all[k];var q=getUserQuota(u);if(!q.p)continue;var p=gp(q.p);var d=a.filter(function(x){return x.createdBy===k&&new Date(x.date)>=p.s}).length;if(d>q.c)ov++;else if(d>=q.c)ot++;else bh++}
var adb=isA()?"<div style=\"margin-bottom:12px;display:flex;gap:8px;flex-wrap:wrap\"><button class=\"btn bp\" onclick=\"downloadFullCSV()\">📥 CSV данные</button><button class=\"btn bo\" onclick=\"downloadSummaryHTML()\">📊 HTML отчёт</button><button class=\"btn bo\" onclick=\"showAllUsers()\">👥 Пользователи</button><span style=\"color:#E2E6EB;margin:0 4px\">|</span><button class=\"btn bp\" onclick=\"importData()\">📥 Импорт</button><button class=\"btn bo\" onclick=\"exportData()\">📤 Экспорт</button></div>":"";
var adb=isA()?"<div style=\"margin-bottom:12px;display:flex;gap:8px;flex-wrap:wrap\"><button class=\"btn bp\" onclick=\"downloadFullCSV()\">📥 CSV данные</button><button class=\"btn bo\" onclick=\"downloadSummaryHTML()\">📊 HTML отчёт</button><button class=\"btn bo\" onclick=\"showAllUsers()\">👥 Пользователи</button><span style=\"color:#E2E6EB;margin:0 4px\">|</span><button class=\"btn bp\" onclick=\"sbSync();alert('Синхронизировано!')\" style=\"background:#2D6A4F\">🔄 Синхронизировать</button><button class=\"btn bo\" onclick=\"importData()\">📥 Импорт</button><button class=\"btn bo\" onclick=\"exportData()\">📤 Экспорт</button></div>":"";
c.innerHTML=adb+"<div class=\"fb\"><span style=\"font-size:12px;color:#5B6573\">с</span><input type=\"date\" id=\"df\" style=\"width:140px\" onchange=\"rDB()\"><span style=\"font-size:12px;color:#5B6573\">по</span><input type=\"date\" id=\"dt\" style=\"width:140px\" onchange=\"rDB()\"><button class=\"btn bo bs\" onclick=\"document.getElementById('df').value='';document.getElementById('dt').value='';rDB()\" style=\"margin-left:6px\">✕ Сбросить</button></div>"+
"<div class=\"stats\"><div class=\"st\"><div class=\"n\">"+t+"</div><div class=\"l\">Всего аудитов</div></div><div class=\"st gr\"><div class=\"n\">"+sf+"</div><div class=\"l\">Безопасно</div></div><div class=\"st rd\"><div class=\"n\">"+wd+"</div><div class=\"l\">С нарушениями</div></div><div class=\"st rd\"><div class=\"n\">"+tv+"</div><div class=\"l\">Всего пунктов нарушений</div></div><div class=\"st gr\"><div class=\"n\">"+(ot+ov)+"</div><div class=\"l\">Выполняют график</div></div><div class=\"st rd\"><div class=\"n\">"+bh+"</div><div class=\"l\">Отстают от графика</div></div></div>"+
"<div style=\"display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px\"><div class=\"card\"><h3>📂 Нарушения по категориям</h3><canvas id=\"ch1\"></canvas></div><div class=\"card\"><h3>📅 Динамика по датам</h3><canvas id=\"ch2\"></canvas></div></div>"+

View File

@ -57,11 +57,23 @@ function doAppLogin(login,data){sessionStorage.setItem('pab_user',JSON.stringify
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}
if(u==='admin'&&p==='admin'){doAppLogin('admin',{name:'Администратор',role:'Руководитель',freq:'0,month',email:'admin@telecom.kz',branch:'АО «Казахтелеком»',dept:'ЦА',region:'Центральный',oblast:'—',city:'г. Астана'});return}
// Сначала подтягиваем всех пользователей из Supabase в localStorage
var SBU="https://znexbjafkvyjffffbhlf.supabase.co",SBK="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InpuZXhiamFma3Z5amZmZmZiaGxmIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc4MDY0NDE4MiwiZXhwIjoyMDk2MjIwMTgyfQ.5pOYTkL5eCmpSHBY3EwKof6NVKt7tL4Fn8xUAKM8itE";
fetch(SBU+"/rest/v1/users?select=*",{headers:{"apikey":SBK,"Authorization":"Bearer "+SBK}}).then(function(r){return r.json()}).then(function(sbUsers){
var users={};try{users=JSON.parse(localStorage.getItem('pab_users')||'{}')}catch(e){}
sbUsers.forEach(function(x){if(!users[x.login])users[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}});
localStorage.setItem('pab_users',JSON.stringify(users));
// Проверяем логин
if(users[u]&&users[u].pass===p){doAppLogin(u,users[u]);return}
if(sbUsers.some(function(x){return x.login===u&&x.pass===p})){var ud=sbUsers.find(function(x){return x.login===u});doAppLogin(u,ud);return}
document.getElementById('lerr').style.display='block';
}).catch(function(){
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('lerr').style.display='block';
});
};
};
document.getElementById('lp').onkeydown=function(e){if(e.key==='Enter')document.getElementById('lb').onclick()};
document.getElementById('rbb').onclick=function(){