"use client"; import { useCallback, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { getAgentSettlementReport, type AgentSettlementReportResponse, type AgentSettlementReportType, } from "@/api/admin-agent-settlement"; import { AdminLoadingState } from "@/components/admin/admin-loading-state"; import { AgentSettlementReportView } from "@/modules/settlement/agent-settlement-report-view"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { useAdminProfile } from "@/stores/admin-session"; const ALL_REPORT_TYPES: AgentSettlementReportType[] = [ "summary", "player_win_loss", "agent_share", "rebate", "credit", "unpaid_bills", "overdue", "platform_pnl", "draw_period", ]; type AgentSettlementReportsPanelProps = { adminSiteId: number; settlementPeriodId: number | null; currencyCode: string; }; export function AgentSettlementReportsPanel({ adminSiteId, settlementPeriodId, currencyCode, }: AgentSettlementReportsPanelProps): React.ReactElement { const { t } = useTranslation(["agents", "common"]); const profile = useAdminProfile(); const reportTypes = useMemo( () => profile?.agent != null ? ALL_REPORT_TYPES.filter((type) => type !== "platform_pnl") : ALL_REPORT_TYPES, [profile?.agent], ); const [reportType, setReportType] = useState("summary"); const [response, setResponse] = useState(null); const [loading, setLoading] = useState(false); const load = useCallback(async () => { setLoading(true); try { const res = await getAgentSettlementReport({ type: reportType, settlement_period_id: settlementPeriodId ?? undefined, admin_site_id: adminSiteId, }); setResponse(res); } finally { setLoading(false); } }, [adminSiteId, reportType, settlementPeriodId]); useEffect(() => { void load(); }, [load]); const reportTypeLabel = (type: AgentSettlementReportType): string => t(`settlementReports.types.${type}`, { defaultValue: type }); return (
{settlementPeriodId === null ? (

{t("settlementReports.noPeriodHint", { defaultValue: "未选具体账期时使用近 7 日区间;平台盈亏需选择账期。", })}

) : null}

{t("settlementReports.footnote", { defaultValue: "本组报表为信用占成盘账期口径,与「佣金/回水」旧钱包报表不同。", })}

{loading ? ( ) : response ? ( ) : null}
); }