Initial commit

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
fish03
2026-09-23 14:43:16 +07:00
co-authored by Claude Opus 5.5
commit bef9f8b4ed
663 changed files with 81305 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
package web
import (
"strings"
"videoweb/app/service/playletser"
"github.com/gin-gonic/gin"
)
// More 专题详情页 SSR:专题由路由 slug 标识;历史 /more 地址会跳转到 /topic canonical。
func More(c *gin.Context) {
q := playletser.ParseRecommendQuery(routeOrQuery(c, "page", "page"))
if slug := strings.TrimSpace(c.Param("slug")); slug != "" {
if id := playletser.ParseDetailID(slug); id > 0 {
q.ThemeID = id
} else {
q.ThemeSlug = slug
}
}
if path := c.Request.URL.Path; path == "/more" || strings.HasPrefix(path, "/more/") {
redirectCanonical(c, playletser.RecommendPagePath(q))
return
}
themes := playletser.FetchThemesOrEmpty(c, 2)
themeName := ""
for _, theme := range themes {
matchesID := q.ThemeID > 0 && theme.ID == q.ThemeID
matchesSlug := strings.TrimSpace(q.ThemeSlug) != "" && strings.EqualFold(strings.TrimSpace(theme.Slug), strings.TrimSpace(q.ThemeSlug))
if !matchesID && !matchesSlug {
continue
}
themeName = strings.TrimSpace(theme.Name)
if q.ThemeID <= 0 {
q.ThemeID = theme.ID
}
if strings.TrimSpace(theme.Slug) != "" {
q.ThemeSlug = strings.TrimSpace(theme.Slug)
}
break
}
if redirectCanonical(c, playletser.RecommendPagePath(q)) {
return
}
raw := playletser.FetchRecommendListOrEmpty(c, q)
if playletser.PageOutOfRange(q.PageNum, q.PageSize, raw.TotalCount) {
NotFound(c, "页面不存在")
return
}
hasIdentifier := q.ThemeID > 0 || strings.TrimSpace(q.ThemeSlug) != ""
if emptyScopedPage(hasIdentifier, raw.TotalCount, len(raw.List)) {
NotFound(c, "专题不存在")
return
}
title := playletser.RecommendThemeTitle(themeName, raw.SeoInfo.Title, q.ThemeID)
if queryTitle := strings.TrimSpace(c.Query("title")); queryTitle != "" {
title = queryTitle
}
heading := title
if !strings.HasSuffix(heading, "介绍") {
heading += "介绍"
}
description := strings.TrimSpace(raw.SeoInfo.Description)
if description == "" {
description = "精品高分 AI 成人短剧专题,精选高人气、高评分 AI 原创短剧,每日持续更新。涵盖多种热门剧情与角色设定,为你带来高质量、高清流畅的观影体验。"
}
data := gin.H{
"title": title,
"pageKey": "topic",
"pageName": title,
"pageTitle": title,
"topicHeading": heading,
"topicDescription": description,
"pagePath": playletser.RecommendCanonicalPath(q.ThemeID, q.ThemeSlug),
"seoInfo": raw.SeoInfo,
"list": raw.List,
"itemListOffset": (q.PageNum - 1) * q.PageSize,
"pagination": playletser.BuildRecommendPagination(q, raw.TotalCount),
}
if raw.TotalCount <= 0 || len(raw.List) == 0 {
setNoIndex(data, true)
}
HTMLOK(c, "more.html", data)
}