Files
Bridge-and-Join-s/internal/lkgateway/web/templates/part_status.html
T
zuevav bbeb59e3bc QUIK, Криптография, НРД — сводка «что настроено и как» сверху, формы — под «Перенастроить»
- QUIK: подключение к модулю (сервер, база, логин, проверено), как bj работает с QUIK (и отклонения из расширенных), торговый счёт, поручения из терминала, справочник получателей; формы и проверка МНП — под «Перенастроить».
- Криптография: «Подпись работает / ключ скоро закончится / ключ не подключён» с кнопкой установки; ключ организации (срок, заменить), СКЗИ, bj-crypto, сертификаты НРД в справочнике шлюза; остальное — под «Перенастроить» (без повтора плашки «ключ не подключён»).
- НРД: организация, реквизиты, кто отвечает на переводы, шлюз (версия, активный контур, канал, ключ) и папки по сети — из тех же запросов, что блок шлюза (события bj-igate-status / bj-igate-share, без лишних обращений к root-обработчику); формы — под «Перенастроить».
- «Перенастроить» раскрыто само, если что-то не настроено.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 11:23:55 +03:00

67 lines
10 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{{/* Сводки разделов «Настройки»: что настроено и как — одним взглядом; формы — под «Перенастроить».
Тот же принцип, что у «Обмена с DEPO» (fancyStatus). */}}
{{define "quikStatus"}}{{$q := .Settings.Quik}}{{$ok := and $q.Server $q.Verified}}
<div class="card" id="sec-quik-status">
<div class="stc {{if $ok}}stc-ok{{else if $q.Server}}stc-err{{else}}stc-warn{{end}}"><span class="stc-ic"></span>
<div class="stc-b"><b>{{if $ok}}QUIK подключён{{else if $q.Server}}Подключение к QUIK не проверено{{else}}QUIK не подключён{{end}}</b>
<small>{{if $ok}}{{if $q.WritesEnabled}}Чтение и запись — боевая работа: bj сам блокирует бумаги, списывает и зачисляет.{{else}}Только чтение — bj читает данные, в QUIK ничего не меняет.{{end}} Изменить — «Перенастроить» ниже.{{else if $q.Server}}Проверьте подключение в «Перенастроить» — «Сохранить и проверить».{{else}}Подключите модуль неторговых поручений — мастером настройки (шаг «QUIK») или в «Перенастроить».{{end}}</small></div>
{{if not $q.Server}}<a class="btn" href="/admin/wizard?step=5" style="flex:none">Открыть мастер</a>{{end}}</div>
{{if $q.Server}}
<dl class="kv">
<dt>Модуль неторговых поручений</dt><dd><b>{{$q.Server}}{{if $q.Port}}:{{$q.Port}}{{end}}</b>{{if $q.Database}}, база <code>{{$q.Database}}</code>{{end}}, логин <code>{{$q.User}}</code>{{if $q.Verified}} <span class="kv-ok">✓</span> <span class="muted">проверено{{if not $q.LastAt.IsZero}} {{msk $q.LastAt}}{{end}}</span>{{else}} <span class="kv-no">✗</span> не проверено{{end}}</dd>
<dt>Как bj работает с QUIK</dt><dd>{{if $q.WritesEnabled}}<b>Чтение и запись</b> — боевая работа{{else}}<b>Только чтение</b>{{end}}{{with quikModeCustom $q}}<div style="color:var(--warn);font-size:13px">⚠ {{.}}</div>{{end}}{{if $q.Emulate}}<div style="color:var(--warn);font-size:13px">⚠ {{if devOn}}режим имитации — в МНП ничего не пишется{{else}}записи в QUIK сейчас не выполняются{{end}}</div>{{end}}</dd>
{{if $q.WritesEnabled}}<dt>Торговый счёт</dt><dd>{{if $q.Account}}<code>{{$q.Account}}</code>{{else}}<span class="kv-no">✗</span> не задан{{end}}</dd>{{end}}
<dt>Поручения клиентов из QUIK</dt><dd>{{if $q.PollTerminal}}принимаются — из терминала и мобильного приложения; оператору приходит уведомление{{else}}нет — клиенты подают поручения через депозитарий{{end}}</dd>
<dt>Справочник получателей</dt><dd class="muted" style="font-size:13px">{{quikRecipientsInfo}}</dd>
</dl>
{{end}}
</div>
{{end}}
{{define "cryptoStatus"}}{{$kc := orgKeyCert}}{{$ok := and cryptoReady $kc}}
<div class="card" id="sec-crypto-status">
<div class="stc {{if $ok}}{{if lt (index $kc "Days") 30}}stc-err{{else}}stc-ok{{end}}{{else}}stc-warn{{end}}"><span class="stc-ic"></span>
<div class="stc-b"><b>{{if $ok}}{{if lt (index $kc "Days") 30}}Ключ организации скоро закончится{{else}}Подпись работает{{end}}{{else}}Ключ организации не подключён{{end}}</b>
<small>{{if $ok}}СКЗИ «Валидата» установлена, ключ организации подключён — документы для НРД подписываются.{{if lt (index $kc "Days") 30}} Получите новый ключ в Удостоверяющем центре и установите его.{{end}}{{else}}Пошаговая установка: флешка с ключом или архив ключа от НРД с паролем → справочник сертификатов → проверка подписи.{{end}}</small></div>
{{if or (not $ok) (lt (index $kc "Days") 30)}}<a class="btn" href="/admin/setup/keywizard" style="flex:none">{{if $ok}}Установить новый ключ →{{else}}Установить ключ →{{end}}</a>{{end}}</div>
<dl class="kv">
{{if $kc}}<dt>Ключ организации</dt><dd>«{{index $kc "Owner"}}» · выдан {{index $kc "Issuer"}} · действует до <b>{{index $kc "Until"}}</b> <span class="muted">(осталось {{index $kc "Days"}} дн.)</span> · <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}}
<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>
{{end}}
{{define "nsdStatus"}}{{$n := .Settings.NSD}}{{$a := .Settings.M2MAuto}}{{$org := and $n.OrgINN $n.OrgCode}}{{$req := and $n.DeponentCode $n.AccountID $n.SectionID}}{{$ok := and $org $req $n.IGWBaseURL}}
<div class="card" id="sec-nsd-status">
<div class="stc {{if $ok}}stc-ok{{else}}stc-err{{end}}" id="nsd-st-card"><span class="stc-ic"></span>
<div class="stc-b"><b id="nsd-st-title">{{if $ok}}Обмен с НРД настроен{{else}}Обмен с НРД настроен не до конца{{end}}</b>
<small>{{if $ok}}Организация, реквизиты и шлюз — ниже. Изменить — «Перенастроить».{{else}}Что не так — в строках ниже с ✗; поправить — в «Перенастроить» или мастером настройки.{{end}}</small></div></div>
<dl class="kv">
<dt>Организация</dt><dd>{{if $org}}<b>{{if $n.OrgName}}{{$n.OrgName}}{{else}}—{{end}}</b> · ИНН <code>{{$n.OrgINN}}</code> · код <code>{{$n.OrgCode}}</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-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');
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>')):'');
});
window.addEventListener('bj-igate-share',function(e){ var d=e.detail||{}; if(!sh) return;
if(d.manual){ sh.textContent='открыты вручную (smb.conf)'; return; }
if(!d.on){ sh.innerHTML='закрыты <span class="muted">— открыть: «Перенастроить» → «Папки шлюза по сети»</span>'; return; }
var ip=d.ip||location.hostname, names=(d.shares&&d.shares.length)?d.shares:['igate_exchange'];
sh.innerHTML='открыты '+(d.mode==='domain'?'через домен '+esc(d.realm||'')+' — своим входом в Windows':'для '+esc(d.user||'—'))+': '+names.map(function(n){return '<code>\\\\'+esc(ip)+'\\'+esc(n)+'</code>'}).join(', ');
});
})();</script>
{{end}}