Files
Bridge-and-Join-s/internal/lkgateway/web/templates/admin_news.html
T
zuevav a48f965d1b Справка и события без внутреннего; ЛК — только при модуле; справочник DEPO сразу после подготовки
- справка «Внешние системы» — внутренняя (internaldocs); «API ЛК» и проверка callback ЛК — только при модуле ЛК
- отслеживание документации НРД (doc-watcher) — только в режиме разработки
- после подготовки DEPO справочник участников пишется входом по действию человека — не ждёт паузы после
  прежнего неудачного входа («FTV_M2M_HANDBOOK не создана»)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 00:30:50 +03:00

92 lines
4.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{{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 { background:var(--warn-weak); }
.news-item.kind-feature { background:var(--ok-weak); }
.news-item.kind-doc-update { background:var(--accent-weak); }
.news-item.kind-system { background:var(--err-weak); }
.news-item.kind-manual { background:var(--card-2); }
.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="background:var(--accent-weak)"><p style="margin:0">{{.Flash}}</p></div>{{end}}
<div class="card">
<h2>Новости и события</h2>
<p class="muted">События системы, окна техработ НРД, обновления сертификатов. Лента не очищается — служит журналом для аудита. Скрытые новости можно посмотреть, сняв галочку «Только активные».</p>
{{if devOn}}<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}}{{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}}