diff --git a/internal/web/ui.go b/internal/web/ui.go index 9b963b5..1cdfe33 100644 --- a/internal/web/ui.go +++ b/internal/web/ui.go @@ -1595,21 +1595,21 @@ func (u *UI) actionDevicesCleanupOffline(w http.ResponseWriter, r *http.Request) continue } dev := deviceMap[id] - if dev == nil || dev.Online { - continue // only clean offline devices + if dev != nil && dev.Online { + continue // skip online devices } if strings.TrimSpace(u.dbPath) != "" { if store, err := storage.OpenSQLite(u.dbPath); err == nil { db := store.DB() - db.Exec("DELETE FROM device_assignments WHERE device_id = ?", dev.DeviceID) - db.Exec("DELETE FROM device_config_state WHERE device_id = ?", dev.DeviceID) - db.Exec("DELETE FROM device_features WHERE device_id = ?", dev.DeviceID) - db.Exec("DELETE FROM config_versions WHERE device_id = ?", dev.DeviceID) - db.Exec("DELETE FROM devices WHERE device_id = ?", dev.DeviceID) + db.Exec("DELETE FROM device_assignments WHERE device_id = ?", id) + db.Exec("DELETE FROM device_config_state WHERE device_id = ?", id) + db.Exec("DELETE FROM device_features WHERE device_id = ?", id) + db.Exec("DELETE FROM config_versions WHERE device_id = ?", id) + db.Exec("DELETE FROM devices WHERE device_id = ?", id) store.Close() + deleted++ } } - deleted++ } http.Redirect(w, r, "/devices?msg="+urlQueryEscape(fmt.Sprintf("已清理 %d 台离线设备", deleted)), http.StatusFound) } @@ -1688,6 +1688,11 @@ func (u *UI) actionDiscoverySearch(w http.ResponseWriter, r *http.Request) { func (u *UI) actionDevicesBatchAction(w http.ResponseWriter, r *http.Request) { _ = r.ParseForm() action := strings.TrimSpace(r.FormValue("action")) + // cleanup_offline handles device IDs directly (may include DB-only offline devices) + if action == "cleanup_offline" { + u.actionDevicesCleanupOffline(w, r) + return + } deviceIDs := filterSelectedDeviceIDs(u.registry.GetDevices(), r.Form["device_id"]) if len(deviceIDs) == 0 { u.render(w, r, "devices", u.deviceOverviewPageData(r, nil, "请先选择设备")) diff --git a/internal/web/ui/templates/devices.html b/internal/web/ui/templates/devices.html index 945832d..cac436a 100644 --- a/internal/web/ui/templates/devices.html +++ b/internal/web/ui/templates/devices.html @@ -43,15 +43,14 @@ + {{$allOffline := true}}{{range .SelectedDevices}}{{if .Online}}{{$allOffline = false}}{{end}}{{end}} + {{if $allOffline}} + + {{end}} 下发设备分配 清空选择 - {{$allOffline := true}}{{range .SelectedDevices}}{{if .Online}}{{$allOffline = false}}{{end}}{{end}} -