Files
fish03andClaude Opus 5.5 bef9f8b4ed Initial commit
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-23 14:43:16 +07:00

89 lines
2.2 KiB
Go

package playletser
import (
"fmt"
"strconv"
"strings"
)
func formatCollectHeat(n int64) string {
if n <= 0 {
return "0 收藏"
}
if n < 10000 {
return fmt.Sprintf("%d 收藏", n)
}
v := float64(n) / 10000
if v >= 100 {
return fmt.Sprintf("%.0f万 收藏", v)
}
return fmt.Sprintf("%.1f万 收藏", v)
}
func rankPageURL(sortOrder, pageNum int) string {
switch sortOrder {
case rankSortNew, rankSortBinge:
default:
sortOrder = rankSortHot
}
if pageNum <= 0 {
pageNum = 1
}
path := "/rank"
if sortOrder != rankSortHot {
path += "/" + strconv.Itoa(sortOrder)
}
if pageNum > 1 {
path += "/page/" + strconv.Itoa(pageNum)
}
return path + "/"
}
// BuildRankTabs 排行榜 Tab。
func BuildRankTabs(q RankQuery) []FilterChipVM {
q.Normalize()
return []FilterChipVM{
{Label: "热播榜", URL: rankPageURL(rankSortHot, 1), Active: q.SortOrder == rankSortHot},
{Label: "新剧榜", URL: rankPageURL(rankSortNew, 1), Active: q.SortOrder == rankSortNew},
{Label: "追剧榜", URL: rankPageURL(rankSortBinge, 1), Active: q.SortOrder == rankSortBinge},
}
}
// BuildRankPagination 排行榜分页。
func BuildRankPagination(q RankQuery, totalCount int64) PaginationVM {
q.Normalize()
return BuildPagination(func(p int) string {
return rankPageURL(q.SortOrder, p)
}, q.PageNum, q.PageSize, totalCount)
}
// RankCanonicalPath 返回排行榜筛选和分页对应的唯一规范路径。
func RankCanonicalPath(q RankQuery) string {
q.Normalize()
return rankPageURL(q.SortOrder, q.PageNum)
}
// RankOffset 当前页起始排名偏移(0-based)。
func RankOffset(q RankQuery) int {
q.Normalize()
return (q.PageNum - 1) * q.PageSize
}
// ParseRankQuery 从 query 解析排行榜参数。
func ParseRankQuery(pageStr, sortStr string) RankQuery {
q := RankQuery{PageSize: defaultRankPageSize, SortOrder: rankSortHot}
if n, err := strconv.Atoi(strings.TrimSpace(pageStr)); err == nil {
q.PageNum = n
}
if n, err := strconv.Atoi(strings.TrimSpace(sortStr)); err == nil {
q.SortOrder = n
}
q.Normalize()
return q
}
// IsRankBinge 是否追剧榜(热度展示用 countCollect)。
func IsRankBinge(sortOrder int) bool {
return sortOrder == rankSortBinge
}