diff --git a/src/api/admin-agent-settlement.ts b/src/api/admin-agent-settlement.ts index 3865d5d..981047f 100644 --- a/src/api/admin-agent-settlement.ts +++ b/src/api/admin-agent-settlement.ts @@ -141,6 +141,8 @@ export type SettlementCreditLedgerRow = { play_code?: string | null; draw_no?: string | null; ticket_item_id?: number | null; + settlement_bill_id?: number | null; + bill_status?: string | null; }; export async function getCreditLedger(params: { @@ -202,6 +204,15 @@ export type SettlementPaymentRow = { created_at?: string; }; +export type SettlementBillPaymentRow = { + id: number; + amount: number; + status: string; + method?: string | null; + proof?: string | null; + remark?: string | null; +}; + export async function getSettlementPayments(params?: { settlement_period_id?: number; admin_site_id?: number; @@ -245,18 +256,9 @@ export type RebateAllocationRow = { allocation_rule: string; }; -export type SettlementPaymentRow = { - id: number; - amount: number; - status: string; - method?: string | null; - proof?: string | null; - remark?: string | null; -}; - export async function getSettlementBill(billId: number): Promise<{ bill: SettlementBillRow; - payments: SettlementPaymentRow[]; + payments: SettlementBillPaymentRow[]; rebate_allocations: RebateAllocationRow[]; adjustments: Array<{ id: number; amount: number; adjustment_type: string; reason: string | null }>; tier_edge?: string | null; diff --git a/src/app/admin/(shell)/admin-roles/page.tsx b/src/app/admin/(shell)/admin-roles/page.tsx index a30a8be..7b6d67f 100644 --- a/src/app/admin/(shell)/admin-roles/page.tsx +++ b/src/app/admin/(shell)/admin-roles/page.tsx @@ -1,6 +1,8 @@ import { ModuleScaffold } from "@/components/admin/module-scaffold"; +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { AdminRolesConsole } from "@/modules/admin-roles/admin-roles-console"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_ADMIN_ROLE_MANAGE } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("adminRoles", "title"); @@ -8,7 +10,9 @@ export const metadata: Metadata = buildPageMetadata("adminRoles", "title"); export default function AdminRolesPage() { return ( - + + + ); } diff --git a/src/app/admin/(shell)/admin-users/page.tsx b/src/app/admin/(shell)/admin-users/page.tsx index 97b6f67..aba0dcc 100644 --- a/src/app/admin/(shell)/admin-users/page.tsx +++ b/src/app/admin/(shell)/admin-users/page.tsx @@ -1,6 +1,8 @@ import { ModuleScaffold } from "@/components/admin/module-scaffold"; +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { AdminUsersConsole } from "@/modules/admin-users/admin-users-console"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_ADMIN_USER_MANAGE } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("adminUsers", "title"); @@ -8,7 +10,9 @@ export const metadata: Metadata = buildPageMetadata("adminUsers", "title"); export default function AdminUsersPage() { return ( - + + + ); } diff --git a/src/app/admin/(shell)/audit-logs/page.tsx b/src/app/admin/(shell)/audit-logs/page.tsx index 6b2923b..aad8014 100644 --- a/src/app/admin/(shell)/audit-logs/page.tsx +++ b/src/app/admin/(shell)/audit-logs/page.tsx @@ -1,6 +1,8 @@ import { ModuleScaffold } from "@/components/admin/module-scaffold"; +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { AuditLogsConsole } from "@/modules/audit/audit-logs-console"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_AUDIT_VIEW } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("audit", "title"); @@ -8,7 +10,9 @@ export const metadata: Metadata = buildPageMetadata("audit", "title"); export default function AdminAuditLogsPage() { return ( - + + + ); } diff --git a/src/app/admin/(shell)/config/page.tsx b/src/app/admin/(shell)/config/page.tsx index 5aabd77..2a25905 100644 --- a/src/app/admin/(shell)/config/page.tsx +++ b/src/app/admin/(shell)/config/page.tsx @@ -1,9 +1,15 @@ +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { ConfigHubScreen } from "@/modules/config/config-hub-screen"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_CONFIG_HUB_ACCESS_ANY } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("config", "hub.title"); export default function AdminConfigHubPage() { - return ; + return ( + + + + ); } diff --git a/src/app/admin/(shell)/currencies/page.tsx b/src/app/admin/(shell)/currencies/page.tsx index 8452f69..6d4a4d6 100644 --- a/src/app/admin/(shell)/currencies/page.tsx +++ b/src/app/admin/(shell)/currencies/page.tsx @@ -1,6 +1,8 @@ import { ModuleScaffold } from "@/components/admin/module-scaffold"; +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { CurrencyManagementScreen } from "@/modules/settings/currency-management-screen"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_CURRENCY_MANAGE } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("config", "currencies.title"); @@ -8,7 +10,9 @@ export const metadata: Metadata = buildPageMetadata("config", "currencies.title" export default function AdminCurrenciesPage() { return ( - + + + ); } diff --git a/src/app/admin/(shell)/reconcile/page.tsx b/src/app/admin/(shell)/reconcile/page.tsx index eaedaa3..533ef04 100644 --- a/src/app/admin/(shell)/reconcile/page.tsx +++ b/src/app/admin/(shell)/reconcile/page.tsx @@ -1,6 +1,8 @@ import { ModuleScaffold } from "@/components/admin/module-scaffold"; +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { ReconcileConsole } from "@/modules/reconcile/reconcile-console"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_WALLET_TX_ACCESS_ANY } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("reconcile", "title"); @@ -8,7 +10,9 @@ export const metadata: Metadata = buildPageMetadata("reconcile", "title"); export default function AdminReconcilePage() { return ( - + + + ); } diff --git a/src/app/admin/(shell)/rules/odds/page.tsx b/src/app/admin/(shell)/rules/odds/page.tsx index 38280db..ca1e302 100644 --- a/src/app/admin/(shell)/rules/odds/page.tsx +++ b/src/app/admin/(shell)/rules/odds/page.tsx @@ -1,9 +1,15 @@ +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { RulesOddsConfigScreen } from "@/modules/rules/rules-odds-config-screen"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_RULES_ODDS_ACCESS_ANY } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("config", "nav.rulesOddsTitle"); export default function AdminRulesOddsPage() { - return ; + return ( + + + + ); } diff --git a/src/app/admin/(shell)/rules/plays/page.tsx b/src/app/admin/(shell)/rules/plays/page.tsx index 4055146..578a7c2 100644 --- a/src/app/admin/(shell)/rules/plays/page.tsx +++ b/src/app/admin/(shell)/rules/plays/page.tsx @@ -1,14 +1,18 @@ +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { PlayConfigDocScreen } from "@/modules/config/doc/play-config-doc-screen"; import { RulesPageShell } from "@/modules/rules/rules-page-shell"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_RULES_PLAYS_ACCESS_ANY } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("config", "nav.rulesPlaysTitle"); export default function AdminRulesPlaysPage() { return ( - - - + + + + + ); } diff --git a/src/app/admin/(shell)/settings/page.tsx b/src/app/admin/(shell)/settings/page.tsx index d9a8ce2..eb784b1 100644 --- a/src/app/admin/(shell)/settings/page.tsx +++ b/src/app/admin/(shell)/settings/page.tsx @@ -1,6 +1,8 @@ import { ModuleScaffold } from "@/components/admin/module-scaffold"; +import { AdminPermissionGate } from "@/components/admin/admin-permission-gate"; import { SystemSettingsScreen } from "@/modules/settings/system-settings-screen"; import { buildPageMetadata } from "@/lib/page-metadata"; +import { PRD_SETTINGS_ACCESS_ANY } from "@/lib/admin-prd"; import type { Metadata } from "next"; export const metadata: Metadata = buildPageMetadata("common", "nav.settings"); @@ -8,7 +10,9 @@ export const metadata: Metadata = buildPageMetadata("common", "nav.settings"); export default function AdminSettingsPage() { return ( - + + + ); } diff --git a/src/components/admin/login-form.tsx b/src/components/admin/login-form.tsx index 4aed275..058bb71 100644 --- a/src/components/admin/login-form.tsx +++ b/src/components/admin/login-form.tsx @@ -192,7 +192,7 @@ export function LoginForm() {
{error}
- {formatDashboardCreditMajor(overview.credit_limit, currency)} -
- {t("agent.creditAvailable", { - amount: formatDashboardCreditMajor(overview.available_credit, currency), - })} -
- {t("agent.creditAllocated", { - amount: formatDashboardCreditMajor(overview.allocated_credit, currency), - })} - {" · "} - {t("agent.creditUsed", { - amount: formatDashboardCreditMajor(overview.used_credit, currency), - })} -
- {t("agent.shareRate", { rate: overview.total_share_rate })} - {" · "} - {t("agent.settlementCycle", { cycle: overview.settlement_cycle })} -
+ {t("agent.heroEyebrow")} +
{t("agent.todayBet")}
+ {formatDashboardMoneyMinor(overview.today_bet_minor, displayCurrency)} +
{t("agent.todayPayout")}
+ {formatDashboardMoneyMinor(overview.today_payout_minor, displayCurrency)} +
{t("agent.todayProfit")}
+ {formatDashboardMoneyMinor(overview.today_profit_minor, displayCurrency)} +
{t("agent.activePlayersToday")}
{overview.active_player_count_today}
{t("agent.betOrdersToday")}
{overview.bet_order_count_today}
{t("agent.pendingBills")}
{overview.pending_bill_count}
{t("agent.directChildren")}
{overview.direct_child_count}
{t("agent.directPlayers")}
{overview.direct_player_count}
{t("agent.subtreeAgents")}
{overview.subtree_agent_count}
+ {formatDashboardCreditMajor(overview.credit_limit, displayCurrency)} +
+ {t("agent.creditAvailable", { + amount: formatDashboardCreditMajor(overview.available_credit, displayCurrency), + })} +
{t("agent.creditAllocatedLabel")}
+ {formatDashboardCreditMajor(overview.allocated_credit, displayCurrency)} +
{t("agent.creditUsedLabel")}
+ {formatDashboardCreditMajor(overview.used_credit, displayCurrency)} +
+ {t("agent.pendingUnpaid", { + amount: formatDashboardMoneyMinor(overview.pending_unpaid_minor, displayCurrency), + })} +
- {t("agent.pendingUnpaid", { - amount: formatDashboardMoneyMinor(overview.pending_unpaid_minor, currency), - })} -
+ {formatDashboardMoneyMinor(overview.seven_day_bet_minor, displayCurrency)} +
+ {t("agent.sevenDayPayout", { + amount: formatDashboardMoneyMinor(overview.seven_day_payout_minor, displayCurrency), + })} +
+ {t("agent.sevenDayProfit", { + amount: formatDashboardMoneyMinor(overview.seven_day_profit_minor, displayCurrency), + })} +
{t("agent.teamPlayers")}
{overview.team_player_count}
+ {overview.top_agent_today.agent_name || overview.top_agent_today.agent_code} +
+ {formatDashboardMoneyMinor(overview.top_agent_today.total_bet_minor, displayCurrency)} +
+ {t("agent.topMomentumHint", { + profit: formatDashboardMoneyMinor( + overview.top_agent_today.approx_house_gross_minor, + displayCurrency, + ), + })} +
{t("agent.noBetToday")}
{t("agent.focusBet")}
{t("agent.focusPlayers")}
{t("agent.focusBills")}