Первичная настройка, часть 2: шаг 9 «Оповещения и резервные копии», шаг 10 — итоговая проверка готовности (живые проверки со ссылкой «Исправить»); проверка модуля неторговых поручений QUIK (объекты M2M, инструменты, справочник получателей, цикл, ошибки операций); восстановление из копии на /first-run по одноразовому коду; возврат на тот же шаг мастера после «Сохранить» (return_to с ?step); пароль SMTP не выводится в страницу; карточки почты, адресатов и копий — общие для настроек и мастера

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-10-05 16:18:28 +03:00
parent fdf0ddd498
commit 17df53f25b
15 changed files with 847 additions and 155 deletions
@@ -80,3 +80,26 @@
</div>
{{end}}
{{end}}
{{define "mnpCheck"}}
<div class="card" id="mnp-check">
<h2><span class="dot" id="mnp-dot"></span>Проверка модуля неторговых поручений</h2>
<p class="muted" style="margin:0 0 8px">Только чтение: всё, без чего цикл M2M в МНП не работает. Ничего в QUIK не меняет.</p>
<table style="width:100%"><tbody id="mnp-rows"></tbody></table>
<p style="margin-top:8px"><button type="button" class="btn" id="mnp-run">Проверить МНП</button> <span class="muted" id="mnp-at" style="font-size:12px"></span></p>
</div>
<script>
(function(){
var rows=document.getElementById('mnp-rows'), dot=document.getElementById('mnp-dot');
function esc(s){return String(s).replace(/[&<>"]/g,function(c){return{'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c]})}
var ic={ok:'<span style="color:var(--ok)">✓</span>',warn:'<span style="color:var(--warn)">⚠</span>',err:'<span style="color:var(--err)">✗</span>'};
function run(){ rows.innerHTML='<tr><td class="muted">Проверяю…</td></tr>';
fetch('/admin/setup/quik/mnp-check',{cache:'no-store'}).then(function(r){return r.json()}).then(function(d){
rows.innerHTML=d.checks.map(function(c){return '<tr><td style="width:22px;vertical-align:top">'+ic[c.state]+'</td><td style="vertical-align:top;padding-right:10px;white-space:nowrap"><b>'+esc(c.title)+'</b></td><td style="vertical-align:top">'+esc(c.detail)+'</td></tr>'}).join('');
dot.className='dot '+d.state; document.getElementById('mnp-at').textContent='проверено '+d.at;
}).catch(function(){ rows.innerHTML='<tr><td>Проверка не выполнилась</td></tr>'; }); }
document.getElementById('mnp-run').onclick=run;
{{if .Settings.Quik.Server}}run();{{end}}
})();
</script>
{{end}}