Files
Bridge-and-Join-s/internal/lkgateway/web/templates/part_status.html
T
fontvielle 317bf85778 Настройки: карточки по своим разделам, подтверждения у опасных действий
- НРД: «Шлюз НРД» (установка, контуры, папки) и «Регистрация участника» —
  над «Перенастроить», а не внутри; «Рабочее время» — из «Сервера» в «НРД»
- Zabbix — из «Диагностики» в «Оповещения»
- заголовок «Лицензия» — у своего раздела (стоял в конце «Экспорта QUIK»)
- подтверждения: режим «bj сам / Оператор», приём ИИС, «Обновить канал»
  (перезапуск шлюза), «Установить шлюз заново»

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 23:54:35 +03:00

67 lines
11 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}}{{$exp := and $kc (index $kc "Expired")}}{{$ok := and cryptoReady $kc (not $exp)}}
<div class="card" id="sec-crypto-status">
<div class="stc {{if $exp}}stc-err{{else 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 $exp}}Ключ организации истёк{{else if $ok}}{{if lt (index $kc "Days") 30}}Ключ организации скоро закончится{{else}}Подпись работает{{end}}{{else}}Ключ организации не подключён{{end}}</b>
<small>{{if $exp}}Ключ «{{index $kc "Owner"}}» истёк {{index $kc "Until"}} — подпись для НРД не проходит. Получите новый ключ в Удостоверяющем центре и установите его.{{else 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 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}}{{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>
{{end}}
{{define "nsdStatus"}}{{$n := .Settings.NSD}}{{$a := .Settings.M2MAuto}}{{$o := orgEff}}{{$org := and (index $o "INN") (index $o "Code")}}{{$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>{{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}}контур {{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'), 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?(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; }
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}}