From b442f21818f587bf972befbab738c2a7f1e29fa1 Mon Sep 17 00:00:00 2001 From: fontvielle Date: Wed, 14 Oct 2026 18:36:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=96=D1=83=D1=80=D0=BD=D0=B0=D0=BB/=D1=81?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=BA=D0=B8:=20=D0=B2=D0=B5=D1=80=D1=85?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9=20=D0=B1=D0=B5=D0=B9=D0=B4=D0=B6=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=B0=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20=D0=B6=D0=B8=D0=B2?= =?UTF-8?q?=D1=8C=D1=91=D0=BC,=20=D0=B1=D0=B5=D0=B7=20F5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Поллер строк в работе (/admin/journal/live, tick в layout.html) обновлял только нижнюю live-строку, а верхний бейдж статуса оставался тем, что отрисовал сервер при загрузке — после отправки показывал «не отправлено», пока страницу не обновишь. LiveStatus получил поля badge/badgeText/outcome (заполняются в liveOutgoing/liveIncoming из тех же источников, что и строка журнала), tick синхронизирует верхний бейдж и бейдж исхода. Касается журнала обмена, «Исходящих» и «Входящих» — у всех общий поллер. Co-Authored-By: Claude Opus 4.8 --- internal/lkgateway/livestatus.go | 7 +++++++ internal/lkgateway/web/templates/layout.html | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/internal/lkgateway/livestatus.go b/internal/lkgateway/livestatus.go index 9d39d1e..47579b3 100644 --- a/internal/lkgateway/livestatus.go +++ b/internal/lkgateway/livestatus.go @@ -25,6 +25,11 @@ type LiveStatus struct { Kind string `json:"kind"` // wait | warn | ok | bad Active bool `json:"active"` // в работе: страница продолжает опрашивать Sig string `json:"sig,omitempty"` // отпечаток состояния: изменился — карточка перерисовывается + // Верхний бейдж статуса строки журнала/списка — чтобы поллер обновлял и его, а не только + // нижнюю live-строку (иначе бейдж застывает до перезагрузки страницы). + Badge string `json:"badge,omitempty"` // класс бейджа (как .Status в строке) + BadgeText string `json:"badgeText,omitempty"` // русский текст статуса + Outcome string `json:"outcome,omitempty"` // бейдж исхода (входящие): Принято/Отказано/Частично… } // liveSig — короткий отпечаток всего, что показывает карточка: сменился — страница обновляется. @@ -52,6 +57,7 @@ func liveOutgoing(c ClaimView) LiveStatus { } } st.Sig = liveSig(st.Text, c.Status, c.UpdatedAt, sendFailGet(guid), quik, depoL, watch) + st.Badge, st.BadgeText = c.Status, russianState(c.Status) return st } @@ -64,6 +70,7 @@ func liveIncoming(it *IncomingTransfer) LiveStatus { watch = globalOrderWatch.Get(it.GUID) } st.Sig = liveSig(st.Text, it, watch) + st.Badge, st.BadgeText, st.Outcome = incomingJournalStatus(it) } return st } diff --git a/internal/lkgateway/web/templates/layout.html b/internal/lkgateway/web/templates/layout.html index 22e2a62..0bc979f 100644 --- a/internal/lkgateway/web/templates/layout.html +++ b/internal/lkgateway/web/templates/layout.html @@ -951,6 +951,16 @@ button.dq-link, .dq-link { background:none !important; border:0 !important; padd e.textContent = st.text; e.className = 'live ' + (big ? 'live-big ' : '') + 'live-' + st.kind; if (!st.active) e.removeAttribute('data-active'); + if (!big && st.badgeText) { // синхронизируем верхний бейдж статуса строки (не только нижнюю live-строку) + var td = e.parentNode, bs = td ? td.querySelectorAll('span.badge') : []; + if (bs[0]) { bs[0].className = 'badge ' + (st.badge || ''); if (bs[0].textContent !== st.badgeText) bs[0].textContent = st.badgeText; } + var ob = bs[1] || null; + if (st.outcome && bs[0]) { + var ocls = st.outcome === 'Принято' ? 'confirmed' : (st.outcome === 'Отказано' ? 'rejected' : 'awaiting_decision'); + if (!ob) { td.insertBefore(document.createTextNode(' '), e); ob = document.createElement('span'); td.insertBefore(ob, e); } + ob.className = 'badge ' + ocls; if (ob.textContent !== st.outcome) ob.textContent = st.outcome; + } else if (ob) { var sp = ob.previousSibling; if (sp && sp.nodeType === 3 && !sp.nodeValue.trim()) sp.remove(); ob.remove(); } + } var nx = e.nextElementSibling; if (big && !(nx && nx.classList.contains('changed'))) { meta(e, st.active ? 'обновляется автоматически · проверено в ' + hhmmss() : 'заявка завершена — автообновление не требуется');