v80: стили + таблица — шаг 1
This commit is contained in:
parent
943ce1e12c
commit
fc7aaa82f5
91
index.html
91
index.html
@ -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,"&").replace(/</g,"<").replace(/>/g,">")}
|
||||
|
||||
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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user