From 47655b75d20434131c80e5a04e0b69e969ea4cd2 Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Sun, 26 Jul 2026 13:42:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=B9=E9=87=8F=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=A0=8F=E6=B7=BB=E5=8A=A0=E6=97=B6=E9=97=B4=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/service/task.go | 15 +++++++++++++++ internal/web/ui.go | 2 +- internal/web/ui/templates/devices.html | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/internal/service/task.go b/internal/service/task.go index 8202584..b370a1a 100644 --- a/internal/service/task.go +++ b/internal/service/task.go @@ -429,6 +429,21 @@ func (s *TaskService) executeOnDevice(task *models.Task, did string) { s.updateDeviceStatus(task.ID, did, models.TaskSuccess, 1.0, "") s.appendAuditLog(task, did, models.TaskSuccess, "") + case "time_sync": + nowMS := time.Now().UnixMilli() + body, _ := json.Marshal(map[string]int64{"unix_ms": nowMS}) + _, code, err := s.agent.Do("POST", dev.IP, dev.AgentPort, "/v1/time/set", body) + if err != nil { + s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, err.Error()) + return + } + if code >= 400 { + s.updateDeviceStatus(task.ID, did, models.TaskFailed, 0, fmt.Sprintf("agent error: %d", code)) + return + } + s.updateDeviceStatus(task.ID, did, models.TaskSuccess, 1.0, "") + s.appendAuditLog(task, did, models.TaskSuccess, "") + case "face_gallery_reload": _, code, err := s.agent.Do("POST", dev.IP, dev.AgentPort, "/v1/face-gallery/reload", nil) if err != nil { diff --git a/internal/web/ui.go b/internal/web/ui.go index 31de51a..238525c 100644 --- a/internal/web/ui.go +++ b/internal/web/ui.go @@ -1753,7 +1753,7 @@ func (u *UI) actionDevicesBatchAction(w http.ResponseWriter, r *http.Request) { typeStr := "" switch action { - case "media_start", "media_restart", "media_stop", "reload", "rollback": + case "media_start", "media_restart", "media_stop", "reload", "rollback", "time_sync": typeStr = action default: u.render(w, r, "devices", u.deviceOverviewPageData(r, deviceIDs, "不支持的操作: "+action)) diff --git a/internal/web/ui/templates/devices.html b/internal/web/ui/templates/devices.html index ced14da..01a497b 100644 --- a/internal/web/ui/templates/devices.html +++ b/internal/web/ui/templates/devices.html @@ -47,6 +47,10 @@ {{if $allOffline}} {{end}} + {{$drift := false}}{{range .DeviceRows}}{{if and (gt .TimeDriftSec 5) (hasString $.SelectedDeviceIDs .Device.DeviceID)}}{{$drift = true}}{{end}}{{end}} + {{if $drift}} + + {{end}} 下发设备分配 清空选择