Списки: период, сортировка, подгрузка; анкета участника — строкой исходящих

«Исходящие», «Входящие», «Журнал обмена»: быстрые периоды (сегодня, 7, 30
дней, всё время), даты с–по, сортировка (время, инвестор/контрагент,
направление, статус), первые 50 строк и подгрузка при прокрутке
(part=rows&offset=N). Раньше показывались только последние 200/100.

Анкета участника — исходящий пакет в НРД: строка в «Исходящих» и
«Журнале» с ответом НРД (принята / отклонена с кодом / ждёт), вместо
плашки над списком. Отправки копятся в participant-regs.json (прежний
participant-reg.json подхватывается). userTemplate — функции текущего
пользователя и для порций строк.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-22 10:50:43 +03:00
parent 890e575d3d
commit 60b4d46277
13 changed files with 522 additions and 92 deletions
@@ -1,13 +1,31 @@
{{define "content"}}
{{if .Flash}}<div class="card" style="background:var(--accent-weak,#e7f0fb)">{{.Flash}}</div>{{end}}
{{participantRegHTML}}
<div class="card">
<h2>Журнал заявок ({{len .Items}})</h2>
{{if .Items}}
<h2>Журнал заявок <span class="muted">({{.List.Total}})</span></h2>
{{template "listTools" .List}}
<table>
<thead><tr><th>Создана</th><th>ID</th><th>GUID M2M</th><th>Инвестор</th><th>ЦБ</th><th>Передающий</th><th>Принимающий</th><th>Статус</th><th></th></tr></thead>
<tbody>
{{range .Items}}
<tbody id="claims-body">
{{range .Rows}}{{template "claimrow" .}}{{end}}
</tbody>
</table>
{{if not .Rows}}<p class="muted">{{if .List.Q.FromS}}За выбранный период ничего нет.{{else}}Пусто.{{end}}</p>{{end}}
{{template "listMore" .List}}
</div>
{{end}}
{{/* Строка «Исходящих»: заявка на перевод или анкета участника M2M (исходящий пакет в НРД и ответ на него). */}}
{{define "claimrow"}}{{if .R}}{{with .R}}<tr>
<td>{{.SentAt.Format "02.01 15:04:05"}}</td>
<td><code>{{.PkgID}}</code></td>
<td><span class="muted">—</span></td>
<td><strong>Анкета участника M2M</strong>{{if .Name}}<br><span style="font-size:11px">{{.Name}}</span>{{end}}</td>
<td><span class="muted">—</span></td>
<td><span style="font-size:11px">{{index orgEff "Name"}}</span></td>
<td><span style="font-size:11px">НРД</span></td>
<td><span class="badge {{.StatusClass}}">{{.StatusText}}</span>{{if .RespText}}<div class="live live-{{if eq .StatusClass "rejected"}}bad{{else}}ok{{end}}">{{.RespAt.Format "02.01 15:04"}} · {{.RespText}}</div>{{end}}</td>
<td><a href="/admin/setup/participant-form">анкета →</a></td>
</tr>{{end}}{{else}}{{with .C}}
<tr>
<td>{{.CreatedAt.Format "02.01 15:04:05"}}</td>
<td><code>{{short 8 .ID}}</code></td>
@@ -18,12 +36,4 @@
<td>{{$t := m2mParty .ReceivingDepositoryINN}}{{if $t}}<span style="font-size:11px">{{$t}}</span><br>{{end}}<code style="font-size:11px">{{.ReceivingDepositoryINN}}</code></td>
<td>{{$l := liveOut .}}<span class="badge {{.Status}}">{{ruState .Status}}</span><div class="live live-{{$l.Kind}}" data-live="out:{{.ID}}"{{if $l.Active}} data-active="1"{{else}} title="Завершено: состояние больше не проверяется"{{end}}>{{$l.Text}}</div></td>
<td><a href="/admin/claims/{{.ID}}">детали →</a>{{if and (or (eq .Status "draft") (eq .Status "validated")) (can "operate")}}<form method="post" action="/admin/claims/{{.ID}}/delete-draft" style="margin:4px 0 0" onsubmit="return confirm('Удалить заявку? Она ещё не уходила в НРД. Если по ней бумаги заблокированы в QUIK МНП, блокировка будет снята.');"><button type="submit" class="btn" style="padding:2px 10px;font-size:12px;background:var(--card);color:var(--err,#c0392b);border:1px solid var(--err,#c0392b)">Удалить</button></form>{{end}}</td>
</tr>
{{end}}
</tbody>
</table>
{{else}}
<p class="muted">Пусто.</p>
{{end}}
</div>
{{end}}
</tr>{{end}}{{end}}{{end}}