package web import ( "net/http" "strconv" "strings" "videoweb/app/service/playletser" "github.com/gin-gonic/gin" ) // Rank 排行榜页 SSR:GET /api/app/playlet/rank,列表用接口字段渲染。 func Rank(c *gin.Context) { sortOrder := strings.TrimSpace(c.Param("sortOrder")) if sortOrder != "" { value, err := strconv.Atoi(sortOrder) if err != nil || value < 1 || value > 3 { NotFound(c, "页面不存在") return } } if sortOrder == "" { sortOrder = strings.TrimSpace(c.Query("sortOrder")) } page := strings.TrimSpace(c.Param("page")) if page != "" { value, err := strconv.Atoi(page) if err != nil || value <= 0 { NotFound(c, "页面不存在") return } } if page == "" { page = strings.TrimSpace(c.Query("page")) } q := playletser.ParseRankQuery(page, sortOrder) if c.Query("sortOrder") != "" || c.Query("page") != "" { target := "/rank" if q.SortOrder != 1 { target += "/" + strconv.Itoa(q.SortOrder) } if q.PageNum > 1 { target += "/page/" + strconv.Itoa(q.PageNum) } target += "/" c.Redirect(http.StatusMovedPermanently, target) return } if redirectCanonical(c, playletser.RankCanonicalPath(q)) { return } raw := playletser.FetchRankOrEmpty(c, q) if playletser.PageOutOfRange(q.PageNum, q.PageSize, raw.TotalCount) { NotFound(c, "页面不存在") return } tabs := playletser.BuildRankTabs(q) seoSelections := make([]playletser.SEOSelection, 0, 1) for _, tab := range tabs { if tab.Active { seoSelections = append(seoSelections, playletser.SEOSelection{Dimension: "排行榜类型", Value: tab.Label}) break } } data := gin.H{ "title": "排行榜", "description": "黄果短剧排行榜实时更新热播短剧,查看热门榜、飙升榜,不错过高口碑必看剧集。", "navActive": "rank", "seoInfo": raw.SeoInfo, "seoSelections": seoSelections, "tabs": tabs, "list": raw.List, "rankOffset": playletser.RankOffset(q), "sortOrder": q.SortOrder, "isBinge": playletser.IsRankBinge(q.SortOrder), "pagination": playletser.BuildRankPagination(q, raw.TotalCount), } if raw.TotalCount <= 0 || len(raw.List) == 0 { setNoIndex(data, true) } HTMLOK(c, "rank.html", data) }