a2608076a4
- клиенту — «шлюз НРД» вместо «ИШ» (установка, статусы, этапы, ключ, переводы); расшифровка «(ИШ)» — только в заголовке окна обновления - контур — «тестовый (TEST3)»; в строке шлюза — «работает · версия …» - меню = заголовки разделов: «Обмен с DEPO», «Пользователи и вход», «Оформление отчётов» - мастер: заголовок шага = его название в колонке шагов - вторичная кнопка — классом btn-secondary, а не стилями в разметке - узкий экран: поля и сетки с жёсткой шириной не вылезают, таблицы прокручиваются, анкета участника — по высоте экрана Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
67 lines
11 KiB
HTML
67 lines
11 KiB
HTML
{{/* Сводки разделов «Настройки»: что настроено и как — одним взглядом; формы — под «Перенастроить».
|
||
Тот же принцип, что у «Обмена с 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{'&':'&','<':'<','>':'>','"':'"'}[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> не работает'+(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}}
|