Шапка «Шлюз НРД»: зелёная при работающем обмене, всплывающая панель; плашка анкеты в НРД
Общий цвет цепочки — по участкам с известным состоянием: несделанная M2M-проверка больше не делает серым работающий обмен. Вместо title — всплывающая панель по участкам с цветными точками, без повтора «последнего ответа НРД». Раздел НРД: наверху плашка, пока анкета участника не принята НРД (не отправлена / ждёт ответа / отклонена с текстом НРД), со ссылкой на анкету; пропадает после приёма. Только в боевом контуре. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -15,6 +15,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"html/template"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
@@ -234,12 +235,17 @@ func nsdHealthNow(rc *RuntimeConfig, now time.Time) NSDHealth {
|
||||
nsdH.Unlock()
|
||||
|
||||
h.Segs = []NSDSeg{gw, ns, m, sd}
|
||||
// Общий цвет — по участкам с известным состоянием: «проверка ещё не выполнялась» не делает
|
||||
// серым работающий обмен. Серый — только когда по известным участкам связь не подтверждена.
|
||||
h.State = segOK
|
||||
for _, s := range h.Segs {
|
||||
if segRank(s.State) > segRank(h.State) {
|
||||
if s.State != segUnknown && segRank(s.State) > segRank(h.State) {
|
||||
h.State = s.State
|
||||
}
|
||||
}
|
||||
if h.State == segOK && !nsdLinkOK(h) {
|
||||
h.State = segUnknown
|
||||
}
|
||||
h.Ago = agoText(h.LastAnswer, now)
|
||||
return h
|
||||
}
|
||||
@@ -553,6 +559,23 @@ func nsdClientNotice(h NSDHealth) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// nsdSegPop — всплывающая панель цепочки в шапке: участки с цветной точкой. Строки «последний ответ»
|
||||
// нет — время ответа уже в участке «НРД».
|
||||
func nsdSegPop(h NSDHealth) template.HTML {
|
||||
esc := template.HTMLEscapeString
|
||||
var b strings.Builder
|
||||
b.WriteString(`<span class="nsd-pop" role="tooltip"><span class="nsd-pop-b">`)
|
||||
for _, s := range h.Segs {
|
||||
b.WriteString(`<span class="np-row"><i class="np-d ` + esc(s.State) + `"></i><b>` + esc(s.Title) + `</b><span>` + esc(s.Text))
|
||||
if s.Detail != "" {
|
||||
b.WriteString(`<small>` + esc(s.Detail) + `</small>`)
|
||||
}
|
||||
b.WriteString(`</span></span>`)
|
||||
}
|
||||
b.WriteString(`<span class="np-foot">Подробно — «Статус»</span></span></span>`)
|
||||
return template.HTML(b.String())
|
||||
}
|
||||
|
||||
// nsdSegTip — подсказка к цепочке в шапке: все участки построчно.
|
||||
func nsdSegTip(h NSDHealth) string {
|
||||
var b strings.Builder
|
||||
|
||||
Reference in New Issue
Block a user