v80: стили + таблица — шаг 1

This commit is contained in:
Dauren777 2026-06-09 16:04:03 +00:00
parent 943ce1e12c
commit fc7aaa82f5

View File

@ -1,26 +1,83 @@
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>План ПБ</title></head>
<body style="font-family:Arial;padding:40px;background:#F1F5F9">
<div style="max-width:400px;margin:100px auto;background:#fff;padding:30px;border-radius:12px;text-align:center">
<h2>План ПБ 2026</h2>
<input id="lem" placeholder="curator@telecom.kz" style="display:block;width:100%;padding:10px;margin:10px 0;border:1px solid #ddd;border-radius:6px">
<input id="lpw" type="password" placeholder="Пароль" style="display:block;width:100%;padding:10px;margin:10px 0;border:1px solid #ddd;border-radius:6px">
<button onclick="doLogin()" style="background:#00B4D8;color:#fff;padding:12px 30px;border:none;border-radius:8px;font-size:16px;cursor:pointer;width:100%">Войти</button>
<p id="out" style="margin-top:10px;font-weight:bold"></p>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>План ПБ 2026 — Казахтелеком</title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font:14px/1.4 Arial,sans-serif;background:#F1F5F9;color:#0B1A2E}
input,select,textarea,button{font:inherit;outline:none}
.btn{background:#00B4D8;color:#fff;padding:12px 24px;border-radius:8px;font-weight:600;font-size:14px;border:none;cursor:pointer}.btn:hover{opacity:.85}
.btn-sm{padding:6px 14px;font-size:12px}.btn-r{background:#EF4444;color:#fff}
#login{display:flex;align-items:center;justify-content:center;min-height:100vh;background:linear-gradient(135deg,#0B1A2E,#1a3a5c)}
#login>div{background:#fff;border-radius:20px;padding:40px;width:400px;max-width:90vw;text-align:center}
#login h1{font-size:22px;font-weight:800;margin-bottom:4px}#login h1 span{color:#00B4D8}
#login p{color:#64748B;font-size:13px;margin-bottom:24px}
#login input{display:block;width:100%;padding:12px;border:2px solid #E2E8F0;border-radius:10px;font-size:14px;margin-bottom:12px}
#app{display:none;max-width:1100px;margin:0 auto;padding:20px}
.top{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:2px solid #E2E8F0;margin-bottom:20px}
.top h2{font-size:20px;font-weight:700}
.card{background:#fff;border-radius:12px;padding:20px;margin-bottom:14px;border:1px solid #E2E8F0}
.card h3{font-size:16px;font-weight:700;margin-bottom:10px}
table{width:100%;border-collapse:collapse}th,td{padding:8px 12px;font-size:13px;text-align:left;border-bottom:1px solid #E2E8F0}
th{background:#F1F5F9;font-weight:600;font-size:11px;text-transform:uppercase;color:#64748B}
.badge{display:inline-block;padding:3px 8px;border-radius:100px;font-size:11px;font-weight:600}
.badge.g{background:#D1FAE5;color:#065F46}.badge.a{background:#FEF3C7;color:#92400E}.badge.r{background:#FEE2E2;color:#991B1B}.badge.b{background:#DBEAFE;color:#1E40AF}
.fr{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center}
.fr input,.fr select{padding:10px 14px;border:1px solid #E2E8F0;border-radius:8px;font-size:13px;background:#fff}.fr input{min-width:220px}
</style>
</head>
<body onload="if(localStorage.getItem('su'))doLogin()">
<div id="login"><div>
<h1><span>План ПБ</span> 2026</h1>
<p>АО «Казахтелеком»</p>
<input id="lem" placeholder="curator@telecom.kz">
<input id="lpw" type="password" placeholder="Пароль">
<p id="lerr" style="color:#EF4444;font-size:12px;display:none">Неверная почта</p>
<button class="btn" style="width:100%" onclick="doLogin()">Войти</button>
</div></div>
<div id="app">
<div class="top"><h2>План ПБ 2026</h2><span id="ul"></span><button class="btn btn-sm btn-r" onclick="doLogout()">Выйти</button></div>
<div class="card" id="content"></div>
</div>
<script>
var users={curator:{n:"Куратор"},dpp:{n:"ДПБ"}};
var U={curator:{n:"Куратор ПБ"},dpp:{n:"Директор ДПБ"}};
var br=["Дирекция ПБ","Дивизион Сеть","Корп. бизнес","Розн. бизнес","Сервисная фабрика","Телеком Комплект","Корп. университет","Упр. проектами","Цифровой бизнес"];
var st={wait:"Не начато",warn:"В процессе",late:"Просрочено",done:"Исполнено"};
var cu=null,ev=null;
function esc(s){return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}
function doLogin(){
var e=document.getElementById("lem").value.trim().toLowerCase();
var k=e.split("@")[0];
if(users[k]){
document.getElementById("out").textContent="✅ Доступ: "+users[k].n;
document.getElementById("out").style.color="green";
}else{
document.getElementById("out").textContent="❌ Неверно";
document.getElementById("out").style.color="red";
}
if(U[k]){cu={n:U[k].n};localStorage.setItem("su",JSON.stringify(cu));showApp()}else{document.getElementById("lerr").style.display="block"}
}
function doLogout(){localStorage.removeItem("su");cu=null;document.getElementById("login").style.display="flex";document.getElementById("app").style.display="none"}
function showApp(){document.getElementById("login").style.display="none";document.getElementById("app").style.display="block";document.getElementById("ul").textContent=cu.n;renderEv()}
// Load events
var s=localStorage.getItem("se6");
if(s){try{ev=JSON.parse(s)}catch(e){}}
if(!ev||!ev.length){
var x=new XMLHttpRequest();x.open("GET","data.json",true);
x.onload=function(){if(x.status===200){try{ev=JSON.parse(x.responseText);localStorage.setItem("se6",JSON.stringify(ev))}catch(e){ev=[]}};renderEv()};
x.onerror=function(){ev=[];renderEv()};
x.send();
}
function renderEv(){
if(!ev||!ev.length){document.getElementById("content").innerHTML="<p>Загрузка данных...</p>";return}
var h="<div class='fr'><span>Всего: "+ev.length+" мероприятий</span></div><table><tr><th></th><th>Мероприятие</th><th>Филиал</th><th>Срок</th><th>Статус</th></tr>";
ev.forEach(function(e){
var cl={done:"g",warn:"a",late:"r",wait:"w"}[e.s]||"w";
h+="<tr><td>"+e.id+"</td><td style='font-size:12px'>"+esc(e.t)+"</td><td style='font-size:11px'>"+br[e.b]+"</td><td>"+e.due+"</td><td><span class='badge "+cl+"'>"+st[e.s]+"</span></td></tr>";
});
h+="</table>";
document.getElementById("content").innerHTML=h;
}
</script>
</body>