Раздел '+["I","II","III","IV","V"][e.sec]+'';
html+=''+esc(e.t)+'
';
- html+='';
+ html+='';
+ html+='';
+ html+=''+e.p+'%
';
+ html+='';
+
+ // Month tabs + Region tabs
+ var mh='';months.forEach(function(m,i){mh+=''+M(i)+''});mh+='
';
+ var rh='Регион:';
+ regions.forEach(function(r,i){rh+=''+r+''});rh+='
';
+
+ // Main event files (for selected region)
+ html+='📎 Отчётность — '+regions[curRegion]+'
';
+ html+=mh;html+=rh;
+ html+='
';
+ cfs.forEach(function(f,i){html+='
📄 '+esc(f.name)+''+(f.desc?''+esc(f.desc)+'':'')+''+(f.size/1024).toFixed(0)+' КБ · '+f.date+'
'});
+ html+='
';
+ html+='
Формы завершения: '+esc(e.dname)+'
';
+
+ // Sub-items
+ var hasSub = e.sub && e.sub.length;
+ if(hasSub){
+ html+='📋 Подпункты
Нажмите 📎 для управления файлами подпункта
';
+ e.sub.forEach(function(s,i){
+ var ch=sc.indexOf(i)>=0,sd=getMD(e.id,curRegion,i),scd=sd[cm]||{report:"",files:[]},scfs=scd.files||[];
+ var isActive=editSubIdx===i;
+ html+='
';
+ html+=''+s.l+')'+esc(s.t)+'';
+ html+='Файлов: '+scfs.length+'';
+ html+='';
+ html+='
';
+ if(isActive){
+ html+='
';
+ html+='
'+s.l+') '+esc(s.t)+'
';
+ html+='
Файлы подпункта: '+regions[curRegion]+' · '+M(curMonth)+'
';
+ html+='
';
+ if(scfs.length)html+='
Файлы ('+scfs.length+'):
';
+ scfs.forEach(function(f,fi){html+='
📄 '+esc(f.name)+''+(f.desc?''+esc(f.desc)+'':'')+''+(f.size/1024).toFixed(0)+' КБ · '+f.date+'
'});
+ html+='
';
+ html+='
';
+ }
+ });
+ html+='
';
+ }
+
+ html+='🤖 Вывод ИИ-агента
'+esc(e.ai)+'';
+ html+='История:
';e.h.forEach(function(h){html+='
'});html+='
';
+ html+='';
+
+ document.getElementById("editModalContent").innerHTML=html;
+ document.getElementById("editModalOverlay").classList.add("open");
+}
html+='';
html+=''+e.p+'%
';
html+='';
@@ -504,13 +551,12 @@ function saveEdit(id, mk){
e.s=document.getElementById("es").value;e.p=parseInt(document.getElementById("ep").value);
var cmt=(document.getElementById("ec").value||"").trim();
// Save main event report
- var mr=document.getElementById("mr");if(mr){var ad=getMD(id,-1);if(!ad[mk])ad[mk]={report:"",files:[]};ad[mk].report=mr.value;setMD(id,ad,-1)}
- // Save sub-item reports
+ var mr=document.getElementById("mr");if(mr){var ad=getMD(id,curRegion,-1);if(!ad[mk])ad[mk]={report:"",files:[]};ad[mk].report=mr.value;setMD(id,ad,curRegion,-1)}
if(e.sub&&e.sub.length){
var cks=[];
e.sub.forEach(function(_,i){
var el=document.getElementById("sc_"+i);if(el&&el.checked)cks.push(i);
- var sr=document.getElementById("mr_s"+i);if(sr){var sd=getMD(id,i);if(!sd[mk])sd[mk]={report:"",files:[]};sd[mk].report=sr.value;setMD(id,sd,i)}
+ var sr=document.getElementById("mr_s"+i);if(sr){var sd=getMD(id,curRegion,i);if(!sd[mk])sd[mk]={report:"",files:[]};sd[mk].report=sr.value;setMD(id,sd,curRegion,i)}
});
setSC(id,cks);
}
@@ -520,15 +566,15 @@ function saveEdit(id, mk){
}
function closeEM(){document.getElementById("editModalOverlay").classList.remove("open")}
-// File storage: sf_ for main, sf__s for sub-item i
-function getMD(id,si){var k=si>=0?'sf_'+id+'_s'+si:'sf_'+id;var r=localStorage.getItem(k);return r?JSON.parse(r):{}}
-function setMD(id,o,si){var k=si>=0?'sf_'+id+'_s'+si:'sf_'+id;localStorage.setItem(k,JSON.stringify(o))}
+// File storage: sf__r for main, sf__s_r for sub-item
+function getMD(id,ri,si){ri=ri||0;var k=si>=0?'sf_'+id+'_s'+si+'_r'+ri:'sf_'+id+'_r'+ri;var r=localStorage.getItem(k);return r?JSON.parse(r):{}}
+function setMD(id,o,ri,si){ri=ri||0;var k=si>=0?'sf_'+id+'_s'+si+'_r'+ri:'sf_'+id+'_r'+ri;localStorage.setItem(k,JSON.stringify(o))}
function getSC(id){var r=localStorage.getItem("ss_"+id);return r?JSON.parse(r):[]}
function setSC(id,a){localStorage.setItem("ss_"+id,JSON.stringify(a))}
function storageUsed(){var t=0;for(var i=0;i1048576?(b/1048576).toFixed(1)+' МБ':(b/1024).toFixed(0)+' КБ'}
-function clearAllFiles(){if(!confirm('Удалить ВСЕ загруженные файлы и отчёты? Это нельзя отменить.'))return;var keys=[];for(var i=0;i=0?'_s'+si:'',fi=document.getElementById('fi'+prefix);
+function uploadFiles(eid,mk,ri,si){
+ mk=months[mk];var prefix=si>=0?'_s'+si:'',fi=document.getElementById('fi'+prefix);
if(!fi||!fi.files.length)return;
var desc=(document.getElementById('fd'+prefix)||{}).value;desc=(desc||'').trim();
var btn=document.getElementById('ub'+prefix);btn.textContent="Загружается...";btn.disabled=true;
- var MAX=3072*1024,ad=getMD(eid,si);if(!ad[mk])ad[mk]={report:"",files:[]};
+ var MAX=3072*1024,ad=getMD(eid,ri,si);if(!ad[mk])ad[mk]={report:"",files:[]};
var arr=ad[mk].files,pr=0,sk=0;
function fin(){
- try{setMD(eid,ad,si)}catch(e){
- var bak=JSON.parse(JSON.stringify(ad));bak[mk].files=bak[mk].files.slice(0,-(pr-sk)||0);try{setMD(eid,bak,si)}catch(e2){}
- alert("⚠️ Хранилище заполнено. Удалите старые файлы (кнопка «Очистить файлы» на дашборде).");
+ try{setMD(eid,ad,ri,si)}catch(e){
+ var bak=JSON.parse(JSON.stringify(ad));bak[mk].files=bak[mk].files.slice(0,-(pr-sk)||0);try{setMD(eid,bak,ri,si)}catch(e2){}
+ alert("⚠️ Хранилище заполнено. Очистите файлы на дашборде.");
}
- addLog("загрузил файлы",eid,(pr-sk)+" файл(ов) за "+M(mk));
- if(sk)alert(sk+" файл(ов) > 3 МБ пропущены");closeEM();openEdit(eid,curMonth,si>=0?si:undefined)
+ addLog("загрузил файлы",eid,(pr-sk)+" файл(ов) за "+M(mk)+" ("+regions[ri]+")");
+ if(sk)alert(sk+" файл(ов) > 3 МБ пропущены");closeEM();openEdit(eid,curMonth,ri,si>=0?si:undefined)
}
for(var i=0;iMAX){sk++;pr++;if(pr===fi.files.length)fin();return}
var r=new FileReader();r.onload=function(ev){arr.push({name:f.name,size:f.size,type:f.type,desc:desc,date:new Date().toLocaleDateString(),data:ev.target.result});pr++;if(pr===fi.files.length)fin()};
r.onerror=function(){pr++;if(pr===fi.files.length)fin()};r.readAsDataURL(f)})(fi.files[i])}
}
-function dlF(eid,mk,idx,si){si=si||-1;mk=months[mk];var ad=getMD(eid,si),arr=ad[mk]?ad[mk].files:null;if(!arr||!arr[idx]||!arr[idx].data)return;var f=arr[idx],a=document.createElement("a");a.href=f.data;a.download=f.name;document.body.appendChild(a);a.click();document.body.removeChild(a)}
-function rmF(eid,mk,idx,si){si=si||-1;mk=months[mk];var ad=getMD(eid,si);if(!ad[mk]||!ad[mk].files)return;ad[mk].files.splice(idx,1);setMD(eid,ad,si);closeEM();openEdit(eid,curMonth,si>=0?si:undefined)}
+function dlF(eid,mk,idx,ri,si){si=si||-1;mk=months[mk];var ad=getMD(eid,ri,si),arr=ad[mk]?ad[mk].files:null;if(!arr||!arr[idx]||!arr[idx].data)return;var f=arr[idx],a=document.createElement("a");a.href=f.data;a.download=f.name;document.body.appendChild(a);a.click();document.body.removeChild(a)}
+function rmF(eid,mk,idx,ri,si){si=si||-1;mk=months[mk];var ad=getMD(eid,ri,si);if(!ad[mk]||!ad[mk].files)return;ad[mk].files.splice(idx,1);setMD(eid,ad,ri,si);closeEM();openEdit(eid,curMonth,ri,si>=0?si:undefined)}
function renderJournal(){
var log=getLog().reverse(),h='Журнал действий
';