Исходящие: карточка «Регистрация участника M2M» (отправка анкеты + ответ НРД)

На странице «Исходящие» (/admin/claims) сверху показываем карточку регистрации
участника: когда отправили анкету, пакет, наименование и вердикт НРД («принял»
/ «отклонил» с текстом, напр. M2M37). Данные — из participant-reg.json
(template-функция participantRegHTML). Карточки нет, пока анкету не отправляли.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-21 18:30:47 +03:00
parent 07866526eb
commit 551448216c
3 changed files with 27 additions and 2 deletions
+2 -2
View File
@@ -20,8 +20,8 @@
"version": "2026.10.21.6" "version": "2026.10.21.6"
}, },
"bj-server": { "bj-server": {
"fingerprint": "729ea3d2cdb6ba9d3f5e56d8acb967d7a5620771a6949d723482ee14d882a83c", "fingerprint": "6a2896e2078e2388caf8822568efa8b7d798a51891433ce1e6413cb7a11eeca1",
"version": "2026.10.21.13" "version": "2026.10.21.14"
}, },
"crypto-service.jar": { "crypto-service.jar": {
"fingerprint": "2c4fd536bc9b1c20c69a70e8dcd374a61847b263aeb2e474c45debb01fbd8233", "fingerprint": "2c4fd536bc9b1c20c69a70e8dcd374a61847b263aeb2e474c45debb01fbd8233",
+24
View File
@@ -37,6 +37,30 @@ type admin struct {
// русификация статусов и других технических обозначений (см. требование // русификация статусов и других технических обозначений (см. требование
// «всё UI на русском, кроме программных терминов»). // «всё UI на русском, кроме программных терминов»).
var templateFuncs = template.FuncMap{ var templateFuncs = template.FuncMap{
// Карточка «Регистрация участника M2M» для «Исходящих»: когда отправили анкету и вердикт НРД.
"participantRegHTML": func() template.HTML {
reg := loadParticipantReg()
if reg.SentAt.IsZero() {
return ""
}
esc := template.HTMLEscapeString
var b strings.Builder
b.WriteString(`<div class="card"><h2>Регистрация участника M2M (анкета)</h2><p>Анкета отправлена ` + reg.SentAt.Format("02.01.2006 15:04") + `, пакет ` + esc(reg.PkgID))
if reg.Name != "" {
b.WriteString(`, наименование «` + esc(reg.Name) + `»`)
}
b.WriteString(`. `)
switch {
case reg.RespAt.IsZero():
b.WriteString(`Ответ НРД пока не получен.`)
case strings.EqualFold(reg.Status, "ERROR"):
b.WriteString(`<b style="color:var(--err,#c0392b)">НРД отклонил</b> ` + reg.RespAt.Format("02.01 15:04") + `: ` + esc(reg.RespText) + `.`)
default:
b.WriteString(`<b style="color:#1a7f37">НРД принял</b> ` + reg.RespAt.Format("02.01 15:04") + `. ` + esc(reg.RespText))
}
b.WriteString(` <a href="/admin/setup/participant-form">открыть анкету →</a></p></div>`)
return template.HTML(b.String())
},
"ru": russianText, "ru": russianText,
"ruState": russianState, "ruState": russianState,
"ruOutcome": russianOutcome, "ruOutcome": russianOutcome,
@@ -1,5 +1,6 @@
{{define "content"}} {{define "content"}}
{{if .Flash}}<div class="card" style="background:var(--accent-weak,#e7f0fb)">{{.Flash}}</div>{{end}} {{if .Flash}}<div class="card" style="background:var(--accent-weak,#e7f0fb)">{{.Flash}}</div>{{end}}
{{participantRegHTML}}
<div class="card"> <div class="card">
<h2>Журнал заявок ({{len .Items}})</h2> <h2>Журнал заявок ({{len .Items}})</h2>
{{if .Items}} {{if .Items}}