feat(agents, i18n): enhance agent management and settlement features with new translations and UI updates
Added new translations for agent management and settlement features in English, Nepali, and Chinese, improving multi-language support. Updated the agents console to reflect changes in funding modes and player details, enhancing user experience. Refactored the admin permission gate to include new logic for handling bound line agents, ensuring better permission management. Additionally, streamlined the UI for agent-related pages and improved navigation to the settlement center, consolidating related functionalities for better accessibility.
This commit is contained in:
115
src/modules/settlement/agent-settlement-reports-panel.tsx
Normal file
115
src/modules/settlement/agent-settlement-reports-panel.tsx
Normal file
@@ -0,0 +1,115 @@
|
||||
"use client";
|
||||
|
||||
import { useCallback, useEffect, 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";
|
||||
|
||||
const 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 [reportType, setReportType] = useState<AgentSettlementReportType>("summary");
|
||||
const [response, setResponse] = useState<AgentSettlementReportResponse | null>(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]);
|
||||
|
||||
return (
|
||||
<div className="space-y-4 rounded-lg border border-border/60 p-4">
|
||||
<div className="flex flex-wrap items-end gap-3">
|
||||
<div className="space-y-1">
|
||||
<Label>{t("settlementReports.type", { defaultValue: "报表类型" })}</Label>
|
||||
<Select
|
||||
value={reportType}
|
||||
onValueChange={(v) => setReportType(v as AgentSettlementReportType)}
|
||||
>
|
||||
<SelectTrigger className="w-52">
|
||||
<SelectValue />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{REPORT_TYPES.map((key) => (
|
||||
<SelectItem key={key} value={key}>
|
||||
{t(`settlementReports.types.${key}`, { defaultValue: key })}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
{settlementPeriodId === null ? (
|
||||
<p className="text-xs text-muted-foreground pb-1">
|
||||
{t("settlementReports.noPeriodHint", {
|
||||
defaultValue: "未选具体账期时使用近 7 日区间;平台盈亏需选择账期。",
|
||||
})}
|
||||
</p>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t("settlementReports.footnote", {
|
||||
defaultValue: "本组报表为信用占成盘账期口径,与「佣金/回水」旧钱包报表不同。",
|
||||
})}
|
||||
</p>
|
||||
|
||||
{loading ? (
|
||||
<AdminLoadingState minHeight="8rem" />
|
||||
) : response ? (
|
||||
<AgentSettlementReportView
|
||||
reportType={reportType}
|
||||
data={response.data}
|
||||
currencyCode={currencyCode}
|
||||
/>
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user