Интерфейс клиента без технических подробностей; дубли убраны

Техника — только в режиме разработчика (devOn):
- версии: клиенту — bj, шлюз НРД, СКЗИ, QUIK, DEPO, без «Подробностей»
  (Java, bj-crypto, пути, установщик, ОС, PostgreSQL — разработчикам)
- Криптография: строки crypto-service/java, параметры провайдера и сокет,
  серийные номера, журнал сверки (клиенту — только при ошибке), дамп справочника
  и путь nsd-certs; убрана карточка «Ключ организации» — дубль сводки
- НРД: строка версии ИШ (дубль сводки), «Расширенные» (адреса, контейнеры,
  config.xml), имя профиля ключа, адрес канала; контур по-русски
- Обновления: имена файлов и служб, адрес артефактории и ключ издателя
- Диагностика: имена служб и сырые состояния; справочник участников — без кодов
- ключи ролей и модулей лицензии, путь users.json, DSN/Ping/in-memory, FTV_M2M,
  путь Валидаты и служба bj-crypto в мастере, «проверена ZETIT», Samba

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-21 23:44:52 +03:00
parent 29e19c78a9
commit f1065e369a
9 changed files with 126 additions and 77 deletions
@@ -27,8 +27,8 @@
{{if or (not $ok) (lt (index $kc "Days") 30)}}<a class="btn" href="/admin/setup/keywizard" style="flex:none">{{if or $ok $exp}}Установить новый ключ →{{else}}Установить ключ →{{end}}</a>{{end}}</div>
<dl class="kv">
{{if $kc}}<dt>Ключ организации</dt><dd>«{{index $kc "Owner"}}» · выдан {{index $kc "Issuer"}} · контур {{index $kc "Contour"}} · {{if $exp}}действовал до <b>{{index $kc "Until"}}</b> <span style="color:var(--err)">· ИСТЁК</span>{{else}}действует до <b>{{index $kc "Until"}}</b> <span class="muted">(осталось {{index $kc "Days"}} дн.)</span>{{end}} · <a href="/admin/setup/keywizard">заменить ключ</a></dd>{{end}}
{{with .Versions.Get "validata"}}<dt>СКЗИ «Валидата Клиент L»</dt><dd>{{if .Version}}{{if cryptoReady}}<span class="kv-ok">✓</span> {{end}}{{.Version}}{{else}}<span class="kv-no">✗</span> не определена{{end}}{{with .Detail}} <span class="muted">· {{.}}</span>{{end}}</dd>{{end}}
{{with .Versions.Get "crypto-service.jar"}}<dt>Проверка подписи (bj-crypto)</dt><dd>{{if .Version}}{{.Version}}{{else}}не определена{{end}}{{with .Err}} <span style="color:var(--err)">· {{.}}</span>{{end}}</dd>{{end}}
{{with .Versions.Get "validata"}}<dt>СКЗИ «Валидата Клиент L»</dt><dd>{{if .Version}}{{if cryptoReady}}<span class="kv-ok">✓</span> {{end}}{{.Version}}{{else}}<span class="kv-no">✗</span> не определена{{end}}{{if devOn}}{{with .Detail}} <span class="muted">· {{.}}</span>{{end}}{{end}}</dd>{{end}}
{{if devOn}}{{with .Versions.Get "crypto-service.jar"}}<dt>Проверка подписи (bj-crypto)</dt><dd>{{if .Version}}{{.Version}}{{else}}не определена{{end}}{{with .Err}} <span style="color:var(--err)">· {{.}}</span>{{end}}</dd>{{end}}{{end}}
<dt>Сертификаты НРД в справочнике шлюза</dt><dd>{{if .NSDCerts.Pending}}<span class="kv-warn">⚠</span> есть изменения к применению ({{.NSDCerts.Pending}}){{else if .NSDCerts.LastRun.IsZero}}ещё не сверялись{{else}}<span class="kv-ok">✓</span> сверены {{msk .NSDCerts.LastRun}}{{end}} <span class="muted">· bj сверяет сам при запуске и раз в 6 часов</span></dd>
</dl>
</div>
@@ -43,18 +43,18 @@
<dt>Организация</dt><dd>{{if $org}}<b>{{with index $o "Name"}}{{.}}{{else}}—{{end}}</b> · ИНН <code>{{index $o "INN"}}</code> · код <code>{{index $o "Code"}}</code>{{else}}<span class="kv-no">✗</span> не задана{{end}}</dd>
<dt>Реквизиты в НРД</dt><dd>{{if $req}}код <code>{{$n.DeponentCode}}</code> · счёт <code>{{$n.AccountID}}</code> · раздел <code>{{$n.SectionID}}</code>{{else}}<span class="kv-no">✗</span> не заданы{{end}}</dd>
<dt>Кто отвечает на переводы</dt><dd>{{if $a.Enabled}}<b>bj сам — автоматически</b>{{else}}<b>Оператор</b> <span class="muted">— запасной режим</span>{{end}}{{if not $a.ChangedAt.IsZero}} <span class="muted">· с {{msk $a.ChangedAt}}</span>{{end}}</dd>
<dt>Шлюз НРД</dt><dd id="nsd-st-gw">{{if $n.IGWBaseURL}}контур <code>{{$n.Profile}}</code> · <span class="muted">проверяю шлюз…</span>{{else}}<span class="kv-no">✗</span> не настроен{{end}}</dd>
<dt>Шлюз НРД</dt><dd id="nsd-st-gw">{{if $n.IGWBaseURL}}контур {{contourRu $n.Profile}} · <span class="muted">проверяю шлюз…</span>{{else}}<span class="kv-no">✗</span> не настроен{{end}}</dd>
<dt>Папки шлюза по сети</dt><dd id="nsd-st-share"><span class="muted">проверяю…</span></dd>
</dl>
</div>
<script>(function(){
function esc(s){return String(s==null?'':s).replace(/[&<>"]/g,function(c){return{'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]})}
var gw=document.getElementById('nsd-st-gw'), sh=document.getElementById('nsd-st-share');
var gw=document.getElementById('nsd-st-gw'), sh=document.getElementById('nsd-st-share'), dev={{if devOn}}true{{else}}false{{end}};
window.addEventListener('bj-igate-status',function(e){ var d=e.detail||{}; if(!gw) return;
if(!d.ok){ gw.innerHTML='<span class="kv-no">✗</span> состояние не получено'; return; }
if(!d.installed){ gw.innerHTML='<span class="kv-no">✗</span> шлюз на этом сервере не установлен'; return; }
var run=d.engine==='Running', c=d.active_contour==='prod'?'боевой':'тестовый TEST3', code=(d.active_contour==='prod'?'PROD':'TEST3')+(d.deponent||''), ch=(d.channels||[]).filter(function(x){return x.code===code})[0];
gw.innerHTML=(run?'<span class="kv-ok">✓</span> ИШ '+esc(d.version)+' работает':'<span class="kv-no">✗</span> ИШ '+esc(d.version)+' не работает'+(d.keymedia==='missing'?' — ждёт флешку с ключом':''))+' · активный контур <b>'+c+'</b>'+(ch?(' · канал '+(ch.enabled?'включён':'выключен')+(ch.profile?' · ключ '+esc(ch.profile):' · <span style="color:var(--err)">ключ не установлен</span>')):'');
gw.innerHTML=(run?'<span class="kv-ok">✓</span> ИШ '+esc(d.version)+' работает':'<span class="kv-no">✗</span> ИШ '+esc(d.version)+' не работает'+(d.keymedia==='missing'?' — ждёт флешку с ключом':''))+' · активный контур <b>'+c+'</b>'+(ch?(' · канал '+(ch.enabled?'включён':'выключен')+(ch.profile?(dev?' · ключ '+esc(ch.profile):' · ключ установлен'):' · <span style="color:var(--err)">ключ не установлен</span>')):'');
});
window.addEventListener('bj-igate-share',function(e){ var d=e.detail||{}; if(!sh) return;
if(d.manual){ sh.textContent='открыты вручную (smb.conf)'; return; }