"use client"; import { formatNumberToKMB } from "@/lib/utils"; import Image from "next/image"; import { AiChatRankOutput, AiHeartbeatRankOutput, AiGiftRankOutput } from "@/services/home/types"; import { RankType } from "@/types/global"; import Link from "next/link"; interface SmallRankCardProps { item: AiChatRankOutput | AiHeartbeatRankOutput | AiGiftRankOutput; rankType: RankType; rank?: number; // 用于显示排名,如果不传则使用item.rankNo } export default function SmallRankCard({ item, rankType, rank, }: SmallRankCardProps) { // 根据排行榜类型获取对应的数值显示 const getDisplayValue = () => { switch (rankType) { case RankType.CHAT: return formatNumberToKMB((item as AiChatRankOutput).chatNum || 0); case RankType.CRUSH: return `${(item as AiHeartbeatRankOutput).heartbeatValTotal || 0}℃`; case RankType.GIFTS: return formatNumberToKMB(Math.floor(((item as AiGiftRankOutput).giftCoinNum || 0) / 100)); default: return "0"; } }; // 根据排行榜类型获取对应的图标 const getIcon = () => { switch (rankType) { case RankType.CHAT: return ; case RankType.CRUSH: return ; case RankType.GIFTS: return ; default: return ; } }; if (!item) { return
; } const imageUrl = item.homeImageUrl || ""; const rankNo = rank || item.rankNo || 1; return (
{getIcon()}
{getDisplayValue()}
{rankNo === 2 ? "2nd" : "3rd"}
); }