Мастер: одинаковые отметки шагов, «Обновление» после «Лицензии», переходы

- ключ, подключённый мастером ключа, засчитывается сразу и в мастере, и на главной
  (сверка справочника шлюза отстаёт)
- точка в заголовке шага — то же «выполнено», что в колонке (с «Настроить позже»)
- выход из мастера — «Выйти из мастера», не «Настроить позже»
- шаг «Обновление» — сразу после «Лицензии»; на шаге 1 — указание на него, без второй кнопки
- «Далее»/«Назад» со шага вне пути (сделан установщиком) — соседи по порядку глав
- последний шаг при несделанном обязательном — «Вернуться к шагу …», не «Перейти к работе»

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-21 23:50:02 +03:00
parent f1065e369a
commit 90aacf9ef4
7 changed files with 65 additions and 33 deletions
+6 -1
View File
@@ -198,6 +198,8 @@ type WizardData struct {
Chapters []WizChapter
Prev, Next int
StepDone bool
Unfinished int // обязательный несделанный шаг (последний шаг ведёт к нему, а не «к работе»)
UnfinishedT string // его название
StepRequired bool
StepTitle string
ChapterTitle string
@@ -293,7 +295,7 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) {
// установщиком. Без ?step — первый несделанный обязательный шаг, а если всё сделано — проверка.
d.Done.Users = doneUsers()
// Выполнено ли — одно правило с плашкой на главной (wizDone), с учётом «Настроить позже».
done := wizDone(r.Context(), h.rc, d.ValidataVer, d.Done.Certs || h.keyWiz.installed())
done := wizDone(r.Context(), h.rc, d.ValidataVer, d.Done.Certs || h.keyWiz.installed() || keyWizInstalled.Load())
// «отложено» показываем, только пока шаг не настроен по-настоящему
d.Deferred = map[int]bool{9: def.Steps[9] && !d.Done.Alerts, 11: def.Steps[11] && !d.Done.Modules, 13: def.Steps[13] && !d.Done.Users}
path, _ := wizPath(h.rc, done, 0)
@@ -307,6 +309,9 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) {
d.Path, d.Chapters = wizPath(h.rc, done, step)
d.Prev, d.Next = wizNeighbours(d.Path, step)
d.StepDone, d.StepRequired, d.StepTitle = done[step], wizRequired[step], wizStepTitles[step]
if u := wizDefaultStep(path, done); wizRequired[u] && !done[u] && u != step {
d.Unfinished, d.UnfinishedT = u, wizStepTitles[u]
}
for _, c := range d.Chapters {
if c.Current {
d.ChapterTitle = c.Title