Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
package web
|
||
|
||
import (
|
||
"net/url"
|
||
"strings"
|
||
"videoweb/app/service/configser"
|
||
"videoweb/app/service/seoser"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
// Richtext 富文本页 SSR:GET /api/app/config/richtext/list?titles=
|
||
func Richtext(c *gin.Context) {
|
||
title := routeOrQuery(c, "title", "title")
|
||
target := "/richtext"
|
||
if title != "" {
|
||
target += "/" + url.PathEscape(title)
|
||
}
|
||
target += "/"
|
||
if redirectCanonical(c, target) {
|
||
return
|
||
}
|
||
renderRichtext(c, title)
|
||
}
|
||
|
||
func RichtextPage(title string) gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
page := configser.FetchRichTextByTitle(c, title)
|
||
if !page.Found {
|
||
fallbackTemplates := map[string]string{
|
||
"关于我们": "aboutUs.html",
|
||
"用户协议": "userAgreement.html",
|
||
"隐私政策": "privacyPolicy.html",
|
||
"帮助中心": "helpCenter.html",
|
||
}
|
||
if fallbackTemplate := fallbackTemplates[title]; fallbackTemplate != "" {
|
||
data := gin.H{"title": title}
|
||
applyRichtextIndexPolicy(data, title)
|
||
if title == "帮助中心" {
|
||
data["faqItems"] = []seoser.FAQItem{
|
||
{Question: "无法登录账号怎么办?", Answer: "请确认邮箱与密码是否正确;若忘记密码,可在登录页面使用“找回密码”。"},
|
||
{Question: "观看记录没有同步?", Answer: "请确认已登录同一账号并保持网络连接,记录通常会自动同步。"},
|
||
{Question: "视频无法播放或加载缓慢?", Answer: "建议切换网络、刷新页面或更新浏览器;问题持续时可提交反馈。"},
|
||
{Question: "如何管理收藏内容?", Answer: "进入个人中心的“追剧与收藏”页面,可查看或取消收藏。"},
|
||
}
|
||
}
|
||
HTMLOK(c, fallbackTemplate, data)
|
||
return
|
||
}
|
||
}
|
||
renderRichtextData(c, title, page)
|
||
}
|
||
}
|
||
|
||
func renderRichtext(c *gin.Context, title string) {
|
||
title = strings.TrimSpace(title)
|
||
page := configser.FetchRichTextByTitle(c, title)
|
||
renderRichtextData(c, title, page)
|
||
}
|
||
|
||
func renderRichtextData(c *gin.Context, title string, page configser.RichTextPageVM) {
|
||
if !page.Found {
|
||
NotFound(c, "未找到该内容")
|
||
return
|
||
}
|
||
|
||
displayTitle := page.Title
|
||
if displayTitle == "" {
|
||
displayTitle = "内容详情"
|
||
}
|
||
|
||
data := gin.H{
|
||
"title": displayTitle,
|
||
"richtext": page,
|
||
"richtextKey": title,
|
||
}
|
||
applyRichtextIndexPolicy(data, title)
|
||
HTMLOK(c, "richtext.html", data)
|
||
}
|
||
|
||
func applyRichtextIndexPolicy(data gin.H, title string) {
|
||
switch strings.TrimSpace(title) {
|
||
case "关于我们", "帮助中心":
|
||
return
|
||
default:
|
||
setNoIndex(data, true)
|
||
}
|
||
}
|