fix: clean rebuild from stable base — only doLogin+addUser fixes, no IDB
This commit is contained in:
parent
f6de18e49d
commit
1f065cedc8
126
script.js
126
script.js
@ -724,49 +724,6 @@ var brs=["Дирекция производственной безопаснос
|
||||
var stn={warn:"В процессе",late:"Просрочено",done:"Исполнено"};
|
||||
var stc={warn:"a",late:"r",done:"g"};
|
||||
var USR={curator:{n:"Куратор ПБ",bg:0},admin:{n:"Администратор",bg:0},dpp:{n:"Директор ДПБ",bg:0},ivanov:{n:"Иванов Иван",bg:1},petrov:{n:"Петров Петр",bg:2},sidorov:{n:"Сидоров Сидор",bg:3},kozhin:{n:"Кожин А.М.",bg:4},ismailov:{n:"Исмаилов Р.К.",bg:1},nurpeisov:{n:"Нурпеисов Д.А.",bg:5},suleimenov:{n:"Сулейменов К.Т.",bg:6},kassenov:{n:"Касенов Б.Б.",bg:7},serikov:{n:"Сериков Е.С.",bg:8},zhunusov:{n:"Жунусов А.А.",bg:2},muratov:{n:"Муратов А.Т.",bg:3},bakirov:{n:"Бакиров Т.Н.",bg:4}};
|
||||
var DBNAME="hse_fv3";var DBVER=1;var gdb=null;
|
||||
function openDB(cb){
|
||||
if(gdb){cb(gdb);return}
|
||||
var r=indexedDB.open(DBNAME,DBVER);
|
||||
r.onupgradeneeded=function(e){e.target.result.createObjectStore("files",{keyPath:"id"})};
|
||||
r.onsuccess=function(e){gdb=e.target.result;cb(gdb)};
|
||||
r.onerror=function(){cb(null)}
|
||||
}
|
||||
function idbPut(id,file,name,size,type,cb){
|
||||
var fr=new FileReader();
|
||||
fr.onload=function(){
|
||||
openDB(function(db){if(!db){cb(false);return}
|
||||
var tx=db.transaction("files","readwrite");var st=tx.objectStore("files");
|
||||
st.put({id:id,name:name,size:size,type:type,data:fr.result});
|
||||
tx.oncomplete=function(){cb(true)};tx.onerror=function(){cb(false)}
|
||||
})
|
||||
};
|
||||
fr.onerror=function(){cb(false)};
|
||||
fr.readAsArrayBuffer(file)
|
||||
}
|
||||
function idbGetAll(prefix,cb){
|
||||
openDB(function(db){if(!db){cb([]);return}
|
||||
var tx=db.transaction("files","readonly");var st=tx.objectStore("files");
|
||||
var rq=st.getAll();rq.onsuccess=function(){
|
||||
var all=rq.result||[];var res=[];
|
||||
for(var i=0;i<all.length;i++){if(all[i].id.indexOf(prefix)===0)res.push(all[i])}
|
||||
cb(res)
|
||||
};rq.onerror=function(){cb([])}
|
||||
})
|
||||
}
|
||||
function idbGet(id,cb){
|
||||
openDB(function(db){if(!db){cb(null);return}
|
||||
var tx=db.transaction("files","readonly");var st=tx.objectStore("files");
|
||||
var rq=st.get(id);rq.onsuccess=function(){cb(rq.result)};rq.onerror=function(){cb(null)}
|
||||
})
|
||||
}
|
||||
function idbDel(id,cb){
|
||||
openDB(function(db){if(!db){cb(false);return}
|
||||
var tx=db.transaction("files","readwrite");tx.objectStore("files").delete(id);
|
||||
tx.oncomplete=function(){cb(true)};tx.onerror=function(){cb(false)}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
function esc(s){
|
||||
return String(s).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")
|
||||
@ -816,11 +773,8 @@ function init(){
|
||||
function doLogin(){
|
||||
var e=document.getElementById("lem").value.trim().toLowerCase();
|
||||
var k=e.split("@")[0];
|
||||
var u=USR[k];
|
||||
if(!u){
|
||||
var ex=localStorage.getItem("ext_users");if(ex){try{var eu=JSON.parse(ex);if(eu[k])u=eu[k];if(!u&&eu[e])u=eu[e]}catch(e){}}
|
||||
}
|
||||
if(!u)u=USR[e];
|
||||
var u=USR[k]||USR[e];
|
||||
if(!u){var ex=localStorage.getItem("ext_users");if(ex){try{var eu=JSON.parse(ex);if(eu[k])u=eu[k];if(!u&&eu[e])u=eu[e]}catch(e){}}}
|
||||
if(u){
|
||||
cu={n:u.n,bg:u.bg,role:u.role!==undefined?u.role:(u.bg===0?0:1)};
|
||||
localStorage.setItem("su",JSON.stringify(cu));
|
||||
@ -1025,11 +979,11 @@ function openEv(id,subIdx){
|
||||
h+="<div style='margin-bottom:12px;padding:10px;background:#F0F9FF;border-radius:8px'><strong>AI-анализ:</strong> <span style='font-size:13px;color:#64748B'>"+esc(e.ai||"\u2014")+"</span></div>";
|
||||
h+="<div style='margin-bottom:12px'><strong>Отчётность:</strong></div>";
|
||||
h+="<div style='margin-bottom:8px;display:flex;gap:8px;flex-wrap:wrap;align-items:center'>";
|
||||
h+="<span style='font-size:12px'>Количество:</span> <input type='number' id='evq_"+e.id+"' value='"+(e.q||"")+"' min='0' style='width:80px;padding:4px;border:1px solid #E2E8F0;border-radius:4px;font-size:12px'>";
|
||||
var now=new Date();
|
||||
var curMonth=now.getMonth();
|
||||
var savedMonth=localStorage.getItem("evmonth_"+e.id);
|
||||
var selMonth=savedMonth!==null?parseInt(savedMonth,10):curMonth;
|
||||
h+="<span style='font-size:12px'>Количество:</span> <input type='number' id='evq_"+e.id+"' value='"+(localStorage.getItem("sq_"+e.id+"_m"+selMonth)||e.q||"")+"' min='0' style='width:80px;padding:4px;border:1px solid #E2E8F0;border-radius:4px;font-size:12px'>";
|
||||
h+="<span style='font-size:12px;margin-left:8px'>Месяц:</span> <select id='evm_"+e.id+"' style='padding:4px;border:1px solid #E2E8F0;border-radius:4px;font-size:12px'>";
|
||||
var mnames=["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"];
|
||||
for(var mi=0;mi<12;mi++){
|
||||
@ -1038,11 +992,11 @@ function openEv(id,subIdx){
|
||||
h+=">"+mnames[mi]+"</option>"
|
||||
}
|
||||
h+="</select></div>";
|
||||
h+="<div style='margin-bottom:12px'><textarea id='evn_"+e.id+"' placeholder='Примечание / описание выполнения...' style='width:100%;padding:8px;border:1px solid #E2E8F0;border-radius:6px;font-size:12px;resize:vertical;min-height:50px'>"+esc(subIdx!==undefined?((localStorage.getItem("sn_"+e.id+"_s"+subIdx)||"")):(localStorage.getItem("sn_"+e.id+"_m"+selMonth)||e.n||""))+"</textarea></div>";
|
||||
h+="<div style='margin-bottom:12px'><textarea id='evn_"+e.id+"' placeholder='Примечание / описание выполнения...' style='width:100%;padding:8px;border:1px solid #E2E8F0;border-radius:6px;font-size:12px;resize:vertical;min-height:50px'>"+esc(subIdx!==undefined?((localStorage.getItem("sn_"+e.id+"_s"+subIdx)||"")):(e.n||""))+"</textarea></div>";
|
||||
h+="<div style='margin-bottom:12px'><strong>Файлы:</strong>";
|
||||
if(cu&&cu.bg===0){
|
||||
for(var bi=0;bi<brs.length;bi++){
|
||||
var bk=fk+"_m"+selMonth+"_b"+bi;
|
||||
var bk=fk+"_b"+bi;
|
||||
var fd=localStorage.getItem(bk);
|
||||
if(fd){
|
||||
try{
|
||||
@ -1056,7 +1010,7 @@ function openEv(id,subIdx){
|
||||
}
|
||||
}
|
||||
}else{
|
||||
var bk=fk+"_m"+selMonth+"_b"+(cu?cu.bg:0);
|
||||
var bk=fk+"_b"+(cu?cu.bg:0);
|
||||
var fd=localStorage.getItem(bk);
|
||||
if(fd){
|
||||
try{
|
||||
@ -1083,28 +1037,7 @@ function openEv(id,subIdx){
|
||||
h+="<div style='margin-top:16px;text-align:right;border-top:1px solid #E2E8F0;padding-top:12px'><button class='btn btn-sm btn-g' onclick='saveEvModal("+e.id+")'>Сохранить</button>";
|
||||
h+="<button class='btn btn-sm' style='margin-left:8px;background:#E2E8F0;color:#0B1A2E' onclick='closeModal()'>Отмена</button></div>";
|
||||
h+="</div>";
|
||||
showModal(h);
|
||||
var fk2=fk+"_m"+selMonth;
|
||||
idbGetAll(fk2,function(files){
|
||||
var fdiv=document.getElementById("fl_"+e.id);if(!fdiv)return;
|
||||
if(!files||!files.length){fdiv.innerHTML="\u041D\u0435\u0442 \u0444\u0430\u0439\u043B\u043E\u0432";return}
|
||||
var fh="";var groups={};
|
||||
for(var i=0;i<files.length;i++){
|
||||
var f=files[i];var parts=f.id.split("_b");var bi=parseInt(parts[parts.length-1])||0;
|
||||
if(!groups[bi])groups[bi]=[];groups[bi].push(f)
|
||||
}
|
||||
for(var bi=0;bi<brs.length;bi++){
|
||||
if(!groups[bi]||!groups[bi].length)continue;
|
||||
if(cu&&cu.bg===0)fh+="<div style='font-size:11px;color:#64748B;margin-top:4px'><strong>"+esc(brs[bi])+":</strong></div>";
|
||||
for(var j=0;j<groups[bi].length;j++){
|
||||
var f=groups[bi][j];var kb=Math.round(f.size/1024);
|
||||
var sz=kb<1024?kb+" KB":(kb/1024).toFixed(1)+" MB";
|
||||
var ds="";var ts=parseInt(f.id.split("_").pop());if(ts>100000){var dd=new Date(ts);ds=dd.getDate()+"."+String(dd.getMonth()+1).padStart(2,"0")+"."+dd.getFullYear()}
|
||||
fh+="<div class='file-item'><span class='fn'>"+esc(f.name)+"</span><span class='fs'>("+sz+(ds?", "+ds:"")+")</span><a onclick="idbGet('"+f.id+"',function(ff){if(!ff)return;var b=new Blob([ff.data],{type:ff.type||''});var u=URL.createObjectURL(b);var a=document.createElement('a');a.href=u;a.download=ff.name;document.body.appendChild(a);a.click();document.body.removeChild(a);setTimeout(function(){URL.revokeObjectURL(u)},5000)})">\u0421\u043A\u0430\u0447\u0430\u0442\u044C</a><a style='color:#EF4444;margin-left:4px' onclick="idbDel('"+f.id+"',function(o){if(o)openEv("+e.id+(subIdx!==undefined?","+subIdx:"")+")})">\u0423\u0434\u0430\u043B\u0438\u0442\u044C</a></div>"
|
||||
}
|
||||
}
|
||||
fdiv.innerHTML=fh||"\u041D\u0435\u0442 \u0444\u0430\u0439\u043B\u043E\u0432"
|
||||
})
|
||||
showModal(h)
|
||||
}
|
||||
|
||||
function showModal(html){
|
||||
@ -1120,9 +1053,13 @@ function closeModal(){
|
||||
|
||||
function saveEvModal(id){
|
||||
var sel=document.getElementById("evs_"+id);
|
||||
var inq=document.getElementById("evq_"+id);
|
||||
var inn=document.getElementById("evn_"+id);
|
||||
for(var i=0;i<evs.length;i++){
|
||||
if(evs[i].id===id){
|
||||
if(sel)evs[i].s=sel.value;
|
||||
if(inq)evs[i].q=parseInt(inq.value,10)||0;
|
||||
if(inn){if(curSub!==null){try{localStorage.setItem("sn_"+id+"_s"+curSub,inn.value.trim())}catch(e){}}else{evs[i].n=inn.value.trim()}}
|
||||
if(sel&&sel.value==="done"&&(evs[i].done==="\u2014"||!evs[i].done)){
|
||||
var d=new Date();
|
||||
evs[i].done=d.getDate()+"."+String(d.getMonth()+1).padStart(2,"0")+"."+d.getFullYear()
|
||||
@ -1131,20 +1068,7 @@ function saveEvModal(id){
|
||||
}
|
||||
}
|
||||
var inm=document.getElementById("evm_"+id);
|
||||
if(inm){
|
||||
var mv=inm.value;
|
||||
try{localStorage.setItem("evmonth_"+id,mv)}catch(e){}
|
||||
var inq=document.getElementById("evq_"+id);var inn=document.getElementById("evn_"+id);
|
||||
if(inn)try{localStorage.setItem("sn_"+id+"_m"+mv,inn.value.trim())}catch(e){}
|
||||
if(inq)try{localStorage.setItem("sq_"+id+"_m"+mv,(parseInt(inq.value,10)||0).toString())}catch(e){}
|
||||
}
|
||||
var fk="sf_"+id;var mk=inm?"_m"+inm.value:"_m0";
|
||||
idbGetAll(fk+mk,function(files){
|
||||
if(files&&files.length){
|
||||
var meta=[];for(var i=0;i<files.length;i++){meta.push({n:files[i].name,s:files[i].size})}
|
||||
try{localStorage.setItem("rpt_"+fk+mk,JSON.stringify(meta))}catch(e){}
|
||||
}
|
||||
});
|
||||
if(inm)try{localStorage.setItem("evmonth_"+id,inm.value)}catch(e){}
|
||||
saveEv();
|
||||
closeModal();
|
||||
renderEv()
|
||||
@ -1168,15 +1092,23 @@ function upFile(id){
|
||||
var inp=document.getElementById("fu_"+id);
|
||||
if(!inp||!inp.files||!inp.files[0])return;
|
||||
var f=inp.files[0];
|
||||
if(f.size>3145728){alert("\u0424\u0430\u0439\u043B \u0431\u043E\u043B\u044C\u0448\u0435 3MB");return}
|
||||
var fr=new FileReader();
|
||||
var subKey=curSub!==null?"_s"+curSub:"";
|
||||
var inm=document.getElementById("evm_"+id);
|
||||
var mk=inm?"_m"+inm.value:"_m0";
|
||||
var sk=curSub!==null?"_s"+curSub:"";
|
||||
var bk="_b"+(cu?cu.bg:0);
|
||||
var fileId="sf_"+id+mk+sk+bk+"_"+Date.now();
|
||||
idbPut(fileId,f,f.name,f.size,f.type,function(ok){
|
||||
if(ok){openEv(id,curSub!==null?curSub:undefined)}
|
||||
else{alert("\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F")}
|
||||
})
|
||||
var monthKey=inm?"_m"+inm.value:"";
|
||||
var brKey="_b"+(cu?cu.bg:0);
|
||||
fr.onload=function(){
|
||||
var key="sf_"+id+monthKey+subKey+brKey;
|
||||
var arr=[];
|
||||
var ex=localStorage.getItem(key);
|
||||
if(ex){try{arr=JSON.parse(ex)}catch(e){}}
|
||||
var d=new Date();
|
||||
arr.push({n:f.name,s:f.size,d:d.getDate()+"."+String(d.getMonth()+1).padStart(2,"0")+"."+d.getFullYear(),u:cu?cu.n:"",data:fr.result});
|
||||
try{localStorage.setItem(key,JSON.stringify(arr))}catch(e){alert("\u041E\u0448\u0438\u0431\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F")}
|
||||
openEv(id,curSub!==null?curSub:undefined)
|
||||
};
|
||||
fr.readAsDataURL(f)
|
||||
}
|
||||
function dlFile(id,idx){
|
||||
var inm=document.getElementById("evm_"+id);
|
||||
@ -1622,7 +1554,7 @@ function addUser(){
|
||||
var pw=document.getElementById("reg_pass").value.trim();
|
||||
var rlSel=document.getElementById("reg_role");
|
||||
var rl=rlSel?parseInt(rlSel.value,10):1;
|
||||
if(!k||!nm){alert("\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u043B\u043E\u0433\u0438\u043D \u0438 \u0424\u0418\u041E");return}
|
||||
if(!em||!nm){alert("\u0417\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u0435 \u043B\u043E\u0433\u0438\u043D \u0438 \u0424\u0418\u041E");return}
|
||||
if(USR[k]){alert("\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442");return}
|
||||
USR[k]={n:nm,bg:bg,ph:ph,role:rl};
|
||||
if(pw)USR[k].pw=pw;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user