diff --git a/index.html b/index.html index cc27785..1fc5023 100644 --- a/index.html +++ b/index.html @@ -971,28 +971,13 @@ var ALL_EVENTS=[ ] } ]; - var cu=null,evs=[],tab="events",curSub=null; var secs=["Раздел I. Обучение, компетенции и культура безопасности","Раздел II. Техническая безопасность и надежность","Раздел III. Готовность к ЧС","Раздел IV. Коммуникации и вовлеченность","Раздел V. Цифровизация и инновации"]; 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}}; - -function cleanTitle(e){ - if(!e||!e.t)return"";if(!e.sub||!e.sub.length)return e.t; - var t=e.t;var idx=-1; - var pats=[String.fromCharCode(10)+"a)",String.fromCharCode(10)+"b)",String.fromCharCode(10)+"\u0430)",String.fromCharCode(10)+"\u0431)",": "+String.fromCharCode(10)+"a",":"+String.fromCharCode(10)+"a"]; - for(var i=0;i0&&(idx<0||p0?t.substring(0,idx).trim():t -} -function cleanResp(e){ - if(!e||!e.r)return""; - if(!e.sub||!e.sub.length)return e.r; - var r=e.r;var idx=r.indexOf("\n"+String.fromCharCode(10));if(idx<0){var m=r.match(/\n[a-zа-я]+\)/);if(m)idx=r.indexOf(m[0])} - return idx>0?r.substring(0,idx).trim():r -} +function cleanTitle(e){if(!e||!e.t)return"";if(!e.sub||!e.sub.length)return e.t;var t=e.t;var nl=String.fromCharCode(10);var idx=-1;var ls=["a)","b)","c)","d)","e)","а)","б)","в)","г)","д)"];for(var i=0;i0&&(idx<0||p0)idx++}if(idx<0){var m=t.match(new RegExp(nl+"[a-zа-я]+[\)\u0029]"));if(m)idx=t.indexOf(m[0])}return idx>0?t.substring(0,idx).trim():t} function esc(s){ return String(s).replace(/&/g,"&").replace(//g,">").replace(/"/g,""") } @@ -1020,7 +1005,6 @@ function subResp(r,letter){ } return cur||"" } - function init(){ try{ var su=localStorage.getItem("su"); @@ -1037,7 +1021,6 @@ function init(){ } if(cu)showApp() } - function doLogin(){ var e=document.getElementById("lem").value.trim().toLowerCase(); var k=e.split("@")[0]; @@ -1068,7 +1051,6 @@ function showApp(){ if(cu&&cu.role===2){var anav=document.getElementById("snav_analytics");if(anav)anav.style.display="";var unav2=document.getElementById("snav_users");if(unav2)unav2.style.display="none"} switchTab("events") } - function loadEv(){ evs=[]; if(typeof ALL_EVENTS!=="undefined"&&ALL_EVENTS&&ALL_EVENTS.length){ @@ -1105,7 +1087,6 @@ function saveEv(){ try{localStorage.setItem("se5",JSON.stringify(out))}catch(e){} storCheck() } - function switchTab(t){ tab=t; var tabs=["events","analytics","reports","ai","users","hse"]; @@ -1126,7 +1107,6 @@ function switchTab(t){ if(t==="hse"){var hm=document.getElementById("hse_month");if(hm&&!hm.value)hm.value=new Date().toISOString().slice(0,7)} if(t==="users")renderUsers() } - function daysRem(due){ if(!due||due==="\u2014")return 999; var p=due.split("."); @@ -1136,7 +1116,6 @@ function daysRem(due){ now.setHours(0,0,0,0); return Math.floor((d-now)/86400000) } - function renderEv(){ var sea=document.getElementById("sea").value.toLowerCase().trim(); var fs=document.getElementById("fs").value; @@ -1170,7 +1149,7 @@ function renderEv(){ h+=""; h+=""+e.id+""; h+="
"+esc(e.t)+"
"+esc(e.dname)+"
"; - h+=""+esc(nl2c(cleanResp(e)))+""; + h+=""+(e.sub&&e.sub.length?"\u0441\u043C. \u043F\u043E\u0434\u043F\u0443\u043D\u043A\u0442\u044B":esc(nl2c(e.r)))+""; h+=""+e.due+" ("+drText+")"; if(hasSub){h+=""} else{ @@ -1195,7 +1174,6 @@ function renderEv(){ if(!h)h="

Нет мероприятий

"; document.getElementById("ev_content").innerHTML=""+h+"
NМероприятиеОтветственныеСрокСтатус
" } - function togSub(id){ var el=document.getElementById("sub_"+id); if(!el)return; @@ -1217,9 +1195,7 @@ function chkSub(id,idx,val){ try{localStorage.setItem(key,JSON.stringify(arr))}catch(e){} renderEv() } - function openEv(id,subIdx){curSub=subIdx!==undefined?subIdx:null;var e=null;for(var i=0;i"+titlePre+esc(titleText)+"";h+="
\u041E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439: "+esc(nl2c(e.r))+"
";h+="
\u0424\u0438\u043B\u0438\u0430\u043B: "+brs[e.b]+" | \u0421\u0440\u043E\u043A: "+e.due;if(e.done&&e.done!="\u2014")h+=" | \u0418\u0441\u043F\u043E\u043B\u043D\u0435\u043D\u043E: "+e.done;h+="
";h+="
\u0421\u0442\u0430\u0442\u0443\u0441:
";if(e.h&&e.h.length){h+="
\u0418\u0441\u0442\u043E\u0440\u0438\u044F:
    ";for(var hi=0;hi"+esc(e.h[hi])+""}h+="
"}h+="
\u041E\u0442\u0447\u0451\u0442\u043D\u043E\u0441\u0442\u044C:
";h+="
";var mnames=["\u042F\u043D\u0432","\u0424\u0435\u0432","\u041C\u0430\u0440","\u0410\u043F\u0440","\u041C\u0430\u0439","\u0418\u044E\u043D","\u0418\u044E\u043B","\u0410\u0432\u0433","\u0421\u0435\u043D","\u041E\u043A\u0442","\u041D\u043E\u044F","\u0414\u0435\u043A"];for(var mi=0;mi<12;mi++){h+=""}h+="
";h+="
\u0424\u0430\u0439\u043B\u044B \u0437\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u043C\u0435\u0441\u044F\u0446:
";if(cu&&cu.bg===0){for(var bi=0;bi"+esc(brs[bi])+":
";for(var fi=0;fi"+esc(f.n)+"("+(f.s?Math.round(f.s/1024)+"KB":"")+", "+esc(f.u||"")+" "+esc(f.d||"")+")\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0421\u043A\u0430\u0447\u0430\u0442\u044C\u0423\u0434\u0430\u043B\u0438\u0442\u044C
"}}catch(ex){}}}}else{var bk=fkBase+"_b"+(cu?cu.bg:0);var fd=localStorage.getItem(bk);if(fd){try{var fa=JSON.parse(fd);for(var fi=0;fi"+esc(f.n)+"("+(f.s?Math.round(f.s/1024)+"KB":"")+", "+esc(f.u||"")+" "+esc(f.d||"")+")\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0421\u043A\u0430\u0447\u0430\u0442\u044C\u0423\u0434\u0430\u043B\u0438\u0442\u044C"}}catch(ex){}}}h+="
";h+="
";h+="";if(subIdx===undefined&&e.sub&&e.sub.length>0){h+="
\u041F\u043E\u0434\u043F\u0443\u043D\u043A\u0442\u044B:";var ss=localStorage.getItem("ss_"+e.id);for(var si=0;si "+esc(e.sub[si].l)+") "+esc(e.sub[si].t)+"
"}h+=""}h+="
";h+="
";h+="";showModal(h)} - function showModal(html){ var mb=document.getElementById("modal_body"); var m=document.getElementById("modal"); @@ -1230,7 +1206,6 @@ function showModal(html){ var _ats={};function autoSaveNote(id){clearTimeout(_ats[id]);_ats[id]=setTimeout(function(){var inn=document.getElementById("evn_"+id);if(!inn)return;var mv2=localStorage.getItem("evmonth_"+id)||"0";var ss=curSub!==null?"_s"+curSub:"";try{localStorage.setItem("sn_"+id+ss+"_m"+mv2,inn.value.trim())}catch(e){}showToast("\u0410\u0432\u0442\u043E\u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043E")},3000)}function showToast(msg){var t=document.getElementById("toast");if(!t)return;t.textContent=msg;t.style.display="block";t.style.opacity="1";clearTimeout(t._tid);t._tid=setTimeout(function(){t.style.opacity="0";setTimeout(function(){t.style.display="none"},300)},2000)}function closeModal(){ document.getElementById("modal").style.display="none" } - function switchEvMonthBtn(id,m,subIdx){var inn=document.getElementById("evn_"+id);var curM=localStorage.getItem("evmonth_"+id)||"0";var subSuffix=curSub!==null?"_s"+curSub:"";if(inn)try{localStorage.setItem("sn_"+id+subSuffix+"_m"+curM,inn.value.trim())}catch(e){}try{localStorage.setItem("evmonth_"+id,m.toString())}catch(e){}openEv(id,subIdx!==null?subIdx:undefined)} function switchEvMonth(id,subIdx){var inm=document.getElementById("evm_"+id);if(!inm)return;var mv=inm.value;var inn=document.getElementById("evn_"+id);var subSuffix=curSub!==null?"_s"+curSub:"";if(inn)try{localStorage.setItem("sn_"+id+subSuffix+"_m"+mv,inn.value.trim())}catch(e){}try{localStorage.setItem("evmonth_"+id,mv)}catch(e){}openEv(id,subIdx!==null?subIdx:undefined)} function saveEvModal(id){var sel=document.getElementById("evs_"+id);for(var i=0;i"+esc(brs[bi])+":";for(var j=0;j"+esc(f.n)+"("+(f.s?Math.round(f.s/1024)+"KB":"")+", "+esc(f.u||"")+" "+esc(f.d||"")+")\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0421\u043A\u0430\u0447\u0430\u0442\u044C>\u0423\u0434\u0430\u043B\u0438\u0442\u044C"}}fdiv.innerHTML=fh||"\u041D\u0435\u0442 \u0444\u0430\u0439\u043B\u043E\u0432"}function delFileRefresh(id,idx,br){if(!confirm("\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0444\u0430\u0439\u043B?"))return;var mk=(localStorage.getItem("evmonth_"+id)||"0");var bk="_b"+(br!==undefined?br:(cu?cu.bg:0));var key="sf_"+id+"_m"+mk+(curSub!==null?"_s"+curSub:"")+bk;var ex=localStorage.getItem(key);if(!ex)return;try{var arr=JSON.parse(ex);arr.splice(idx,1);if(arr.length)localStorage.setItem(key,JSON.stringify(arr));else localStorage.removeItem(key);refreshFiles(id)}catch(e){}} 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>2097152){alert("\u0424\u0430\u0439\u043B \u0431\u043E\u043B\u044C\u0448\u0435 2MB");return}var fr=new FileReader();var subKey=curSub!==null?"_s"+curSub:"";var inm=document.getElementById("evm_"+id);var mv2=inm?inm.value:(localStorage.getItem("evmonth_"+id)||"0");var monthKey="_m"+mv2;var brKey="_b"+(cu?cu.bg:0);var fname=f.name;var fsize=f.size;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:fname,s:fsize,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. \u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0435 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435.");return}showToast("\u0424\u0430\u0439\u043B \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D");refreshFiles(id)};fr.readAsDataURL(f)} function openFile(id,idx,br){var inm=document.getElementById("evm_"+id);var mv3=inm?inm.value:(localStorage.getItem("evmonth_"+id)||"0");var mk="_m"+mv3;var bk="_b"+(br!==undefined?br:(cu?cu.bg:0));var key="sf_"+id+mk+(curSub!==null?"_s"+curSub:"")+bk;var ex=localStorage.getItem(key);if(!ex)return;try{var arr=JSON.parse(ex);var f=arr[idx];if(f&&f.data){var w=window.open("","_blank");w.document.write("")}}catch(e){}} @@ -1288,10 +1262,8 @@ function delFile(id,idx,br){ openEv(id,curSub!==null?curSub:undefined) }catch(e){} } - function saveBackup(){saveEv();var backup={events:evs.map(function(e){return{id:e.id,s:e.s,p:e.p,done:e.done,h:e.h,q:e.q,n:e.n}}),files:{}};var fkeys=[];for(var k in localStorage){if(localStorage.hasOwnProperty(k)&&k.indexOf("sf_")===0)fkeys.push(k)}for(var i=0;i"; html+="
В процессе
"+warn+"
"; document.getElementById("an_stats").innerHTML=html; - var problem=[]; for(var i=0;i3)ans+="\n\nРекомендация: срочный штаб по "+crit+" просроченным пунктам." - }else if(ql.indexOf("статус")!==-1||ql.indexOf("состоян")!==-1||ql.indexOf("обстан")!==-1){ var bySec=[]; for(var si=0;si0.7)ans+="\nОбщая оценка: хорошо"; else if(done/total>0.4)ans+="\nОбщая оценка: удовлетворительно"; else ans+="\nОбщая оценка: требует внимания" - }else if(ql.indexOf("пункт")!==-1||ql.indexOf("номер")!==-1){ var match=ql.match(/\d+/); if(match){ @@ -1602,11 +1561,9 @@ function aiResp(q){ ans+="\nПрогресс: "+(found.p||0)+"%" }else{ans="Пункт N"+num+" не найден"} }else{ans="Напиши номер пункта, например: пункт 5"} - }else{ ans="Я — Джарвис, ваш аналитический ассистент. Могу ответить:\n\n• сводка — общая статистика\n• просроченные — список просрочек\n• риски — зона риска (<30 дней)\n• рейтинг — рейтинг филиалов\n• аудит — полный аудит\n• прогноз — прогноз исполнения\n• статус — состояние по разделам\n• план — план действий и рекомендации\n• пункт N — детали конкретного мероприятия" } - addMsg("b",ans,"Джарвис") } function renderUsers(){ @@ -1822,7 +1779,6 @@ function dlAnalyticsWord(){ var blob=new Blob([h],{type:"application/msword"}); var a=document.createElement("a");a.href=URL.createObjectURL(blob);a.download="analytics.doc";a.click() } - - +