-
-
setDraftDrawNo(e.target.value)}
- placeholder={t("placeholderDrawNo")}
- className="font-mono"
- />
+
+
+
+ {t("batchList")}
-
-
-
+
+
+
+ setDraftDrawNo(e.target.value)}
+ placeholder={t("placeholderDrawNo")}
+ className="w-full font-mono sm:w-[18rem] xl:w-[20rem]"
+ />
+
+
+
+
+
+
-
-
-
-
-
-
- {t("batchList")}
-
+
{error ? {error}
: null}
{loading && !data ? (
{t("states.loading", { ns: "common" })}
) : (
-
-
-
- ID
- {t("drawNo")}
- {t("version", { ns: "draws", version: "" }).replace(" v", "").trim()}
- {t("reviewStatus")}
- {t("status")}
- {t("ticketCount")}
- {t("winCount")}
- {t("payoutTotal")}
- {t("jackpot")}
- {t("finishedAt")}
-
-
-
-
- {(data?.items ?? []).map((row: AdminSettlementBatchRow) => (
-
- {row.id}
- {row.draw_no ?? "—"}
- v{row.settle_version}
-
- {row.review_status ?? "—"}
-
-
-
+
+
+
+ ID
+ {t("drawNo")}
+ {t("totalBet")}
+ {t("actualDeduct")}
+ {t("payoutTotal")}
+ {t("platformProfit")}
+ {t("reviewStatus")}
+ {t("status")}
+
+
+
+
+ {(data?.items ?? []).map((row: AdminSettlementBatchRow) => (
+
+ {row.id}
+ {row.draw_no ?? "—"}
+
+ {formatAdminMinorUnits(row.total_bet_amount)}
+
+
+ {formatAdminMinorUnits(row.total_actual_deduct)}
+
+
+ {formatAdminMinorUnits(row.total_payout_amount)}
+
+
- {row.status}
-
-
- {row.total_ticket_count}
- {row.total_win_count}
-
- {formatAdminMinorUnits(row.total_payout_amount)}
-
-
- {formatAdminMinorUnits(row.total_jackpot_payout_amount)}
-
-
- {formatDt(row.finished_at ?? row.started_at)}
-
-
-
-
+
{row.review_status ?? "—"}
+
+
- {t("details")}
-
-
-
-
-
-
-
-
- ))}
-
-
+ {settlementStatusText(row.status, t)}
+
+
+
+
+
+ {t("details")}
+
+
+
+
+
+
+
+ ))}
+
+
+
)}
{data ? (
+
);
}
diff --git a/src/modules/tickets/player-tickets-console.tsx b/src/modules/tickets/player-tickets-console.tsx
index b627d79..71b22c5 100644
--- a/src/modules/tickets/player-tickets-console.tsx
+++ b/src/modules/tickets/player-tickets-console.tsx
@@ -5,6 +5,7 @@ import { useTranslation } from "react-i18next";
import { getAdminPlayerTicketItems } from "@/api/admin-player-tickets";
import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer";
+import { AdminTableExportButton } from "@/components/admin/admin-table-export-button";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
@@ -75,36 +76,43 @@ export function PlayerTicketsConsole(): React.ReactElement {
};
return (
-
-
- {t("playerTicketQuery")}
+
+
+ {t("playerTicketQuery")}
-
-
-
-
+
+
+
+
setPlayerIdDraft(e.target.value)}
/>
-
-
+
+
setDrawNoDraft(e.target.value)}
/>
-
+
+
+
+
{err ?
{err}
: null}
@@ -114,8 +122,8 @@ export function PlayerTicketsConsole(): React.ReactElement {
{data ? (
<>
-
-
+
+
{t("ticketNo")}
diff --git a/src/modules/wallet/wallet-console.tsx b/src/modules/wallet/wallet-console.tsx
index ca9d657..e995abd 100644
--- a/src/modules/wallet/wallet-console.tsx
+++ b/src/modules/wallet/wallet-console.tsx
@@ -14,6 +14,7 @@ import {
} from "@/api/admin-wallet";
import { AdminDateRangeField } from "@/components/admin/admin-date-range-field";
import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer";
+import { AdminTableExportButton } from "@/components/admin/admin-table-export-button";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
@@ -410,6 +411,11 @@ export function TransferOrdersPanel(): React.ReactElement {
+
@@ -429,7 +435,7 @@ export function TransferOrdersPanel(): React.ReactElement {
{data ? (
<>
-
+
{t("localTransferNo")}
@@ -729,6 +735,11 @@ export function WalletTxnsPanel(): React.ReactElement {
+
@@ -748,7 +759,7 @@ export function WalletTxnsPanel(): React.ReactElement {
{data ? (
<>
-
+
{t("txnNo")}
@@ -868,6 +879,11 @@ export function PlayerWalletPanel(): React.ReactElement {
className="w-40"
/>
+
@@ -879,7 +895,7 @@ export function PlayerWalletPanel(): React.ReactElement {
{t("sitePlayer")}{" "}
{result.player.site_code}:{result.player.site_player_id}
-
+
{t("walletType")}
diff --git a/src/types/api/admin-settlement.ts b/src/types/api/admin-settlement.ts
index f1cfffd..62d9ef7 100644
--- a/src/types/api/admin-settlement.ts
+++ b/src/types/api/admin-settlement.ts
@@ -10,8 +10,11 @@ export type AdminSettlementBatchRow = {
paid_at: string | null;
total_ticket_count: number;
total_win_count: number;
+ total_bet_amount: number;
+ total_actual_deduct: number;
total_payout_amount: number;
total_jackpot_payout_amount: number;
+ platform_profit: number;
started_at: string | null;
finished_at: string | null;
created_at: string | null;
@@ -44,8 +47,11 @@ export type AdminSettlementBatchShowData = {
paid_at: string | null;
total_ticket_count: number;
total_win_count: number;
+ total_bet_amount: number;
+ total_actual_deduct: number;
total_payout_amount: number;
total_jackpot_payout_amount: number;
+ platform_profit: number;
started_at: string | null;
finished_at: string | null;
created_at: string | null;