From 74dfbbf7b547512f167a83278f6ea6d6430b69a8 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Mon, 27 Apr 2026 10:37:29 +0800 Subject: [PATCH] feat: fold single-device operations into device workspace --- internal/web/ui.go | 33 ++-- internal/web/ui/templates/config_preview.html | 2 +- internal/web/ui/templates/device.html | 163 ++++++++++++++---- internal/web/ui/templates/device_config.html | 76 +++----- internal/web/ui_test.go | 16 ++ 5 files changed, 182 insertions(+), 108 deletions(-) diff --git a/internal/web/ui.go b/internal/web/ui.go index 0b271d6..5d14ce7 100644 --- a/internal/web/ui.go +++ b/internal/web/ui.go @@ -481,19 +481,14 @@ func (u *UI) pageDeviceAdd(w http.ResponseWriter, r *http.Request) { func (u *UI) pageDeviceConfig(w http.ResponseWriter, r *http.Request) { u.ensureDevicesLoaded() u.render(w, r, "device_config", PageData{ - Title: "配置管理", + Title: "设备配置入口", Devices: u.registry.GetDevices(), }) } func (u *UI) pageDeviceConfigDetail(w http.ResponseWriter, r *http.Request) { id := chi.URLParam(r, "id") - dev, ok := u.findDevice(id) - if !ok { - http.NotFound(w, r) - return - } - u.render(w, r, "device_control", u.deviceConfigWorkspacePageData(dev)) + http.Redirect(w, r, "/ui/devices/"+url.PathEscape(id)+"#device-config", http.StatusFound) } func (u *UI) actionDeviceAdd(w http.ResponseWriter, r *http.Request) { @@ -667,26 +662,18 @@ func (u *UI) pageDevice(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) return } - status, raw, statusErr := u.loadConfigStatus(dev) - data := PageData{Title: "设备详情", Device: dev, ConfigStatus: status, ConfigStatusText: raw} - if statusErr != nil { - data.ConfigStatusErr = statusErr.Error() - } - u.render(w, r, "device", data) + u.render(w, r, "device", u.deviceDetailPageData(dev)) } func (u *UI) deviceDetailPageData(dev *models.Device) PageData { - status, raw, statusErr := u.loadConfigStatus(dev) - data := PageData{Title: "设备详情", Device: dev, ConfigStatus: status, ConfigStatusText: raw} - if statusErr != nil { - data.ConfigStatusErr = statusErr.Error() - } + data := u.deviceControlPageData(dev) + data.Title = "设备详情" return data } func (u *UI) pageDeviceControl(w http.ResponseWriter, r *http.Request) { id := chi.URLParam(r, "id") - http.Redirect(w, r, "/ui/device-config/"+url.PathEscape(id), http.StatusFound) + http.Redirect(w, r, "/ui/devices/"+url.PathEscape(id)+"#device-config", http.StatusFound) } func (u *UI) actionDeviceAction(w http.ResponseWriter, r *http.Request) { @@ -727,14 +714,14 @@ func (u *UI) actionDeviceAction(w http.ResponseWriter, r *http.Request) { msg := fmt.Sprintf("%s %s -> %d", method, path, code) returnTo := strings.TrimSpace(r.FormValue("return_to")) if returnTo == "control" || returnTo == "config" { - data := u.deviceConfigWorkspacePageData(dev) + data := u.deviceDetailPageData(dev) data.Message = msg data.RawText = string(body) data.ResultTitle = "执行结果摘要" if err != nil { data.Error = err.Error() } - u.render(w, r, "device_control", data) + u.render(w, r, "device", data) return } data := PageData{Title: "设备详情", Device: dev, Message: msg, RawText: string(body)} @@ -1463,7 +1450,7 @@ func (u *UI) actionDeviceConfigCandidateApply(w http.ResponseWriter, r *http.Req returnTo := strings.TrimSpace(r.FormValue("return_to")) var data PageData if returnTo == "control" || returnTo == "config" { - data = u.deviceConfigWorkspacePageData(dev) + data = u.deviceDetailPageData(dev) } else { data = u.configPreviewPageData(dev) } @@ -1488,7 +1475,7 @@ func (u *UI) actionDeviceConfigCandidateApply(w http.ResponseWriter, r *http.Req } } if returnTo == "control" || returnTo == "config" { - u.render(w, r, "device_control", data) + u.render(w, r, "device", data) return } u.render(w, r, "config_preview", data) diff --git a/internal/web/ui/templates/config_preview.html b/internal/web/ui/templates/config_preview.html index 37aaada..e48dc2c 100644 --- a/internal/web/ui/templates/config_preview.html +++ b/internal/web/ui/templates/config_preview.html @@ -47,7 +47,7 @@ {{end}} - 返回设备控制 + 返回设备详情 diff --git a/internal/web/ui/templates/device.html b/internal/web/ui/templates/device.html index ca329f3..6853ef9 100644 --- a/internal/web/ui/templates/device.html +++ b/internal/web/ui/templates/device.html @@ -1,28 +1,60 @@ {{define "device"}} {{template "device_header" .}} -{{template "device_tabs" .}} -
{{.RawText}}{{end}}
+ | 设备 | 状态 | 管理地址 | 服务状态 | 配置操作 | 服务管理 |
|---|---|---|---|---|---|
| {{if .DeviceName}}{{.DeviceName}}{{else}}{{.DeviceID}}{{end}} {{.DeviceID}} |
- {{if .Online}}在线{{else}}离线{{end}} | -{{.IP}}:{{.AgentPort}} | -- - | -- - - - | -
-
-
-
-
-
-
-
- |
-
| 暂无设备。请先在“新增设备”页扫描或手动添加。 | |||||