diff --git a/internal/service/auto_config.go b/internal/service/auto_config.go index ca40b8e..ee10765 100644 --- a/internal/service/auto_config.go +++ b/internal/service/auto_config.go @@ -306,8 +306,9 @@ func (r *FeatureRegistry) ValidateFeatureKeys(keys []string) error { // AutoConfigRequest is a single device's configuration intent from the console. type AutoConfigRequest struct { DeviceID string `json:"device_id"` - Features []string `json:"features"` // feature keys: "face", "shoe", ... - SourceNames []string `json:"source_names"` // assigned video source names + Features []string `json:"features"` + SourceNames []string `json:"source_names"` + Overlays []string `json:"overlays,omitempty"` } // AutoConfigResult reports what happened for a single device. @@ -470,7 +471,7 @@ func (s *AutoConfigService) BuildPipeline(req AutoConfigRequest, deploy bool) (* } if !deploy { - preview, err := s.preview.RenderDeviceAssignment(req.DeviceID) + preview, err := s.preview.RenderDeviceAssignment(req.DeviceID, req.Overlays) if err != nil { result.Error = fmt.Sprintf("配置渲染失败: %v", err) return result, fmt.Errorf(result.Error) diff --git a/internal/service/config_preview.go b/internal/service/config_preview.go index a4a9c9e..b966063 100644 --- a/internal/service/config_preview.go +++ b/internal/service/config_preview.go @@ -212,7 +212,7 @@ func (s *ConfigPreviewService) BuildProfileEditorForDeviceAssignment(deviceID st return editor, assignment, nil } -func (s *ConfigPreviewService) RenderDeviceAssignment(deviceID string) (*ConfigPreviewResult, error) { +func (s *ConfigPreviewService) RenderDeviceAssignment(deviceID string, overlays ...[]string) (*ConfigPreviewResult, error) { editor, assignment, err := s.BuildProfileEditorForDeviceAssignment(deviceID) if err != nil { return nil, err @@ -224,28 +224,20 @@ func (s *ConfigPreviewService) RenderDeviceAssignment(deviceID string) (*ConfigP if strings.TrimSpace(templateName) == "" { templateName = editor.RawTemplateName() } + var ol []string + if len(overlays) > 0 { + ol = overlays[0] + } return s.RenderProfileEditor(*editor, ConfigPreviewRequest{ Template: templateName, Profile: assignment.ProfileName, ConfigID: "assignment_" + deviceID, ConfigVersion: time.Now().Format("20060102.150405"), DeviceID: deviceID, - Overlays: s.listAutoOverlays(), + Overlays: ol, }) } -func (s *ConfigPreviewService) listAutoOverlays() []string { - // Auto-apply overlays whose name starts with "production_" - var out []string - overlays, _ := s.assets.ListOverlays() - for _, o := range overlays { - if strings.HasPrefix(o.Name, "production_") { - out = append(out, o.Name) - } - } - return out -} - func profileOverlayNames(raw map[string]any) []string { items, _ := raw["overlays"].([]any) if len(items) == 0 { diff --git a/internal/web/ui.go b/internal/web/ui.go index 708c182..ec207ae 100644 --- a/internal/web/ui.go +++ b/internal/web/ui.go @@ -1200,6 +1200,14 @@ func (u *UI) pageConsole(w http.ResponseWriter, r *http.Request) { } // Build console device data + var allOverlays []ConsoleOverlay + if u.preview != nil { + if overlays, err := u.preview.ListOverlayAssets(); err == nil { + for _, o := range overlays { + allOverlays = append(allOverlays, ConsoleOverlay{Name: o.Name, Description: o.Description}) + } + } + } var consoleDevices []ConsoleDeviceData for _, dev := range devices { if dev == nil { @@ -1275,6 +1283,7 @@ func (u *UI) pageConsole(w http.ResponseWriter, r *http.Request) { MaxUnits: maxUnits, Channels: channels, Features: features, + Overlays: allOverlays, Cameras: cameras, }) } @@ -1369,6 +1378,7 @@ func (u *UI) actionConsoleSave(w http.ResponseWriter, r *http.Request) { DeviceID: dev.DeviceID, Features: features, SourceNames: sources, + Overlays: cleanFormList(r.Form["device_"+dev.DeviceID+"_overlay"]), }) } @@ -6178,11 +6188,18 @@ type ConsoleDeviceData struct { MaxUnits int Channels []ConsoleChannel Features []ConsoleFeature + Overlays []ConsoleOverlay Cameras []string Busy bool BusyMsg string } +type ConsoleOverlay struct { + Name string + Description string + Enabled bool +} + type ConsoleChannel struct { Name string Display string diff --git a/internal/web/ui/templates/console.html b/internal/web/ui/templates/console.html index 229ac60..4281b3a 100644 --- a/internal/web/ui/templates/console.html +++ b/internal/web/ui/templates/console.html @@ -68,6 +68,19 @@ {{end}} + {{if $cd.Overlays}} +
| + | {{$o.Name}} | +