Files
Bridge-and-Join-s/internal/lkgateway/web/templates/admin_incoming.html
T
zuevav 46e55e1277 Журнал: онлайн-статус «чего ждёт заявка», ссылка из ручного ввода в журнал, правки формы
- livestatus.go: одна фраза состояния для исходящих (сделка M2M + черновик/подача/MS010
  поручения 16) и входящих (наше решение → поручение 16/1); признак «в работе»
- строки журналов и карточки показывают её и обновляют по /admin/journal/live каждые 8 с,
  пока заявка в работе; завершённые и отклонённые не опрашиваются
- ручной ввод: у отправленного поручения ссылка «в журнале →» и тот же онлайн-статус;
  вид документа занимает две колонки
- выбор участника: по ИНН и коду с кнопки, а не по номеру строки; Enter выбирает только
  при единственном совпадении

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-18 11:55:39 +03:00

52 lines
3.3 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"}}
<div class="hero">
<h1 class="hero-greeting">Входящие переводы</h1>
<span class="hero-status">Запросы на перевод, где контрагент{{if devOn}} (или робот в сценарии 3333){{end}} — передающая сторона. Нужно ответить: принять или отказать по каждой бумаге.</span>
</div>
<div class="card">
<h2>Список ({{len .Items}})</h2>
{{if .Items}}
<table>
<thead><tr><th>Получен</th><th>GUID</th><th>От кого</th><th>ЦБ</th><th>Статус</th><th></th></tr></thead>
<tbody>
{{range .Items}}
<tr>
<td>{{msk .ReceivedAt}}</td>
<td><code>{{short 8 .GUID}}</code></td>
<td>{{$nm := m2mParty .SenderCode}}{{if not $nm}}{{$nm = m2mParty .SenderINN}}{{end}}{{if $nm}}<strong>{{$nm}}</strong><br>{{end}}<code>{{.SenderCode}}</code>{{if .SenderINN}} · ИНН {{.SenderINN}}{{end}}</td>
<td>{{len .Securities}}</td>
<td>{{$s := inStatus .}}<span class="badge {{$s.Class}}">{{$s.Text}}</span>{{if $s.Outcome}} <span class="badge {{if eq $s.Outcome "Принято"}}confirmed{{else if eq $s.Outcome "Отказано"}}rejected{{else}}awaiting_decision{{end}}">{{$s.Outcome}}</span>{{end}}{{if .DepoSummary}}<br><span class="badge {{if eq .DepoRecommend "confirm"}}confirmed{{else if eq .DepoRecommend "reject"}}rejected{{else}}awaiting_decision{{end}}" style="font-size:11px;margin-top:4px" title="Сверка с DEPO — {{if devOn}}эмуляция ответа{{else}}рекомендация{{end}}, ничего не отправлено">сверка: {{.DepoSummary}}</span>{{end}}{{$l := liveIn .}}<div class="live live-{{$l.Kind}}" data-live="in:{{.ID}}"{{if $l.Active}} data-active="1"{{end}}>{{$l.Text}}</div></td>
<td><a href="/admin/incoming/{{.ID}}">{{if eq .Status "answered"}}просмотр{{else}}ответить{{end}} →</a></td>
</tr>
{{end}}
</tbody>
</table>
{{else}}
<p class="muted">Входящих переводов нет. Они появляются, когда другая сторона инициирует перевод к нам{{if devOn}} (напр. робот НРД в сценарии 3333 «Выступить принимающей стороной»){{end}}.</p>
{{end}}
<p class="muted" style="font-size:12px;margin-top:10px">🔄 Страница обновляется автоматически при появлении нового входящего.</p>
</div>
<script>
// Авто-обновление: раз в 7с опрашиваем фид; если состав/статусы входящих
// изменились — перезагружаем страницу, чтобы всегда видеть актуальные данные.
(function(){
function sig(d){
if(!d||!d.pending) return String(d&&d.count||0);
return d.pending.map(function(p){return p.id+':'+(p.count||0);}).sort().join(',');
}
var last=null;
async function tick(){
try{
var r=await fetch('/admin/incoming/feed',{headers:{'X-Requested-With':'fetch'}});
if(!r.ok) return;
var d=await r.json(); var s=sig(d);
if(last!==null && s!==last){ location.reload(); return; }
last=s;
}catch(e){}
}
tick(); setInterval(tick, 7000);
})();
</script>
{{end}}