import RefreshOutlined from "@mui/icons-material/RefreshOutlined"; import Button from "@mui/material/Button"; import MenuItem from "@mui/material/MenuItem"; import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; import TableCell from "@mui/material/TableCell"; import TableContainer from "@mui/material/TableContainer"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import TextField from "@mui/material/TextField"; import { TimeRangeFilter } from "@/shared/ui/TimeRangeFilter.jsx"; import { formatAmount, formatMicroMoney, formatTime, formatUsdMinor, formatPercent, rechargeTypeLabel, } from "../format.js"; export function FinanceRechargeDetailList({ bills, error, filters, loading, onFiltersChange, onReload, options }) { const items = bills.items || []; const page = Number(bills.page || filters.page || 1); const pageSize = Number(bills.pageSize || 50); const total = Number(bills.total || 0); const hasNextPage = page * pageSize < total; return (
onFiltersChange({ appCode: event.target.value })} > 全部 APP {options.apps.map((app) => ( {app.appName || app.appCode} ))} onFiltersChange({ timeRange })} /> onFiltersChange({ keyword: event.target.value })} />
{error ?
{error}
: null} {loading && !items.length ?
: null} {!loading || items.length ? ( APP 充值总额 充值来源 充值订单号 美金换算 账单金额 用户实付 三方税率扣款 充值时间 {items.length ? ( items.map((item) => ( {appName(item, options.apps)} {coinText(item.coinAmount)} {rechargeTypeLabel(item.rechargeType)} {exchangeText(item)} {billAmountText(item)} {userPaidText(item)} {taxDeductionText(item)} {formatTime(item.createdAtMs)} )) ) : ( 当前无数据 )}
) : null} {total > pageSize ? (
第 {page} 页 / 共 {total} 条
) : null}
); } function Stacked({ primary, secondary }) { return ( {primary || "-"} {secondary || ""} ); } function appName(item, apps) { return item.appName || apps.find((app) => app.appCode === item.appCode)?.appName || item.appCode || "-"; } function secondaryOrderNo(item) { return [item.commandId, item.externalRef].filter(Boolean).join(" / "); } function coinText(value) { const text = formatAmount(value); return text === "-" ? "-" : `${text} 金币`; } function exchangeText(item) { if (hasNumber(item.exchangeCoinAmount) || hasNumber(item.exchangeUsdMinorAmount)) { return `${coinText(item.exchangeCoinAmount)} = ${formatUsdMinor(item.exchangeUsdMinorAmount, "USD")}`; } return formatUsdMinor(item.usdMinorAmount, "USD"); } function billAmountText(item) { if (item.billAmountText) { return item.billAmountText; } const amount = hasNumber(item.billAmountMinor) ? item.billAmountMinor : hasNumber(item.providerAmountMinor) ? item.providerAmountMinor : item.usdMinorAmount; return formatUsdMinor(amount, item.currencyCode || "USD"); } function userPaidText(item) { if (item.userPaidText) { return item.userPaidText; } if (hasNumber(item.userPaidAmountMinor)) { return formatUsdMinor(item.userPaidAmountMinor, item.currencyCode || "USD"); } if (hasNumber(item.providerAmountMinor)) { return formatUsdMinor(item.providerAmountMinor, item.currencyCode || "USD"); } if (hasNumber(item.userPaidAmountMicro)) { return formatMicroMoney(item.userPaidAmountMicro, item.currencyCode || "USD"); } return "-"; } function taxDeductionText(item) { const rate = formatPercent(item.taxRate); const amount = item.taxDeductionText || (hasNumber(item.taxDeductionMinor) ? formatUsdMinor(item.taxDeductionMinor, item.currencyCode || "USD") : ""); if (amount && rate) { return `${amount} / ${rate}`; } return amount || rate || "-"; } function hasNumber(value) { if (value === null || value === undefined || value === "") { return false; } return Number.isFinite(Number(value)); }