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