b4b4788035
Пока лицензия разрешает режим разработки, в шапке висит баннер; нажатие выключает режим визуально для этого пользователя и включает обратно. В шаблонах .DevMode заменён на devOn. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
52 lines
3.2 KiB
HTML
52 lines
3.2 KiB
HTML
{{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}}</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}}
|