import { DataState } from "@/shared/ui/DataState.jsx";
import { DataTable } from "@/shared/ui/DataTable.jsx";
import {
AdminFilterResetButton,
AdminFilterSelect,
AdminListBody,
AdminListPage,
AdminListToolbar,
} from "@/shared/ui/AdminListLayout.jsx";
import { formatMillis } from "@/shared/utils/time.js";
import { useUserLeaderboardPage } from "@/features/user-leaderboard/hooks/useUserLeaderboardPage.js";
import styles from "@/features/user-leaderboard/user-leaderboard.module.css";
const boardTypeOptions = [
["sent", "用户送礼榜"],
["received", "收礼榜"],
["room", "房间礼物值榜"],
];
const periodOptions = [
["today", "今天"],
["week", "一周"],
["month", "一月"],
];
const columns = [
{
key: "rank",
label: "排名",
width: "minmax(96px, 0.45fr)",
render: (item) => #{item.rank},
},
{
key: "subject",
label: "对象",
width: "minmax(280px, 1.25fr)",
render: (item, _index, context) => ,
},
{
key: "giftValue",
label: "礼物值",
width: "minmax(150px, 0.75fr)",
render: (item) => formatNumber(item.giftValue),
},
{
key: "giftCount",
label: "礼物数量",
width: "minmax(130px, 0.65fr)",
render: (item) => formatNumber(item.giftCount),
},
{
key: "transactionCount",
label: "交易数",
width: "minmax(120px, 0.6fr)",
render: (item) => formatNumber(item.transactionCount),
},
{
key: "lastGiftAtMs",
label: "最后送礼时间",
width: "minmax(180px, 0.85fr)",
render: (item) => `${formatMillis(item.lastGiftAtMs, "UTC")} UTC`,
},
];
export function UserLeaderboardPage() {
const page = useUserLeaderboardPage();
const items = page.data.items || [];
const total = page.data.total || 0;
return (
>
}
/>
UTC 时间范围
{formatMillis(page.data.startAtMs, "UTC")} - {formatMillis(page.data.endAtMs, "UTC")}
{page.data.myRank ? (
当前用户排名
#{page.data.myRank.rank} · {formatNumber(page.data.myRank.giftValue)}
) : null}
0
? {
page: page.page,
pageSize: page.data.pageSize || 50,
total,
onPageChange: page.setPage,
}
: undefined
}
rowKey={(item) => `${page.boardType}-${item.userId || item.roomId || item.rank}`}
/>
);
}
function LeaderboardSubject({ item, type }) {
if (type === "room") {
const room = item.room || {};
return (
{room.title || item.roomId || "-"}
{room.roomShortId ? `短号 ${room.roomShortId}` : item.roomId || "-"}
{room.ownerUserId ? ` · 房主 ${room.ownerUserId}` : ""}
);
}
const user = item.user || {};
return (
{user.username || user.displayUserId || item.userId || "-"}
{user.displayUserId ? `短号 ${user.displayUserId}` : ""}
{item.userId ? `${user.displayUserId ? " · " : ""}ID ${item.userId}` : ""}
);
}
function formatNumber(value) {
return Number(value || 0).toLocaleString("zh-CN");
}