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));
}