diff --git a/internal/lkgateway/onboarding_test.go b/internal/lkgateway/onboarding_test.go
index 208a735..5b10248 100644
--- a/internal/lkgateway/onboarding_test.go
+++ b/internal/lkgateway/onboarding_test.go
@@ -212,6 +212,12 @@ func TestWizardChaptersWithoutLicense(t *testing.T) {
if len(wizModuleViews(rc, rc.Snapshot())) != 0 {
t.Fatal("без лицензии модулей в мастере быть не должно")
}
+ if chapters[1].Title != "Организация" {
+ t.Fatalf("без учёта DEPO и QUIK глава 2 — «Организация», а не %q", chapters[1].Title)
+ }
+ if l := wizChaptersLine(chapters); l != "Четыре главы: сервер, организация, НРД, запуск." {
+ t.Fatalf("подзаголовок: %q", l)
+ }
}
func TestLettersFill(t *testing.T) {
diff --git a/internal/lkgateway/setup.go b/internal/lkgateway/setup.go
index b566158..ecbbc5e 100644
--- a/internal/lkgateway/setup.go
+++ b/internal/lkgateway/setup.go
@@ -187,6 +187,7 @@ type WizardData struct {
StepRequired bool
StepTitle string
ChapterTitle string
+ ChaptersLine string // «Четыре главы: сервер, организация, НРД, запуск.»
Modules []WizModule // глава «Запуск»: модули по лицензии
Done struct {
License bool
@@ -289,6 +290,7 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) {
d.ChapterTitle = c.Title
}
}
+ d.ChaptersLine = wizChaptersLine(d.Chapters)
if done[2] {
d.AutoDone = append(d.AutoDone, "База bj создана установщиком"+pickStr(" — "+d.PGSummary, ""))
}
diff --git a/internal/lkgateway/web/templates/admin_wizard.html b/internal/lkgateway/web/templates/admin_wizard.html
index d0d9cf4..deb625a 100644
--- a/internal/lkgateway/web/templates/admin_wizard.html
+++ b/internal/lkgateway/web/templates/admin_wizard.html
@@ -31,7 +31,7 @@ a.wstep:hover .bub { box-shadow:0 0 0 4px var(--accent-weak); }
Настройка Bridge&Join
-
Четыре главы: сервер, учёт и организация, НРД, запуск. Всё сохраняется сразу — можно прерваться и вернуться
+
{{.ChaptersLine}} Всё сохраняется сразу — можно прерваться и вернуться.
diff --git a/internal/lkgateway/web/templates/layout.html b/internal/lkgateway/web/templates/layout.html
index 9fbb605..9fa620a 100644
--- a/internal/lkgateway/web/templates/layout.html
+++ b/internal/lkgateway/web/templates/layout.html
@@ -361,7 +361,7 @@ details:has(> pre.copyable) { min-width:0; max-width:100%; }
{{if and .NSDLink.Configured (not .IsMockMode)}}Шлюз НРД{{else}}
- {{if .IsMockMode}}{{if devOn}}Эмуляция{{else}}Нет связи с НРД{{end}}{{else}}НРД на связи{{end}}{{end}}
+ {{if .IsMockMode}}{{if devOn}}Эмуляция{{else}}НРД не подключён{{end}}{{else}}НРД на связи{{end}}{{end}}
{{.Now}}
diff --git a/internal/lkgateway/wizchapters.go b/internal/lkgateway/wizchapters.go
index 058f9ce..a9bbab4 100644
--- a/internal/lkgateway/wizchapters.go
+++ b/internal/lkgateway/wizchapters.go
@@ -7,6 +7,8 @@ package lkgateway
// - сделан установщиком без участия человека (база bj, Валидата) — шага нет в пути, в главе «Сервер»
// это показано строкой «сделано автоматически».
+import "strings"
+
// wizChapters — главы мастера: название и шаги по порядку.
var wizChapters = []struct {
Title string
@@ -91,6 +93,9 @@ func wizPath(rc *RuntimeConfig, done map[int]bool, current int) (path []int, cha
if len(c.Steps) == 0 {
continue
}
+ if len(c.Steps) == 1 { // в главе один шаг (остальные не в лицензии) — глава называется по нему: «Организация»
+ c.Title = c.Steps[0].Title
+ }
// переход по главе — на первый несделанный шаг главы
for _, s := range c.Steps {
if !s.Done {
@@ -103,6 +108,24 @@ func wizPath(rc *RuntimeConfig, done map[int]bool, current int) (path []int, cha
return path, chapters
}
+// wizChaptersLine — подзаголовок мастера: «Четыре главы: сервер, организация, НРД, запуск».
+func wizChaptersLine(chapters []WizChapter) string {
+ words := []string{"", "Одна глава", "Две главы", "Три главы", "Четыре главы"}
+ var names []string
+ for _, c := range chapters {
+ t := c.Title
+ if t != "НРД" && t != "" {
+ r := []rune(t)
+ t = strings.ToLower(string(r[:1])) + string(r[1:])
+ }
+ names = append(names, t)
+ }
+ if len(chapters) == 0 || len(chapters) >= len(words) {
+ return ""
+ }
+ return words[len(chapters)] + ": " + strings.Join(names, ", ") + "."
+}
+
// wizNeighbours — предыдущий и следующий шаг в пути (0 — нет).
func wizNeighbours(path []int, current int) (prev, next int) {
for i, n := range path {