import { useCallback, useEffect, useRef, useState } from "react"; import { formatCoin, formatPercent } from "../utils/format.js"; const MODAL_TRANSITION_MS = 180; export function LuckyGiftPoolModal({ items, onClose }) { const [closing, setClosing] = useState(false); const closeTimerRef = useRef(null); const totals = items.reduce((summary, item) => ({ payout: summary.payout + item.payout, profit: summary.profit + item.profit, turnover: summary.turnover + item.turnover }), { payout: 0, profit: 0, turnover: 0 }); const requestClose = useCallback(() => { if (closing) { return; } setClosing(true); closeTimerRef.current = window.setTimeout(onClose, MODAL_TRANSITION_MS); }, [closing, onClose]); useEffect(() => () => { if (closeTimerRef.current) { window.clearTimeout(closeTimerRef.current); } }, []); useEffect(() => { const closeOnEscape = (event) => { if (event.key === "Escape") { requestClose(); } }; window.addEventListener("keydown", closeOnEscape); return () => window.removeEventListener("keydown", closeOnEscape); }, [requestClose]); return (
{ if (event.target === event.currentTarget) { requestClose(); } }} >

幸运礼物奖池明细

按 pool_id 汇总流水、返奖和利润
{items.length ? items.map((item, index) => ( )) : ( )}
# Pool ID 流水(金币) 返奖(金币) 利润(金币) 返奖率 利润率
{index + 1} {item.pool_id} {formatCoin(item.turnover)} {formatCoin(item.payout)} {formatCoin(item.profit)} {formatPercent(item.payout_rate)} {formatPercent(item.profit_rate)}
暂无 pool 数据
); } function PoolSummary({ label, tone = "", value }) { return (
{label} {formatCoin(value)} 金币
); }