9737c787f9
Инфраструктура M2M (живой обмен с НРД через ИШ): - обработка M2MTransferResponse: ERROR(M2Mxx) → заявка Отклонена, сохранение ответа; INFO → ждём Decision; идемпотентность поллера - fallback-корреляция ответов с нулевым GUID (M2M14/M2M17) по FIFO - сырой XML ответа НРД в карточке заявки (для пересылки в ТП) - тестовый пакет роботу приведён к эталону m2m_robot_samples (CostInfo=Yes, 4 бумаги, IsolationStatus, DocumentSeries=сценарий); override паспорта - редирект из теста сразу в карточку заявки Мастер установки ключа Валидаты на флешку (admin/setup/keywizard): - пошаговый: загрузка .7z+пароль → выбор флешки → запись → справочник сертификатов (CRL) → перезапуск+проверка ИШ → готово - привилегированный воркер (bj-keymedia) в host-namespace через файл-обмен, bj-server остаётся в песочнице - сохранение структуры профиля архива (spr<N>), перечисление съёмных USB Прочее: - пакет-доказательство для ТП НРД + форма регистрации участника M2M - эталонные образцы робота (DOC/m2m_robot_samples) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
92 lines
4.7 KiB
HTML
92 lines
4.7 KiB
HTML
{{define "content"}}
|
||
<style>
|
||
.news-item { background:var(--card); border:1px solid var(--border); border-radius:6px; padding:14px; margin-bottom:10px; }
|
||
.news-item.dismissed { opacity:0.5; }
|
||
.news-item.kind-maintenance { border-left:4px solid var(--warn); }
|
||
.news-item.kind-feature { border-left:4px solid var(--ok); }
|
||
.news-item.kind-doc-update { border-left:4px solid var(--accent); }
|
||
.news-item.kind-system { border-left:4px solid var(--err); }
|
||
.news-item.kind-manual { border-left:4px solid var(--muted); }
|
||
.news-meta { font-size:11px; color:var(--muted); margin-bottom:6px; text-transform:uppercase; letter-spacing:0.04em; }
|
||
.news-title { font-size:15px; font-weight:600; margin:0 0 6px 0; }
|
||
.news-body { font-size:13px; white-space:pre-wrap; }
|
||
.news-validity { margin-top:6px; padding:4px 8px; background:var(--bg); border-radius:4px; display:inline-block; font-size:12px; }
|
||
.news-validity.active { background:var(--warn-weak); color:var(--warn); }
|
||
</style>
|
||
|
||
{{if .Flash}}<div class="card" style="border-left:3px solid var(--accent)"><p style="margin:0">{{.Flash}}</p></div>{{end}}
|
||
|
||
<div class="card">
|
||
<h2>Новости и события</h2>
|
||
<p class="muted">События системы, окна техработ НРД, обновления документации и сертификатов. Лента не очищается — служит журналом для аудита. Скрытые новости можно посмотреть, сняв галочку «Только активные».</p>
|
||
<form method="post" action="/admin/news/check-docs" style="margin-top:10px;display:flex;gap:8px;align-items:center;flex-wrap:wrap">
|
||
<button type="submit" class="btn">🔄 Проверить обновления документации НРД сейчас</button>
|
||
{{if not .Settings.News.LastDocCheck.IsZero}}
|
||
<span class="muted" style="font-size:12px">Последняя проверка: {{.Settings.News.LastDocCheck.Format "02.01.2006 15:04:05"}}</span>
|
||
{{end}}
|
||
</form>
|
||
{{if .Settings.News.DocSources}}
|
||
<details style="margin-top:8px">
|
||
<summary style="cursor:pointer;color:var(--accent);font-size:13px">Источники документации, которые отслеживает doc-watcher</summary>
|
||
<table style="margin-top:8px;font-size:13px">
|
||
<thead><tr><th>Имя</th><th>URL</th><th>PDF найдено</th><th>Последняя проверка</th></tr></thead>
|
||
<tbody>
|
||
{{range .Settings.News.DocSources}}
|
||
<tr>
|
||
<td>{{.Name}}</td>
|
||
<td><a href="{{.URL}}" target="_blank"><code style="font-size:11px">{{.URL}}</code></a></td>
|
||
<td>{{len .KnownPDFs}}</td>
|
||
<td>{{if .LastChecked.IsZero}}—{{else}}{{.LastChecked.Format "02.01.2006 15:04"}}{{end}}</td>
|
||
</tr>
|
||
{{end}}
|
||
</tbody>
|
||
</table>
|
||
</details>
|
||
{{end}}
|
||
</div>
|
||
|
||
<h2 style="margin:24px 0 12px 0">Лента ({{len .Settings.News.Items}})</h2>
|
||
|
||
{{if not .Settings.News.Items}}
|
||
<div class="card"><p class="muted" style="margin:0">Пока ничего нет. Doc-watcher запустится через минуту после старта bj-server и заполнит ленту автоматически.</p></div>
|
||
{{end}}
|
||
|
||
{{range .Settings.News.Items}}
|
||
<div class="news-item kind-{{.Kind}} {{if .Dismissed}}dismissed{{end}}">
|
||
<div class="news-meta">
|
||
{{.At.Format "02.01.2006 15:04"}}
|
||
· <strong>{{.Kind}}</strong>
|
||
{{if .URL}}· <a href="{{.URL}}" target="_blank" rel="noopener">источник</a>{{end}}
|
||
</div>
|
||
<h3 class="news-title">{{.Title}}</h3>
|
||
{{if .Body}}<div class="news-body">{{.Body}}</div>{{end}}
|
||
{{if or (not .ValidFrom.IsZero) (not .ValidTo.IsZero)}}
|
||
{{$now := now}}
|
||
{{$active := false}}
|
||
{{if and (not .ValidFrom.IsZero) (not .ValidTo.IsZero)}}
|
||
{{if and (gt $now.Unix .ValidFrom.Unix) (lt $now.Unix .ValidTo.Unix)}}{{$active = true}}{{end}}
|
||
{{end}}
|
||
<div class="news-validity {{if $active}}active{{end}}">
|
||
{{if not .ValidFrom.IsZero}}С {{.ValidFrom.Format "02.01.2006"}}{{end}}
|
||
{{if not .ValidTo.IsZero}} по {{.ValidTo.Format "02.01.2006"}}{{end}}
|
||
{{if $active}} — <strong>сейчас активно</strong>{{end}}
|
||
</div>
|
||
{{end}}
|
||
{{if not .Dismissed}}
|
||
<form method="post" action="/admin/news/dismiss" style="margin-top:10px">
|
||
<input type="hidden" name="id" value="{{.ID}}">
|
||
<button type="submit" class="btn" style="background:var(--border);color:var(--text);padding:4px 10px;font-size:12px">Скрыть</button>
|
||
</form>
|
||
{{end}}
|
||
</div>
|
||
{{end}}
|
||
|
||
{{if .Settings.News.DocCheckResult}}
|
||
<div class="card" style="margin-top:20px">
|
||
<h2>Журнал последней проверки документации</h2>
|
||
<pre>{{.Settings.News.DocCheckResult}}</pre>
|
||
</div>
|
||
{{end}}
|
||
|
||
{{end}}
|