import Avatar from "@mui/material/Avatar"; import { CumulativeRechargeRewardConfigDrawer } from "@/features/cumulative-recharge-reward/components/CumulativeRechargeRewardConfigDrawer.jsx"; import { CumulativeRechargeRewardConfigSummary } from "@/features/cumulative-recharge-reward/components/CumulativeRechargeRewardConfigSummary.jsx"; import { useCumulativeRechargeRewardPage } from "@/features/cumulative-recharge-reward/hooks/useCumulativeRechargeRewardPage.js"; import styles from "@/features/cumulative-recharge-reward/cumulative-recharge-reward.module.css"; import { AdminListBody, AdminListPage } from "@/shared/ui/AdminListLayout.jsx"; import { DataState } from "@/shared/ui/DataState.jsx"; import { DataTable } from "@/shared/ui/DataTable.jsx"; import { createOptionsColumnFilter, createTextColumnFilter } from "@/shared/ui/tableFilters.js"; import { formatMillis } from "@/shared/utils/time.js"; const grantStatusOptions = [ ["pending", "发放中"], ["granted", "已发放"], ["failed", "发放失败"], ]; const columnsBase = [ { key: "user", label: "用户信息", width: "minmax(260px, 1.1fr)", render: (grant) => , }, { key: "cycle", label: "周期", width: "minmax(150px, 0.7fr)", render: (grant) => grant.cycleKey || "-", }, { key: "tier", label: "命中档位", width: "minmax(190px, 0.85fr)", render: (grant) => (
{grant.tierCode || "-"} {formatUSD(grant.thresholdUsdMinor)}
), }, { key: "amount", label: "累计 / 本次", width: "minmax(210px, 0.9fr)", render: (grant) => (
{formatUSD(grant.reachedUsdMinor)} 本次 {formatUSD(grant.qualifyingUsdMinor)}
), }, { key: "source", label: "来源", width: "minmax(190px, 0.85fr)", render: (grant) => (
{grant.rechargeType || "-"} {grant.rechargeCoinAmount ? `${formatNumber(grant.rechargeCoinAmount)} 金币` : "-"}
), }, { key: "status", label: "状态", width: "minmax(120px, 0.55fr)", render: (grant) => grantStatusLabel(grant.status), }, { key: "createdAt", label: "创建时间", width: "minmax(180px, 0.85fr)", render: (grant) => formatMillis(grant.createdAtMs), }, { key: "grantId", label: "记录", width: "minmax(280px, 1fr)", render: (grant) => (
{grant.grantId} {grant.transactionId || grant.eventId || "-"}
), }, { key: "failure", label: "失败原因", width: "minmax(180px, 0.85fr)", render: (grant) => grant.failureReason || "-", }, ]; export function CumulativeRechargeRewardPage() { const page = useCumulativeRechargeRewardPage(); const total = page.grants.total || 0; const columns = columnsBase.map((column) => { if (column.key === "user") { return { ...column, filter: createTextColumnFilter({ placeholder: "搜索用户 ID、短号、名称", value: page.query, onChange: page.changeQuery, }), }; } if (column.key === "cycle") { return { ...column, filter: createTextColumnFilter({ placeholder: "周期,如 2026-W23", value: page.cycleKey, onChange: page.changeCycleKey, }), }; } if (column.key === "status") { return { ...column, filter: createOptionsColumnFilter({ options: [["", "全部状态"], ...grantStatusOptions], placeholder: "搜索状态", value: page.status, onChange: page.changeStatus, }), }; } return column; }); return ( 0 ? { page: page.page, pageSize: page.grants.pageSize || 50, total, onPageChange: page.setPage, } : undefined } rowKey={(grant) => grant.grantId} /> ); } function GrantUser({ grant }) { const user = grant.user || {}; return (
{user.username || `用户 ${grant.userId}`} {user.displayUserId ? `短号 ${user.displayUserId}` : `ID ${grant.userId}`}
); } function grantStatusLabel(status) { return grantStatusOptions.find(([value]) => value === status)?.[1] || status || "-"; } function formatUSD(value) { return `$${(Number(value || 0) / 100).toFixed(2)}`; } function formatNumber(value) { return new Intl.NumberFormat("zh-CN").format(Number(value || 0)); }