import Dialog from "@mui/material/Dialog"; import DialogActions from "@mui/material/DialogActions"; import DialogContent from "@mui/material/DialogContent"; import DialogTitle from "@mui/material/DialogTitle"; import RefreshOutlined from "@mui/icons-material/RefreshOutlined"; import TextField from "@mui/material/TextField"; import { LuckyGiftConfigDrawer } from "@/features/lucky-gift/components/LuckyGiftConfigDrawer.jsx"; import { LuckyGiftConfigSummary } from "@/features/lucky-gift/components/LuckyGiftConfigSummary.jsx"; import { LuckyGiftSimulationPanel } from "@/features/lucky-gift/components/LuckyGiftSimulationPanel.jsx"; import { drawStatusOptions } from "@/features/lucky-gift/constants.js"; import { useLuckyGiftPage } from "@/features/lucky-gift/hooks/useLuckyGiftPage.js"; import styles from "@/features/lucky-gift/lucky-gift.module.css"; import { AdminFilterResetButton, AdminFilterSelect, AdminListPage } from "@/shared/ui/AdminListLayout.jsx"; import { Button } from "@/shared/ui/Button.jsx"; export function LuckyGiftConfigPage() { const page = useLuckyGiftPage(); return ( ); } function LuckyGiftDrawSummaryPanel({ page }) { const summary = page.drawSummary || {}; const netSpent = Number(summary.totalSpentCoins || 0) - Number(summary.totalRewardCoins || 0); const stats = [ { hint: `房间 ${formatNumber(summary.uniqueRooms)}`, label: "参与用户", value: formatNumber(summary.uniqueUsers), }, { hint: `成功 ${formatNumber(summary.grantedDraws)} / 待发放 ${formatNumber(summary.pendingDraws)} / 失败 ${formatNumber(summary.failedDraws)}`, label: "抽奖次数", value: formatNumber(summary.totalDraws), }, { hint: `目标 ${formatPPM(page.config?.targetRTPPPM)}`, label: "实际 RTP", value: formatPPM(summary.actualRTPPPM), }, { hint: `净消耗 ${formatNumber(netSpent)}`, label: "消耗金币", value: formatNumber(summary.totalSpentCoins), }, { hint: `基础 ${formatNumber(summary.baseRewardCoins)}`, label: "返还金币", value: formatNumber(summary.totalRewardCoins), }, { hint: `房间 ${formatNumber(summary.roomAtmosphereRewardCoins)} / 活动 ${formatNumber(summary.activitySubsidyCoins)}`, label: "额外预算", value: formatNumber( Number(summary.roomAtmosphereRewardCoins || 0) + Number(summary.activitySubsidyCoins || 0), ), }, ]; return ( 抽奖数据概览 奖池 {summary.poolId || page.poolId} } onClick={page.reloadDrawSummary} > 刷新 page.changeGiftId(event.target.value)} /> page.changeUserId(event.target.value)} /> page.changeRoomId(event.target.value)} /> {page.drawSummaryError ? ( {page.drawSummaryError} } onClick={page.reloadDrawSummary}> 重试 ) : ( {stats.map((item) => ( {item.label} {page.drawSummaryLoading ? "-" : item.value} {page.drawSummaryLoading ? "" : item.hint} ))} )} ); } function AddPoolDialog({ disabled, onChange, onClose, onSubmit, open, value }) { return ( 添加奖池 onChange(event.target.value)} /> 取消 添加并编辑 ); } function formatPPM(value) { return `${(Number(value || 0) / 10_000).toFixed(2).replace(/\.?0+$/, "")}%`; } function formatNumber(value) { return new Intl.NumberFormat("zh-CN").format(Number(value || 0)); }