83 lines
9.9 KiB
HTML
83 lines
9.9 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>Вход — ПАБ</title>
|
||
<style>
|
||
*{box-sizing:border-box;margin:0;padding:0}
|
||
body{font:16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;background:linear-gradient(135deg,#0F1218 0%,#1a2332 100%)}
|
||
#card{background:#fff;padding:44px 36px;border-radius:14px;width:100%;max-width:400px;box-shadow:0 8px 40px rgba(0,0,0,0.25)}
|
||
#card h1{font-size:19px;text-align:center;margin-bottom:4px}
|
||
#card .sub{font-size:13px;color:#5B6573;text-align:center;margin-bottom:24px}
|
||
input{width:100%;padding:12px;margin-bottom:12px;border:2px solid #E2E6EB;border-radius:8px;font-size:14px;font-family:inherit;outline:none}
|
||
input:focus{border-color:#00B4D8}
|
||
select{width:100%;padding:10px;margin-bottom:10px;border:2px solid #E2E6EB;border-radius:8px;font-size:13px;font-family:inherit}
|
||
button{width:100%;padding:12px;background:#00B4D8;color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:700;cursor:pointer;font-family:inherit}
|
||
button:hover{background:#48CAE4}
|
||
.tabs{display:flex;gap:0;margin-bottom:20px;border-radius:8px;overflow:hidden;border:2px solid #E2E6EB}
|
||
.tabs button{flex:1;padding:8px;background:#fff;color:#5B6573;border:none;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;border-radius:0}
|
||
.tabs button.ac{background:#00B4D8;color:#fff}
|
||
.err{color:#E63946;font-size:13px;text-align:center;display:none;margin-top:8px}
|
||
.ok{background:#EDF7F0;border:1px solid #2D6A4F;color:#2D6A4F;padding:10px;border-radius:8px;font-size:13px;text-align:center;display:none;margin-top:10px;font-weight:600}
|
||
#regForm{display:none}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div id="card">
|
||
<h1>🛡️ Поведенческий аудит безопасности</h1>
|
||
<div class="sub">Система ПАБ</div>
|
||
<div class="tabs"><button class="ac" id="tL">Вход</button><button id="tR">Регистрация</button></div>
|
||
<div id="loginForm">
|
||
<input type="text" id="lu" placeholder="Логин">
|
||
<input type="password" id="lp" placeholder="Пароль">
|
||
<button id="lb">Войти</button>
|
||
<div class="err" id="lerr">Неверный логин или пароль</div>
|
||
</div>
|
||
<div id="regForm">
|
||
<input type="text" id="rl" placeholder="Придумайте логин">
|
||
<input type="password" id="rp" placeholder="Придумайте пароль (мин. 3)">
|
||
<input type="text" id="rn" placeholder="ФИО">
|
||
<input type="email" id="re" placeholder="Email">
|
||
<select id="rr"><option value="">-- Должность --</option><option>Директор департамента ЦА</option><option>Директор департамента филиала</option><option>Региональный директор филиала</option><option>Директор ДЭСД</option><option>Начальник ТУСМ</option><option>Руководитель структурного подразделения</option><option>Начальник центра/службы/цеха</option><option>Начальник участка</option><option>Инженер БиОТ</option><option>Работник отдела БиОТ</option></select>
|
||
<select id="rf"><option value="">-- Периодичность ПАБ --</option><option value="2,month">2 раза в месяц</option><option value="1,month">1 раз в месяц</option><option value="1,quarter">1 раз в квартал</option><option value="1,halfyear">1 раз в полгода</option></select>
|
||
<input type="text" id="rb" placeholder="Филиал">
|
||
<input type="text" id="rd" placeholder="Подразделение">
|
||
<input type="text" id="rg" placeholder="Регион">
|
||
<input type="text" id="ro" placeholder="Область">
|
||
<input type="text" id="rc" placeholder="Город / село">
|
||
<button id="rbb">Зарегистрироваться</button>
|
||
<div class="err" id="rerr"></div><div class="ok" id="rok">✅ Регистрация успешна! Теперь войдите.</div>
|
||
</div>
|
||
</div>
|
||
<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'){doAppLogin('admin',{name:'Администратор',role:'Руководитель',freq:'0,month',email:'admin@telecom.kz',branch:'АО «Казахтелеком»',dept:'ЦА',region:'Центральный',oblast:'—',city:'г. Астана'});return}
|
||
// Быстрая проверка localStorage
|
||
var users={};try{users=JSON.parse(localStorage.getItem('pab_users')||'{}')}catch(e){}
|
||
if(users[u]&&users[u].pass===p){doAppLogin(u,users[u]);return}
|
||
// Показываем что идёт проверка
|
||
var btn=document.getElementById('lb');btn.textContent='Проверка...';btn.disabled=true;
|
||
// Проверка через Supabase
|
||
var SBU="https://znexbjafkvyjffffbhlf.supabase.co",SBK="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InpuZXhiamFma3Z5amZmZmZiaGxmIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc4MDY0NDE4MiwiZXhwIjoyMDk2MjIwMTgyfQ.5pOYTkL5eCmpSHBY3EwKof6NVKt7tL4Fn8xUAKM8itE";
|
||
fetch(SBU+"/rest/v1/users?login=eq."+encodeURIComponent(u),{headers:{"apikey":SBK,"Authorization":"Bearer "+SBK}}).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{btn.textContent='Войти';btn.disabled=false;document.getElementById('lerr').style.display='block'}}).catch(function(){btn.textContent='Войти';btn.disabled=false;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));
|
||
// Отправка в 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})}).then(function(r){if(!r.ok){console.error("Supabase reg error:",r.status);alert("⚠️ Регистрация локально OK, но не сохранена в облако. С другого устройства вход будет недоступен.")}}).catch(function(e){console.error(e);alert("⚠️ Регистрация локально OK, но нет связи с облаком.")});
|
||
ok.style.display='block';document.getElementById('lu').value=l;setTimeout(function(){ok.style.display='none';document.getElementById('tL').onclick()},2000)
|
||
};
|
||
</script>
|
||
</body>
|
||
</html>
|