diff --git a/internal/service/config_assets.go b/internal/service/config_assets.go index b616792..b8994a6 100644 --- a/internal/service/config_assets.go +++ b/internal/service/config_assets.go @@ -878,6 +878,13 @@ func (s *ConfigPreviewService) SaveVideoSourceAsset(asset ConfigVideoSourceAsset return nil } +func (s *ConfigPreviewService) DeleteVideoSourceByID(id int) error { + if s == nil || s.assets == nil { + return fmt.Errorf("基础配置仓库未初始化") + } + return s.assets.DeleteVideoSourceByID(id) +} + func (s *ConfigPreviewService) DeleteVideoSource(name string) error { if s == nil || s.assets == nil { return fmt.Errorf("基础配置仓库未初始化") diff --git a/internal/storage/assets_repo.go b/internal/storage/assets_repo.go index 6f75603..e285ca3 100644 --- a/internal/storage/assets_repo.go +++ b/internal/storage/assets_repo.go @@ -392,6 +392,14 @@ func (r *AssetsRepo) DeleteIntegrationService(name string) error { return err } +func (r *AssetsRepo) DeleteVideoSourceByID(id int) error { + if r == nil || r.db == nil { + return nil + } + _, err := r.db.Exec(`DELETE FROM video_sources WHERE id = ?`, id) + return err +} + func (r *AssetsRepo) DeleteVideoSource(name string) error { if r == nil || r.db == nil { return nil diff --git a/internal/web/ui.go b/internal/web/ui.go index 5bbdcdd..39c8ce9 100644 --- a/internal/web/ui.go +++ b/internal/web/ui.go @@ -791,7 +791,7 @@ func (u *UI) Routes() (chi.Router, error) { r.Get("/assets/video-sources/template", u.actionVideoSourceCSVTemplate) r.Post("/assets/video-sources/import", u.actionVideoSourceCSVImport) r.Post("/assets/video-sources", u.actionAssetVideoSourceSave) - r.Post("/assets/video-sources/{name}/delete", u.actionAssetVideoSourceDelete) + r.Post("/assets/video-sources/{id}/delete", u.actionAssetVideoSourceDelete) r.Get("/assets/templates", u.pageAssetTemplates) r.Post("/assets/templates/create", u.actionAssetTemplateCreate) r.Post("/assets/templates/{name}/clone", u.actionAssetTemplateClone) @@ -3769,12 +3769,14 @@ func (u *UI) actionAssetVideoSourceDelete(w http.ResponseWriter, r *http.Request http.Error(w, "config preview service is not configured", http.StatusInternalServerError) return } - name := chi.URLParam(r, "name") - if decoded, err := url.PathUnescape(name); err == nil { - name = decoded + idStr := chi.URLParam(r, "id") + id, err := strconv.Atoi(idStr) + if err != nil { + http.Redirect(w, r, "/assets/video-sources?error="+urlQueryEscape("无效的ID"), http.StatusFound) + return } - if err := u.preview.DeleteVideoSource(name); err != nil { - http.Redirect(w, r, "/assets/video-sources?error="+urlQueryEscape(err.Error())+"&name="+url.PathEscape(name), http.StatusFound) + if err := u.preview.DeleteVideoSourceByID(id); err != nil { + http.Redirect(w, r, "/assets/video-sources?error="+urlQueryEscape(err.Error()), http.StatusFound) return } http.Redirect(w, r, "/assets/video-sources?msg="+urlQueryEscape("视频源已删除"), http.StatusFound) diff --git a/internal/web/ui/templates/assets.html b/internal/web/ui/templates/assets.html index 5f81df5..4637149 100644 --- a/internal/web/ui/templates/assets.html +++ b/internal/web/ui/templates/assets.html @@ -190,7 +190,7 @@ toggleIntegrationFields('{{.AssetIntegration.Type}}'); {{icon "apply"}}新增视频源 {{if .AssetVideoSource}}{{if .AssetVideoSource.Name}} {{icon "edit"}}编辑 -
{{end}}{{end}} diff --git a/safesightd-linux-arm64 b/safesightd-linux-arm64 index 2b43734..365523e 100644 Binary files a/safesightd-linux-arm64 and b/safesightd-linux-arm64 differ