Интерфейс: единые термины, названия разделов и шагов, узкий экран
- клиенту — «шлюз НРД» вместо «ИШ» (установка, статусы, этапы, ключ, переводы); расшифровка «(ИШ)» — только в заголовке окна обновления - контур — «тестовый (TEST3)»; в строке шлюза — «работает · версия …» - меню = заголовки разделов: «Обмен с DEPO», «Пользователи и вход», «Оформление отчётов» - мастер: заголовок шага = его название в колонке шагов - вторичная кнопка — классом btn-secondary, а не стилями в разметке - узкий экран: поля и сетки с жёсткой шириной не вылезают, таблицы прокручиваются, анкета участника — по высоте экрана Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -51,7 +51,7 @@
|
||||
<h3 style="margin:0 0 4px">Шлюз на этом сервере</h3>
|
||||
<div id="ig-head" class="muted">Проверяю…</div>
|
||||
<p class="muted" style="font-size:12px;margin:4px 0 0">Новые версии шлюза приходят с обновлением bj и ставятся сами.</p>
|
||||
<div id="ig-reinst" style="display:none;margin-top:10px"><button type="button" class="btn" id="ig-bnd">Установить ИШ</button> <span class="muted" id="ig-bnd-v" style="font-size:12.5px"></span></div>
|
||||
<div id="ig-reinst" style="display:none;margin-top:10px"><button type="button" class="btn" id="ig-bnd">Установить шлюз НРД</button> <span class="muted" id="ig-bnd-v" style="font-size:12.5px"></span></div>
|
||||
<div id="ig-ov" style="display:none;position:fixed;inset:0;z-index:9999;background:rgba(20,24,35,.55);align-items:center;justify-content:center">
|
||||
<div class="card" style="max-width:600px;width:92%;margin:0;box-shadow:0 10px 40px rgba(0,0,0,.25)">
|
||||
<h3 id="ig-ov-h" style="margin:0 0 8px">Обновление шлюза НРД</h3>
|
||||
@@ -60,7 +60,7 @@
|
||||
<div id="ig-ov-btns" style="display:none;margin-top:12px"><button type="button" class="btn" id="ig-ov-close">Закрыть</button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="ig-rb" style="display:none;margin-top:8px"><button type="button" class="btn" id="ig-rb-btn" style="background:var(--card);color:var(--text);border:1px solid var(--border-strong,#c9cdd8)">Откатить ИШ к <span id="ig-rb-v"></span></button> <span class="muted" style="font-size:12.5px">вернуть версию, которая стояла до последнего обновления (программа, данные, база ИШ)</span></div>
|
||||
<div id="ig-rb" style="display:none;margin-top:8px"><button type="button" class="btn btn-secondary" id="ig-rb-btn">Откатить шлюз НРД к <span id="ig-rb-v"></span></button> <span class="muted" style="font-size:12.5px">вернуть версию, которая стояла до последнего обновления (программа, данные, база шлюза)</span></div>
|
||||
<ol class="ig-steps" id="ig-steps" hidden></ol>
|
||||
<div id="ig-out" style="margin-top:8px;font-size:13px"></div>
|
||||
<details id="ig-logbox" hidden style="margin-top:6px;font-size:12.5px"><summary style="cursor:pointer;color:var(--accent)">Журнал установки</summary>
|
||||
@@ -261,21 +261,21 @@
|
||||
var ri=document.getElementById('ig-reinst'), bb=document.getElementById('ig-bnd'), bv=document.getElementById('ig-bnd-v');
|
||||
var running=d.installed&&d.engine==='Running';
|
||||
var rb=document.getElementById('ig-rb'); if(rb){ var can=d.rollback&&d.rollback!==d.version; rb.style.display=can?'block':'none'; if(can) document.getElementById('ig-rb-v').textContent=d.rollback; }
|
||||
if(!d.installed) head.innerHTML=bad('ИШ на этом сервере не установлен');
|
||||
else head.innerHTML=(running?ok('ИШ '+d.version+' установлен и работает'):bad('Шлюз НРД установлен, но не работает'+(IGDEV?': движок '+(d.engine||'не отвечает')+', служба '+d.service:'')));
|
||||
if(!d.installed) head.innerHTML=bad('Шлюз НРД на этом сервере не установлен');
|
||||
else head.innerHTML=(running?ok('Шлюз НРД '+d.version+' установлен и работает'):bad('Шлюз НРД установлен, но не работает'+(IGDEV?': движок '+(d.engine||'не отвечает')+', служба '+d.service:'')));
|
||||
if(d.busy) head.innerHTML='<span style="color:var(--accent)">⟳ Шлюз перезапускается — '+esc(d.busy)+'; состояние — последнее известное</span>';
|
||||
if(!running && d.keymedia==='missing'){ head.innerHTML='<span style="color:var(--warn)">⚠ ИШ '+esc(d.version)+' ждёт флешку с ключом подписи — её нет в сервере. Вставьте флешку: bj перезапустит шлюз сам. Переустанавливать ИШ не нужно.</span>'; }
|
||||
if(!running && d.keymedia==='missing'){ head.innerHTML='<span style="color:var(--warn)">⚠ Шлюз НРД ждёт флешку с ключом подписи — её нет в сервере. Вставьте флешку: bj перезапустит шлюз сам. Переустанавливать шлюз не нужно.</span>'; }
|
||||
// не стоит или не работает — одна кнопка: поставить заново проверенную версию с сервера (систему переставлять не нужно)
|
||||
ri.style.display=(running||d.keymedia==='missing')?'none':'block'; // без флешки переустановка не поможет
|
||||
if(d.installing){ // bj сам ставит/обновляет ИШ: остановка шлюза — штатная, переустанавливать не нужно
|
||||
head.innerHTML='<span style="color:var(--accent)">⟳ Идёт установка ИШ'+(d.upgrade_to?' '+esc(d.upgrade_to):'')+' — '+esc(d.installing)+'. Шлюз недоступен 1–3 минуты; настройки и каналы сохраняются.</span>'; ri.style.display='none';
|
||||
head.innerHTML='<span style="color:var(--accent)">⟳ Идёт установка шлюза НРД'+(d.upgrade_to?' '+esc(d.upgrade_to):'')+' — '+esc(d.installing)+'. Шлюз недоступен 1–3 минуты; настройки и каналы сохраняются.</span>'; ri.style.display='none';
|
||||
} else if(d.upgrade_to){
|
||||
head.innerHTML+='<div class="muted" style="font-size:13px;margin-top:4px">⟳ Получена версия ИШ '+esc(d.upgrade_to)+' — bj обновит шлюз сам в ближайшие минуты; настройки и каналы сохранятся.</div>';
|
||||
head.innerHTML+='<div class="muted" style="font-size:13px;margin-top:4px">⟳ Получена новая версия шлюза НРД '+esc(d.upgrade_to)+' — bj обновит шлюз сам в ближайшие минуты; настройки и каналы сохранятся.</div>';
|
||||
}
|
||||
if(d.installing||d.upgrade_to) ovStart(); // обновление идёт или вот-вот начнётся — страница перекрыта ходом
|
||||
if(!running){
|
||||
if(d.bundled){ bb.style.display=''; bb.textContent=d.installed?'Установить ИШ заново':'Установить ИШ'; bv.textContent='версия '+d.bundled; }
|
||||
else { bb.style.display='none'; bv.textContent='Дистрибутива ИШ на сервере нет — он приходит с обновлением bj («Настройка → Обновления»).'; }
|
||||
if(d.bundled){ bb.style.display=''; bb.textContent=d.installed?'Установить шлюз НРД заново':'Установить шлюз НРД'; bv.textContent='версия '+d.bundled; }
|
||||
else { bb.style.display='none'; bv.textContent='Дистрибутива шлюза НРД на сервере нет — он приходит с обновлением bj («Настройка → Обновления»).'; }
|
||||
}
|
||||
var dep=d.deponent||'', cr=document.getElementById('ig-crypto').value;
|
||||
var rows=[['test3','Тестовый TEST3','проверка переводов до боевой работы'],['prod','Боевой','настоящие переводы']].map(function(x){
|
||||
@@ -308,7 +308,7 @@
|
||||
tb.innerHTML=rows.join('');
|
||||
document.getElementById('ig-depo').placeholder=d.depo_db_prod||d.depo_db||'как сейчас';
|
||||
tb.querySelectorAll('button[data-act]').forEach(function(b){ b.onclick=function(){ act(b.dataset.act,b.dataset.c,b); }; });
|
||||
}).catch(function(){ head.textContent='Состояние ИШ не получено.'; });
|
||||
}).catch(function(){ head.textContent='Состояние шлюза НРД не получено.'; });
|
||||
}
|
||||
function act(a,c,b){
|
||||
if(a==='showprod'){ document.getElementById('ig-prod').style.display='block'; return; }
|
||||
@@ -329,9 +329,9 @@
|
||||
};
|
||||
document.getElementById('ig-crypto').onchange=load;
|
||||
// этапы установщика (bj-igate-admin) по порядку и сколько каждый обычно длится, секунд
|
||||
var STAGES=[['queued','Запуск установки',15],['deps','Системные пакеты для работы без графики',120],['dist','Дистрибутив ИШ',30],
|
||||
['user','Пользователь igate и хранилище паролей',15],['db','База ИШ в PostgreSQL',20],['install','Установка пакета ИШ',90],
|
||||
['config','Настройка для работы без графики',15],['schema','Создание схемы базы ИШ',90],['start','Запуск ИШ и движка',120]];
|
||||
var STAGES=[['queued','Запуск установки',15],['deps','Системные компоненты',120],['dist','Дистрибутив шлюза',30],
|
||||
['user','Служебный пользователь шлюза',15],['db','База шлюза',20],['install','Установка шлюза',90],
|
||||
['config','Настройка шлюза',15],['schema','Подготовка базы шлюза',90],['start','Запуск шлюза',120]];
|
||||
var stepsEl=document.getElementById('ig-steps'), logbox=document.getElementById('ig-logbox'), cur={key:'',since:0,s:null}, tick=0;
|
||||
function stageKey(s){ // прежний установщик называл два этапа «package», а первый и последний — «start»
|
||||
if(s.stage==='package') return /дистрибутив/.test(s.msg||'')?'dist':'install';
|
||||
@@ -360,7 +360,7 @@
|
||||
function ovTick(){
|
||||
fetch('/admin/setup/igate/install-status',{cache:'no-store'}).then(function(r){return r.json()}).then(function(s){
|
||||
var run=s.stage&&s.stage!=='done'&&s.stage!=='error';
|
||||
if(run){ ov.seen=true; ovSet(s.stage==='rollback'?'<span style="color:var(--warn)">⟲ Обновление не прошло — возвращаю прежнюю версию ИШ</span>':'⟳ Идёт установка шлюза НРД',
|
||||
if(run){ ov.seen=true; ovSet(s.stage==='rollback'?'<span style="color:var(--warn)">⟲ Обновление не прошло — возвращаю прежнюю версию шлюза</span>':'⟳ Идёт установка шлюза НРД',
|
||||
(s.msg||s.stage)+' · '+(s.elapsed||0)+' с на этапе. Не закрывайте страницу: обмен с НРД на 1–3 минуты приостановлен, настройки и каналы сохраняются.', s.log, false); return; }
|
||||
if(!ov.seen){
|
||||
if(Date.now()-ov.t0>15*60000){ clearInterval(ov.iv); ov.on=false; document.getElementById('ig-ov').style.display='none'; return; }
|
||||
@@ -381,7 +381,7 @@
|
||||
cur.s=s; draw(); out.textContent='';
|
||||
if(s.log){ logbox.hidden=false; lg.textContent=s.log; lg.scrollTop=lg.scrollHeight; }
|
||||
if(s.stage==='done'){ clearInterval(iv); clearInterval(tick); btn.disabled=false; out.innerHTML=ok(s.msg); load(); }
|
||||
if(s.stage==='error'){ clearInterval(iv); clearInterval(tick); btn.disabled=false; out.innerHTML=bad(s.msg)+' — можно нажать «Установить ИШ заново»'; logbox.open=true; load(); }
|
||||
if(s.stage==='error'){ clearInterval(iv); clearInterval(tick); btn.disabled=false; out.innerHTML=bad(s.msg)+' — можно нажать «Установить шлюз НРД заново»'; logbox.open=true; load(); }
|
||||
}).catch(function(){});
|
||||
if(Date.now()-t0>2700000){ clearInterval(iv); clearInterval(tick); } },3000); }
|
||||
document.getElementById('ig-bnd').onclick=function(){
|
||||
@@ -389,7 +389,7 @@
|
||||
var p=new URLSearchParams(); p.set('bundled','1');
|
||||
out.textContent='Запускаю…'; cur={key:'',since:0,s:null}; post('/admin/setup/igate/install',p).then(function(d){ if(!d.ok){out.innerHTML=bad(d.error);return} out.textContent=d.output; poll(); }); };
|
||||
document.getElementById('ig-rb-btn').onclick=function(){ var v=document.getElementById('ig-rb-v').textContent;
|
||||
if(!confirm('Откатить ИШ к версии '+v+'? Шлюз остановится на 1–3 минуты; программа, данные и база ИШ вернутся к состоянию до обновления. Пришедшую версию bj сам ставить больше не будет, пока не выйдет следующая.')) return;
|
||||
if(!confirm('Откатить шлюз НРД к версии '+v+'? Шлюз остановится на 1–3 минуты; программа, данные и база шлюза вернутся к состоянию до обновления. Пришедшую версию bj сам ставить больше не будет, пока не выйдет следующая.')) return;
|
||||
out.textContent='Запускаю откат…'; cur={key:'',since:0,s:null}; post('/admin/setup/igate/rollback',new URLSearchParams()).then(function(d){ if(!d.ok){out.innerHTML=bad(d.error);return} out.textContent=d.output; poll(); }); };
|
||||
if(document.getElementById('ig-dl')) document.getElementById('ig-dl').onclick=function(){ var p=new URLSearchParams(); p.set('version',document.getElementById('ig-ver').value.trim());
|
||||
out.textContent='Запускаю…'; cur={key:'',since:0,s:null}; post('/admin/setup/igate/install',p).then(function(d){ if(!d.ok){out.innerHTML=bad(d.error);return} out.textContent=d.output; poll(); }); };
|
||||
|
||||
Reference in New Issue
Block a user