Настройки: поля кабинета не разъезжаются — подпись, ввод и пояснение каждое со своей строки

На странице настроек label не блочный, поэтому подпись, поле и пояснение вставали в одну
строку и текст обтекал ввод. Добавлен класс поля .fld (сетка) и применён в карточках
«Кабинет клиента», «Кабинет на этом сервере» и «ЕСИА Финанс».

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
zuevav
2026-09-18 18:22:09 +03:00
parent 20f05f924b
commit 13b051106f
2 changed files with 14 additions and 8 deletions
@@ -628,7 +628,7 @@ function hbBind(inp,box,list,onPick){
<form method="post" action="/admin/setup/lk/dist" style="display:grid;gap:14px;max-width:780px;margin-top:12px">
<input type="hidden" name="section" value="sec-lk-dist"><input type="hidden" name="core_url_set" value="1"><input type="hidden" name="mode_set" value="1">
<div>
<div class="fld">
<label>Ключ доступа модуля</label>
<div style="display:flex;gap:8px;align-items:center;margin-top:4px;flex-wrap:wrap">
<code style="flex:1;min-width:260px;overflow-wrap:anywhere">{{if .LKKeyMask}}{{.LKKeyMask}}{{else}}не создан — кабинет не сможет обращаться к ядру{{end}}</code>
@@ -638,19 +638,19 @@ function hbBind(inp,box,list,onPick){
<span class="muted" style="font-size:12px">В архив ключ не попадает: его вводят в установщике кабинета (или вписывают в <code>lk.env</code> при установке без браузера). Здесь он показан целиком — понадобится при переустановке кабинета.</span>
</div>
<div>
<label style="margin-bottom:8px">Как кабинет и ядро находят друг друга</label>
<div class="fld" style="gap:2px">
<label style="margin-bottom:6px">Как кабинет и ядро находят друг друга</label>
<label style="display:flex;gap:8px;align-items:flex-start;font-weight:600"><input type="radio" name="mode" value="direct" {{if not .Settings.LK.AgentMode}}checked{{end}}> <span>Кабинет обращается к ядру <span class="muted" style="font-weight:400">— обычный случай: у ядра есть адрес, доступный серверу кабинета.</span></span></label>
<label style="display:flex;gap:8px;align-items:flex-start;font-weight:600;margin-top:6px"><input type="radio" name="mode" value="agent" {{if .Settings.LK.AgentMode}}checked{{end}}> <span>Ядро подключается к кабинету <span class="muted" style="font-weight:400">— если у ядра нет адреса в интернете. Ядро само звонит кабинету по его имени, забирает запросы клиентов и возвращает ответы; входящих соединений и открытых портов не требуется.</span></span></label>
</div>
<div>
<div class="fld">
<label>Адрес ядра для кабинета <span class="muted" style="font-weight:400">— для режима «кабинет обращается к ядру»</span></label>
<input type="text" name="core_url" value="{{.Settings.LK.CoreURL}}" placeholder="https://bj.example.ru" style="margin-top:4px">
<span class="muted" style="font-size:12px">Куда кабинет обращается за данными. Если кабинет и ядро в одной сети — внутренний адрес; если в разных — тот, что открыт межсетевым экраном. Только <code>https</code>: по этому каналу идут ключ и сессии клиентов.</span>
</div>
<div>
<div class="fld">
<label>Адрес кабинета на хостинге <span class="muted" style="font-weight:400">— для режима «ядро подключается к кабинету»</span></label>
<input type="text" name="cabinet_url" value="{{.Settings.LK.CabinetURL}}" placeholder="https://lk.example.ru" style="margin-top:4px">
<span class="muted" style="font-size:12px">Имя, по которому ядро дозванивается до кабинета. Оно же — адрес, по которому входят клиенты.</span>
@@ -687,7 +687,7 @@ function hbBind(inp,box,list,onPick){
<form method="post" action="/admin/setup/lk/preview" style="display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap;margin-top:10px">
<input type="hidden" name="section" value="sec-lk-preview">
<label style="display:flex;gap:8px;align-items:center;font-weight:600;margin:0"><input type="checkbox" name="preview_on" value="1" {{if .Settings.LK.PreviewOn}}checked{{end}}> Запустить кабинет на этом сервере</label>
<div><label>Порт</label><input type="text" name="preview_listen" value="{{.LKPreview.Listen}}" style="width:120px;margin-top:4px"></div>
<div class="fld"><label>Порт</label><input type="text" name="preview_listen" value="{{.LKPreview.Listen}}" style="width:120px"></div>
<button type="submit" class="btn btn-ok">Применить</button>
{{if .LKPreview.On}}<a class="btn" href="{{.LKPreview.URL}}" target="_blank" rel="noopener">Открыть кабинет →</a>{{end}}
</form>
@@ -754,7 +754,7 @@ function hbBind(inp,box,list,onPick){
<h2><span class="dot {{if .Settings.LK.PublicURL}}ok{{else}}warn{{end}}"></span>Личный кабинет — интеграция</h2>
<p class="muted">Адрес ЛК (стенд/бой), куда клиент подаёт заявку M2M. Заявка приходит к нам по контракту <code>POST /api/v1/back_office/claims/</code>, а мы возвращаем статус через <strong>Callback URL</strong>.</p>
<form method="post" action="/admin/setup/lk" style="margin-top:12px;display:grid;gap:12px;max-width:640px">
<div>
<div class="fld">
<label>Адрес ЛК</label>
<div style="display:flex;gap:8px;align-items:center;margin-top:4px">
<input type="text" name="lk_public_url" value="{{.Settings.LK.PublicURL}}" placeholder="https://lk.example.ru" style="flex:1">
@@ -762,7 +762,7 @@ function hbBind(inp,box,list,onPick){
</div>
<span class="muted" style="font-size:12px">{{if devOn}}Показывается ссылкой на дашборде для первичного теста.{{else}}Адрес, по которому клиенты входят в личный кабинет.{{end}}</span>
</div>
<div>
<div class="fld">
<label>Callback URL <span class="muted" style="font-weight:400">(куда bj шлёт статус заявки)</span></label>
<input type="text" name="callback_url" value="{{.Settings.LK.CallbackURL}}" placeholder="https://lk.example.ru" style="margin-top:4px">
<span class="muted" style="font-size:12px">{{if not .Settings.LK.CallbackURL}}Не настроен — уведомления в ЛК отключены. Для обмена с НРД не требуется.{{end}}</span>
@@ -189,6 +189,12 @@ input, select, textarea {
}
input:focus, select:focus, textarea:focus { outline:2px solid var(--accent-weak); border-color:var(--accent); }
label { font-size:13px; font-weight:500; }
/* Поле формы: подпись, ввод и пояснение — каждое со своей строки. Без этого label,
input и подсказка идут в строку и «разъезжаются» на широком экране. */
.fld { display:grid; gap:4px; align-content:start; }
.fld > label { font-weight:600; }
.fld input[type=text], .fld input[type=password], .fld input[type=email], .fld select { width:100%; max-width:460px; }
.fld .muted { max-width:620px; line-height:1.45; }
/* ---- Баннер режима эмуляции ---- */
.banner-mock { background:var(--warn-weak); border-bottom:1px solid var(--warn); padding:10px 24px; display:flex; align-items:center; gap:12px; font-size:13px; }