Модуль, снятый с лицензии, отключается один раз: служба остановлена (bj-keymedia unit-disable), одно оповещение, в списках не показывается; вернули в лицензию — служба включается

Также: версия файла, совпадающего с выпуском, записывается (нет ложного «новее»); признак неудачной проверки отдельно от результатов установки; окно обновления само перезагружает страницу.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-09-24 22:43:34 +03:00
parent e450887688
commit 2edc83e614
7 changed files with 192 additions and 12 deletions
@@ -593,12 +593,22 @@ label { font-size:13px; font-weight:500; }
detail=document.getElementById('upd-detail'), doneEl=document.getElementById('upd-done');
function mb(n){ return (n/1048576).toFixed(n<10485760?1:0)+' МБ'; }
function show(){ modal.style.display='flex'; }
var finished=false;
function finish(text, ok){
finished=true;
stageEl.textContent=text; bar.style.width='100%';
bar.style.background= ok ? 'var(--ok,#2e8b57)' : 'var(--err,#c0392b)';
doneEl.style.display='block';
if(ok){ // после успешного обновления страница перезагружается сама — с новыми версиями
var left=5, tick=function(){ if(left<=0){ location.reload(); return; }
doneEl.querySelector('button').textContent='Готово (страница обновится через '+left+' с)'; left--; setTimeout(tick,1000); };
tick();
}
}
function run(form){
var lastChange=Date.now(), lastKey='';
// сторож: если отчёт не меняется 2 минуты, перезагружаем страницу — не оставляем «зависшее» окно
(function watch(){ if(finished) return; if(Date.now()-lastChange>120000){ location.reload(); return; } setTimeout(watch,5000); })();
var note='', startVer=null, target='', seenActive=false, postDone=false, lost=false, t0=Date.now(), seq0=null;
show(); stageEl.textContent='Отправка запроса…'; bar.style.width='3%'; detail.textContent='';
// номер последнего отчёта до отправки: отчёт прошлой попытки (например, с ошибкой) не показываем
@@ -620,6 +630,7 @@ label { font-size:13px; font-weight:500; }
function poll(){
fetch('/admin/setup/update/progress',{cache:'no-store',credentials:'same-origin'}).then(function(r){ if(!r.ok) throw 0; return r.json(); }).then(function(p){
if(startVer===null){ startVer=p.version; }
var key=[p.seq,p.step,p.done,p.finished,p.version].join('/'); if(key!==lastKey){ lastKey=key; lastChange=Date.now(); }
if(p.target) target=p.target;
if(p.note) note=p.note;
if(lost){ // bj вернулся после перезапуска