package configser import ( "fmt" "html/template" "net/url" "strings" "videoweb/app/service/upstream" "videoweb/pub/common/log" "github.com/gin-gonic/gin" ) const richtextListPath = "/api/app/config/richtext/list" // RichTextPageVM 富文本页模板数据。 type RichTextPageVM struct { Title string Subtitle string ContentHTML template.HTML Found bool } // FetchRichTextList 查询富文本列表(ids / titles 逗号分隔)。 func FetchRichTextList(c *gin.Context, ids, titles string) ([]AppRichTextItemResp, error) { params := url.Values{} if s := strings.TrimSpace(ids); s != "" { params.Set("ids", s) } if s := strings.TrimSpace(titles); s != "" { params.Set("titles", s) } path := richtextListPath if q := params.Encode(); q != "" { path += "?" + q } var env APIEnvelope[AppRichTextListResp] if err := upstream.GetPublicJSON(c, path, &env); err != nil { return nil, err } if env.Code != 200 { return nil, fmt.Errorf("richtext list code=%d msg=%s", env.Code, env.Msg) } return env.Data.List, nil } // FetchRichTextByTitle 按标题取第一条启用内容;失败返回空页 VM。 func FetchRichTextByTitle(c *gin.Context, title string) RichTextPageVM { title = strings.TrimSpace(title) vm := RichTextPageVM{Title: title} if title == "" { return vm } list, err := FetchRichTextList(c, "", title) if err != nil { log.Error("fetch richtext by title failed", log.E(err), log.Any("title", title)) return vm } item := matchRichTextByTitle(list, title) if item == nil { return vm } displayTitle := strings.TrimSpace(item.Desc) if displayTitle == "" { displayTitle = strings.TrimSpace(item.Title) } if displayTitle == "" { displayTitle = title } vm.Found = true vm.Title = displayTitle vm.Subtitle = strings.TrimSpace(item.Desc) if vm.Subtitle == displayTitle { vm.Subtitle = "" } vm.ContentHTML = template.HTML(item.Content) return vm } func matchRichTextByTitle(list []AppRichTextItemResp, title string) *AppRichTextItemResp { if len(list) == 0 { return nil } for i := range list { if strings.TrimSpace(list[i].Title) == title || strings.TrimSpace(list[i].Desc) == title { return &list[i] } } return &list[0] } // RichTextHref 页脚导航跳转一律进入富文本页。 func RichTextHref(title string) string { title = strings.TrimSpace(title) if title == "" { return "/richtext/" } return "/richtext/" + title + "/" }