import ReplayOutlined from "@mui/icons-material/ReplayOutlined";
import { RoomTurnoverRewardConfigDrawer } from "@/features/room-turnover-reward/components/RoomTurnoverRewardConfigDrawer.jsx";
import { RoomTurnoverRewardConfigSummary } from "@/features/room-turnover-reward/components/RoomTurnoverRewardConfigSummary.jsx";
import { useRoomTurnoverRewardPage } from "@/features/room-turnover-reward/hooks/useRoomTurnoverRewardPage.js";
import styles from "@/features/room-turnover-reward/room-turnover-reward.module.css";
import { AdminActionIconButton, 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 { TimeText } from "@/shared/ui/TimeText.jsx";
const settlementStatusOptions = [
["pending", "待发放"],
["granted", "已发放"],
["failed", "发放失败"],
];
const columnsBase = [
{
key: "room",
label: "房间",
width: "minmax(220px, 0.9fr)",
render: (item) => (
{item.roomId || "-"}
房主 {item.ownerUserId || "-"}
),
},
{
key: "period",
label: "周期",
width: "minmax(260px, 1.1fr)",
render: (item) => (
至
),
},
{
key: "coinSpent",
label: "房间流水",
width: "minmax(160px, 0.7fr)",
render: (item) => `${formatNumber(item.coinSpent)} 金币`,
},
{
key: "tier",
label: "命中档位",
width: "minmax(180px, 0.75fr)",
render: (item) => (
{item.tierCode || `档位 #${item.tierId || "-"}`}
阈值 {formatNumber(item.thresholdCoinSpent)}
),
},
{
key: "reward",
label: "奖励金币",
width: "minmax(140px, 0.65fr)",
render: (item) => formatNumber(item.rewardCoinAmount),
},
{
key: "status",
label: "状态",
width: "minmax(130px, 0.6fr)",
render: (item) => settlementStatusBadge(item.status),
},
{
key: "failure",
label: "失败原因",
width: "minmax(220px, 0.9fr)",
render: (item) => item.failureReason || "-",
},
{
key: "record",
label: "记录",
width: "minmax(280px, 1fr)",
render: (item) => (
{item.settlementId}
{item.walletTransactionId || item.walletCommandId || "-"}
),
},
{
key: "actions",
label: "操作",
width: "112px",
fixed: "right",
resizable: false,
render: (item, _index, context = {}) =>
item.status === "failed" && context.abilities?.canRetry ? (
context.retrySettlement?.(item)}
>
) : (
"-"
),
},
];
export function RoomTurnoverRewardPage() {
const page = useRoomTurnoverRewardPage();
const total = page.settlements.total || 0;
const columns = columnsBase.map((column) => {
if (column.key === "room") {
return {
...column,
filter: createTextColumnFilter({
placeholder: "搜索房间 ID",
value: page.query,
onChange: page.changeQuery,
}),
};
}
if (column.key === "status") {
return {
...column,
filter: createOptionsColumnFilter({
options: [["", "全部状态"], ...settlementStatusOptions],
placeholder: "搜索状态",
value: page.status,
onChange: page.changeStatus,
}),
};
}
return column;
});
return (
0
? {
page: page.page,
pageSize: page.settlements.pageSize || 50,
total,
onPageChange: page.setPage,
}
: undefined
}
rowKey={(item) => item.settlementId}
/>
);
}
function settlementStatusBadge(status) {
const label = settlementStatusOptions.find(([value]) => value === status)?.[1] || status || "-";
const className =
status === "granted"
? styles.statusActive
: status === "failed"
? styles.statusFailed
: styles.statusInactive;
return {label};
}
function formatNumber(value) {
return new Intl.NumberFormat("zh-CN").format(Number(value || 0));
}