Интерфейс: единые термины, названия разделов и шагов, узкий экран
- клиенту — «шлюз НРД» вместо «ИШ» (установка, статусы, этапы, ключ, переводы); расшифровка «(ИШ)» — только в заголовке окна обновления - контур — «тестовый (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:
@@ -97,7 +97,7 @@
|
||||
{{if eq .Step 1}}
|
||||
{{/* восстановление из резервной копии — только на первой странице (/first-run), в мастере его нет */}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>Лицензия</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
{{if .Done.License}}<p>Ключ продукта открывает модули bj и обновления.</p>
|
||||
<dl class="wiz-kv">
|
||||
<dt>Организация</dt><dd>{{.Lic.Tenant}}</dd>
|
||||
@@ -133,7 +133,7 @@
|
||||
{{/* ============= ШАГ 3: Учёт DEPO (Fancy) — по экранам ============= */}}
|
||||
{{if eq .Step 3}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>Учётная система DEPO (Fancy)</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
{{if not .DepoLicensed}}
|
||||
<p class="muted">Модуль обмена с DEPO и QUIK не входит в текущую лицензию — шаг пропускается.</p>
|
||||
{{else}}
|
||||
@@ -332,7 +332,7 @@
|
||||
</table>
|
||||
{{if .Settings.Fancy.Server}}{{template "accPrefix" .}}{{end}}
|
||||
{{if .Done.Depo}}<p>Учёт DEPO подключён и проверен. Дальше — «Организация»: bj предложит реквизиты вашей организации из DEPO.</p>{{else}}<p class="muted" style="font-size:13px">Не всё проверено — можно продолжить настройку (шаг «Организация» и дальше) и вернуться сюда позже. Пока обработка не работает, записи bj ждут в таблицах обмена со статусом TODO и будут обработаны, когда она заработает.</p>{{end}}
|
||||
<form method="post" action="/admin/setup/wizard-depo/recheck" style="margin:0"><button type="submit" class="btn" style="background:var(--card);color:var(--text);border:1px solid var(--border-strong,#c9cdd8)">Перепроверить всё</button></form>
|
||||
<form method="post" action="/admin/setup/wizard-depo/recheck" style="margin:0"><button type="submit" class="btn btn-secondary">Перепроверить всё</button></form>
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{template "wizNav" .}}
|
||||
@@ -341,7 +341,7 @@
|
||||
{{/* ============= ШАГ 2: База bj (PostgreSQL) ============= */}}
|
||||
{{if eq .Step 2}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>База данных bj (PostgreSQL)</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>База самого bj: журнал заявок и поручений, история обмена с НРД и DEPO, пользователи.</p>
|
||||
{{if and .Done.Postgres (pgLocal .Settings.Postgres.DSN)}}<div class="wiz-ok"><i class="wiz-ic"></i><span>База готова{{if .PGSummary}}: {{.PGSummary}}{{end}}. Её создал установщик — ничего делать не нужно.</span></div>
|
||||
<details style="margin-top:14px" {{if .Flash}}open{{end}}><summary style="cursor:pointer;color:var(--accent)">Хранить базу bj на своём сервере PostgreSQL (необязательно)</summary>
|
||||
@@ -423,7 +423,7 @@
|
||||
{{/* ============= ШАГ 4: Наша организация ============= */}}
|
||||
{{if eq .Step 4}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>Наша организация</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>От имени вашей организации bj отправляет и принимает переводы. {{if .DepoLicensed}}Реквизиты bj берёт из DEPO — проверьте и сохраните.{{else}}Найдите себя в справочнике участников НРД.{{end}}</p>
|
||||
{{if .Suggest}}{{if .Suggest.OrgName}}{{if not .Done.Org}}<div class="wiz-ok" style="margin:0 0 14px"><i class="wiz-ic"></i><span><strong>Определено из DEPO</strong>: {{.Suggest.OrgName}}, ИНН {{.Suggest.OrgINN}}, код {{.Suggest.OrgCode}}{{if .Suggest.AccountID}}, счёт НРД {{.Suggest.AccountID}}{{end}}. Поля ниже заполнены — проверьте и нажмите «Сохранить».</span></div>{{end}}{{end}}{{end}}
|
||||
{{with .Fancy}}{{template "orgSection" .}}{{end}}
|
||||
@@ -435,7 +435,7 @@
|
||||
{{/* ============= ШАГ 5: QUIK МНП ============= */}}
|
||||
{{if eq .Step 5}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>QUIK</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>Адрес и логин модуля неторговых поручений — у вашего администратора QUIK. Если модуля ещё нет, его подключает ARQA Technologies — письмо для них готово ниже.</p>
|
||||
{{if .DepoLicensed}}{{template "letterCard" (letter "arqa")}}{{end}}
|
||||
{{if not .DepoLicensed}}<p class="muted">Модуль неторговых поручений не входит в текущую лицензию — шаг пропускается.</p>
|
||||
@@ -452,7 +452,7 @@
|
||||
{{/* ============= ШАГ 6: Валидата ============= */}}
|
||||
{{if eq .Step 6}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>СКЗИ «Валидата Клиент L»</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>СКЗИ «Валидата Клиент L» проверяет подписи НРД на квитанциях и сообщениях и нужно для работы с ключами и сертификатами (раздел «Ключ»).</p>
|
||||
{{if .ValidataVer}}
|
||||
<dl class="wiz-kv"><dt>Версия</dt><dd>{{.ValidataVer}}</dd>{{if devOn}}<dt>Каталог</dt><dd><code>/opt/Validata/VDCSP</code></dd>{{end}}</dl>
|
||||
@@ -465,7 +465,7 @@
|
||||
</div>
|
||||
{{if devOn}}<form method="post" action="/admin/setup/crypto" style="margin-top:12px">
|
||||
<input type="hidden" name="provider" value="stub">
|
||||
<button type="submit" class="btn" style="background:var(--card);color:var(--text);border:1px solid var(--border-strong,#c9cdd8)">Режим разработки: работать без криптографии (stub)</button>
|
||||
<button type="submit" class="btn btn-secondary">Режим разработки: работать без криптографии (stub)</button>
|
||||
</form>{{end}}
|
||||
{{end}}
|
||||
|
||||
@@ -476,7 +476,7 @@
|
||||
{{/* ============= ШАГ 7: Шлюз НРД (до ключа: ключ ставится в профиль ИШ) ============= */}}
|
||||
{{if eq .Step 7}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>Шлюз НРД</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p class="muted" style="font-size:13.5px;margin:4px 0 0">bj сам ставит и настраивает шлюз (ИШ) и обменивается через него переводами с НРД. Доступ к контурам НРД — по заявке (как подать — ниже).</p>
|
||||
{{template "igateInstall" .}}
|
||||
<div class="wiz-info" style="margin:12px 0 0"><span><b>Доступ к контурам НРД</b> — заявкой на сайте НРД, письмами НРД не подключает. Страница сервиса <a href="https://www.nsd.ru/services/novye-servisy/moex-most-dlya-m2m/" target="_blank" rel="noopener">MOEX МОСТ для M2M</a>, раздел «Как подключиться»: заявка на тестирование — система МОСТ, тип «M2M Автотестирование», затем «M2M Подключение»; после тестирования — договор с НРД и боевой контур.</span></div>
|
||||
@@ -489,7 +489,7 @@
|
||||
<input type="hidden" name="profile" value="{{if .Settings.NSD.Profile}}{{.Settings.NSD.Profile}}{{else}}test3-gost{{end}}">
|
||||
<label style="margin:0">Адрес веб-API шлюза НРД
|
||||
<input type="text" name="igw_base_url" value="{{if .Settings.NSD.IGWBaseURL}}{{.Settings.NSD.IGWBaseURL}}{{else}}http://localhost:8090{{end}}" placeholder="http://localhost:8090" style="width:100%;margin-top:4px"></label>
|
||||
<p id="igw-onyx" style="display:none;color:var(--err);font-size:13px;margin:0">Это адрес веб-сервиса НРД (ONYX), а не шлюза: bj работает через ИШ на этом сервере. Укажите адрес шлюза — обычно <a href="#" id="igw-def">http://localhost:8090</a>.</p>
|
||||
<p id="igw-onyx" style="display:none;color:var(--err);font-size:13px;margin:0">Это адрес веб-сервиса НРД (ONYX), а не шлюза: bj работает через шлюз НРД на этом сервере. Укажите адрес шлюза — обычно <a href="#" id="igw-def">http://localhost:8090</a>.</p>
|
||||
<script>(function(){var u=document.querySelector('[name=igw_base_url]'),w=document.getElementById('igw-onyx');
|
||||
function chk(){w.style.display=/onyx|nsd\.ru/i.test(u.value)?'block':'none'} u.addEventListener('input',chk); chk();
|
||||
document.getElementById('igw-def').onclick=function(e){e.preventDefault();u.value='http://localhost:8090';chk()};})();</script>
|
||||
@@ -504,7 +504,7 @@
|
||||
{{/* ============= ШАГ 8: Ключ и сертификаты (после шлюза: ключ ставится в профиль ИШ) ============= */}}
|
||||
{{if eq .Step 8}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>Ключ и сертификаты</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>Ключ электронной подписи организации для обмена с НРД. Его выдаёт Удостоверяющий центр Московской биржи: вам передадут архив ключа и пароль.</p>
|
||||
{{if not .IgateOK}}<div class="wiz-info"><span>Ключ ставится в шлюз НРД — сначала установите <a href="/admin/wizard?step=7">шлюз</a>.</span></div>
|
||||
{{else if .KeyWiz}}<div class="keywiz">{{template "keyWizBody" .KeyWiz}}</div>{{end}}
|
||||
@@ -515,7 +515,7 @@
|
||||
</div>
|
||||
<details style="margin-top:6px;font-size:13px"><summary style="cursor:pointer;color:var(--accent)">Как это работает</summary>
|
||||
<p style="margin:6px 0 0">Действующие сертификаты НРД и удостоверяющих центров Московской биржи приезжают вместе с bj и его обновлениями. Каждые 6 часов bj сверяет их со справочником шлюза: добавляет недостающие, а заменённые убирает строго после срока, объявленного НРД. Перед изменением — резервная копия и проверка подписи, при ошибке всё откатывается. Тестовые сертификаты попадают только к тестовому ключу, боевые — только к боевому.</p></details>
|
||||
{{if .Settings.NSDCerts.LastRows}}<p class="muted" style="font-size:13px">Последняя сверка: {{.Settings.NSDCerts.LastRun.Format "02.01.2006 15:04"}}{{if .Settings.NSDCerts.LastProfile}}, профиль ИШ {{.Settings.NSDCerts.LastProfile}}{{end}}.</p>{{else}}{{end}}
|
||||
{{if .Settings.NSDCerts.LastRows}}<p class="muted" style="font-size:13px">Последняя сверка: {{.Settings.NSDCerts.LastRun.Format "02.01.2006 15:04"}}{{if and devOn .Settings.NSDCerts.LastProfile}}, профиль {{.Settings.NSDCerts.LastProfile}}{{end}}.</p>{{else}}{{end}}
|
||||
|
||||
{{if .Certs}}
|
||||
<details style="margin-top:18px">
|
||||
@@ -546,7 +546,7 @@
|
||||
{{/* ============= ШАГ 12: Время и сеть (глава «Сервер») ============= */}}
|
||||
{{if eq .Step 12}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>Время и сеть</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>Часовой пояс, точное время и адрес сервера в сети.</p>
|
||||
{{$tz := serverTimeZone}}
|
||||
<form method="post" action="/admin/setup/timezone" id="wiz-tz" class="wiz-row">
|
||||
@@ -613,7 +613,7 @@
|
||||
{{/* ============= ШАГ 14: Обновление (глава «Обновление») ============= */}}
|
||||
{{if eq .Step 14}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>Обновление</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>Проверка и установка обновлений bj. Это первый пункт мастера — сюда можно вернуться в любой момент.</p>
|
||||
{{with .Fancy}}{{template "updateSection" .}}{{end}}
|
||||
{{template "wizNav" .}}
|
||||
@@ -623,17 +623,17 @@
|
||||
{{/* ============= ШАГ 11: Модули по лицензии (глава «Запуск») ============= */}}
|
||||
{{if eq .Step 11}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>Модули</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>Модули вашей лицензии уже установлены. Каждый настраивается в своём разделе — сейчас или позже.</p>
|
||||
{{range .Modules}}
|
||||
<div style="border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin:8px 0">
|
||||
<div style="display:flex;justify-content:space-between;gap:8px;align-items:center;flex-wrap:wrap">
|
||||
<b><span class="dot {{if .Ready}}ok{{else}}warn{{end}}"></span>{{.Title}}</b>
|
||||
<a href="{{.Link}}" class="btn" style="text-decoration:none;padding:5px 12px;background:var(--card);color:var(--text);border:1px solid var(--border-strong,#c9cdd8)">{{if .Ready}}Открыть{{else}}Настроить{{end}}</a>
|
||||
<a href="{{.Link}}" class="btn btn-secondary" style="text-decoration:none;padding:5px 12px">{{if .Ready}}Открыть{{else}}Настроить{{end}}</a>
|
||||
</div>
|
||||
<p class="muted" style="font-size:13px;margin:6px 0 2px">{{.What}}</p>
|
||||
<p style="font-size:13px;margin:0;color:var({{if .Ready}}--ok{{else}}--warn{{end}})">{{if .Ready}}✓{{else}}⚠{{end}} {{.Status}}</p>
|
||||
{{if not .Ready}}<form method="post" action="/admin/setup/wizard-defer" style="margin:8px 0 0;display:flex;gap:8px;align-items:center;flex-wrap:wrap"><input type="hidden" name="step" value="11"><input type="hidden" name="module" value="{{.Key}}">{{if .Deferred}}<span class="muted" style="font-size:12.5px">⏸ отложено — мастер считает модуль завершённым</span><button type="submit" name="undo" value="1" class="btn" style="padding:3px 10px;font-size:12.5px;background:var(--card);color:var(--text);border:1px solid var(--border-strong,#c9cdd8)">Вернуть</button>{{else}}<button type="submit" class="btn" style="padding:3px 10px;font-size:12.5px;background:var(--card);color:var(--text);border:1px solid var(--border-strong,#c9cdd8)">Настроить позже</button>{{end}}</form>{{end}}
|
||||
{{if not .Ready}}<form method="post" action="/admin/setup/wizard-defer" style="margin:8px 0 0;display:flex;gap:8px;align-items:center;flex-wrap:wrap"><input type="hidden" name="step" value="11"><input type="hidden" name="module" value="{{.Key}}">{{if .Deferred}}<span class="muted" style="font-size:12.5px">⏸ отложено — мастер считает модуль завершённым</span><button type="submit" name="undo" value="1" class="btn btn-secondary" style="padding:3px 10px;font-size:12.5px">Вернуть</button>{{else}}<button type="submit" class="btn btn-secondary" style="padding:3px 10px;font-size:12.5px">Настроить позже</button>{{end}}</form>{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
{{template "wizDefer" .}}
|
||||
@@ -644,7 +644,7 @@
|
||||
{{/* ============= ШАГ 9: Оповещения и резервные копии ============= */}}
|
||||
{{if eq .Step 9}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>Оповещения и резервные копии</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>bj напишет на почту, если НРД не отвечает, перевод застрял{{if .DepoLicensed}}, DEPO не обработал поручение{{end}} или истекает ключ, — и будет сам делать копии сервера. Настройте почтовый сервер, затем кому писать: администратору системы — о сбоях и обновлениях, отделам — о переводах и поручениях. Обмен работает и без этого, но о сбое тогда никто не узнает вовремя.</p>
|
||||
<div class="wiz-info" style="margin:10px 0"><span>Сейчас: почта — {{if and .Settings.Alerts.SMTP.Enabled .Settings.Alerts.SMTP.Host .Settings.Alerts.SMTP.To}}<b style="color:var(--ok)">✓ настроена</b>{{else}}<b style="color:var(--warn)">не настроена</b>{{end}}; Zabbix — {{if .Settings.Alerts.Zabbix.Enabled}}<b style="color:var(--ok)">✓ включён</b>{{else}}выключен{{end}}; резервные копии — {{if .Settings.Backup.Enabled}}<b style="color:var(--ok)">✓ включены</b>{{else}}<b style="color:var(--warn)">выключены</b>{{end}}. Шаг закрывается, когда есть оповещения (почта или Zabbix) и включены копии.</span></div>
|
||||
<style>.wiz9 label:not(:has(input[type=checkbox])){display:block;margin:0}.wiz9 label input:not([type=checkbox]),.wiz9 label select,.wiz9 .grid input,.wiz9 .grid select{width:100%;box-sizing:border-box;margin-top:4px}</style>
|
||||
@@ -663,7 +663,7 @@
|
||||
{{/* ============= ШАГ 13: Учётные записи (глава «Запуск», перед проверкой) ============= */}}
|
||||
{{if eq .Step 13}}
|
||||
<div class="card">
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>Учётные записи</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}warn{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>У каждого, кто работает с bj, — своя учётная запись: свой пароль и свои права, а в журнале видно, кто что сделал. Заведите сотрудников по ролям; права, пароли и вход через Active Directory меняются позже в разделе Настройка → Пользователи.</p>
|
||||
{{with .Fancy}}{{template "accountsAdd" (withRet . "/admin/wizard?step=13")}}{{template "accountsAD" (withRet . "/admin/wizard?step=13")}}
|
||||
{{end}}
|
||||
@@ -676,11 +676,11 @@
|
||||
{{if eq .Step 10}}
|
||||
<div class="card">
|
||||
{{if devOn}}
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>Тестовая заявка</h2>
|
||||
<h2><span class="dot {{if .StepDone}}ok{{else}}err{{end}}"></span>{{.StepTitle}}</h2>
|
||||
<p>Прогон полного цикла: создание заявки → валидация → подпись → отправка в НРД (или mock) → ожидание Decision → подтверждение.</p>
|
||||
|
||||
<div class="help-block">
|
||||
<strong>Что произойдёт?</strong> Система создаст тестовую M2M-сделку, проведёт её через всю стейт-машину, и покажет результат каждого этапа. Если ИШ НРД не настроен — сработает mock (синтетический Decision через 3 секунды).
|
||||
<strong>Что произойдёт?</strong> Система создаст тестовую M2M-сделку, проведёт её через всю стейт-машину, и покажет результат каждого этапа. Если шлюз НРД не настроен — сработает mock (синтетический Decision через 3 секунды).
|
||||
</div>
|
||||
|
||||
<form method="post" action="/admin/setup/test-run" style="margin-top:12px">
|
||||
@@ -701,7 +701,7 @@
|
||||
<p class="muted" style="margin:4px 0 10px">bj проверяет всё, что нужно для обмена с НРД, прямо сейчас. Красное — обмен работать не будет, жёлтое — работать будет, но лучше исправить. У каждой строки — ссылка туда, где это исправляется.</p>
|
||||
<div id="rd-sum" style="font-weight:600;margin:6px 0">Проверяю…</div>
|
||||
<table id="rd-tab" style="width:100%"><tbody></tbody></table>
|
||||
<p style="margin-top:8px"><button type="button" class="btn" id="rd-again" style="background:var(--card);color:var(--text);border:1px solid var(--border-strong,#c9cdd8)">Проверить ещё раз</button> <span class="muted" id="rd-at" style="font-size:12px"></span></p>
|
||||
<p style="margin-top:8px"><button type="button" class="btn btn-secondary" id="rd-again">Проверить ещё раз</button> <span class="muted" id="rd-at" style="font-size:12px"></span></p>
|
||||
<script>
|
||||
(function(){
|
||||
var tb=document.querySelector('#rd-tab tbody'), sum=document.getElementById('rd-sum'), dot=document.getElementById('rd-dot');
|
||||
|
||||
Reference in New Issue
Block a user