diff --git a/src/api/admin-reports.ts b/src/api/admin-reports.ts
index ce83a69..1593370 100644
--- a/src/api/admin-reports.ts
+++ b/src/api/admin-reports.ts
@@ -7,7 +7,6 @@ import type {
AdminReportPlayDimensionRow,
AdminReportPlayerWinLossRow,
AdminReportQueryParams,
- AdminReportRebateCommissionRow,
} from "@/types/api/admin-reports";
const A = `/admin`;
@@ -35,11 +34,3 @@ export async function getAdminReportPlayDimension(
params,
});
}
-
-export async function getAdminReportRebateCommission(
- params: AdminReportQueryParams,
-): Promise
{label}
-- {value} -
+ {money ? ( ++ {value} +
+ )} {subtitle ?{subtitle}
: null}
+
{t("agent.creditAvailable", {
amount: formatDashboardCreditMajor(overview.available_credit, displayCurrency),
diff --git a/src/modules/dashboard/dashboard-page-client.tsx b/src/modules/dashboard/dashboard-page-client.tsx
index 1c17384..7b164cb 100644
--- a/src/modules/dashboard/dashboard-page-client.tsx
+++ b/src/modules/dashboard/dashboard-page-client.tsx
@@ -2,13 +2,15 @@
import type { ReactElement } from "react";
-import { isAgentOperator, isSiteAdminOperator } from "@/lib/admin-session-variants";
+import { isAgentOperator, isSiteFinanceOperator, isSiteCsOperator, isSiteOperator } from "@/lib/admin-session-variants";
import { AgentDashboardConsole } from "@/modules/dashboard/agent-dashboard-console";
import { DashboardConsole } from "@/modules/dashboard/dashboard-console";
+import { SiteCsDashboardConsole } from "@/modules/dashboard/site-cs-dashboard-console";
+import { SiteFinanceDashboardConsole } from "@/modules/dashboard/site-finance-dashboard-console";
import { SiteDashboardConsole } from "@/modules/dashboard/site-dashboard-console";
import { useAdminProfile } from "@/stores/admin-session";
-/** 超管/平台账号走全站仪表盘;站点管理员走站点仪表盘;代理经营账号走代理仪表盘。 */
+/** 超管/平台账号走全站仪表盘;站点运营账号走站点仪表盘;代理经营账号走代理仪表盘。 */
export function DashboardPageClient(): ReactElement {
const profile = useAdminProfile();
@@ -16,7 +18,15 @@ export function DashboardPageClient(): ReactElement {
return
{label}
-
+
{resolvedValue} @@ -418,9 +429,21 @@ export function StatCard({
{label}
-- {value} -
+ {typeof value === "string" || typeof value === "number" ? ( ++ {value} +
+ )} {deltaLabel ? ({deltaLabel}
) : null} @@ -557,6 +580,16 @@ export function DashboardPanelCard({{title}
{loading ? (
{value}
diff --git a/src/modules/dashboard/site-cs-dashboard-console.tsx b/src/modules/dashboard/site-cs-dashboard-console.tsx
new file mode 100644
index 0000000..ece4aad
--- /dev/null
+++ b/src/modules/dashboard/site-cs-dashboard-console.tsx
@@ -0,0 +1,196 @@
+"use client";
+
+import Link from "next/link";
+import { useCallback, useMemo, useState, type ReactElement } from "react";
+import { useTranslation } from "react-i18next";
+import { ClipboardList, RefreshCw, Search, Users } from "lucide-react";
+
+import { getAdminDashboard } from "@/api/admin-dashboard";
+import { useAsyncEffect } from "@/hooks/use-async-effect";
+import { useAdminDateTimeFormatter } from "@/hooks/use-admin-datetime-formatter";
+import { useTranslationRef } from "@/hooks/use-translation-ref";
+import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
+import { Button, buttonVariants } from "@/components/ui/button";
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
+import { Skeleton } from "@/components/ui/skeleton";
+import { AdminNoResourceState } from "@/components/admin/admin-no-resource-state";
+import {
+ DashboardKpiCard,
+ DashboardScopeMetric,
+} from "@/modules/dashboard/dashboard-visuals";
+import { cn } from "@/lib/utils";
+import { useAdminProfile } from "@/stores/admin-session";
+import type {
+ AdminDashboardSiteCsOverview,
+ AdminDashboardWarning,
+} from "@/types/api/admin-dashboard";
+import { LotteryApiBizError } from "@/types/api/errors";
+
+export function SiteCsDashboardConsole(): ReactElement {
+ const { t } = useTranslation(["dashboard", "common"]);
+ const tRef = useTranslationRef(["dashboard", "common"]);
+ const formatDt = useAdminDateTimeFormatter();
+ const profile = useAdminProfile();
+ const site = profile?.site ?? null;
+
+ const [loading, setLoading] = useState(true);
+ const [refreshing, setRefreshing] = useState(false);
+ const [error, setError] = useState
+ {site
+ ? t("cs.subtitle", { name: site.name || site.code })
+ : t("cs.subtitleFallback")}
+
+ {site
+ ? t("finance.subtitle", { name: site.name || site.code })
+ : t("finance.subtitleFallback")}
+ {t("createHint")}
{t("settlementCenter:billDisplay.settlementAmount", { defaultValue: "结算金额" })}
+
{t("settlementCenter:columns.paid", { defaultValue: "已收付" })}
+
{formatDashboardMoneyMinor(bill.unpaid_amount, currencyCode)}
-
{bill.status === "pending_confirm"
diff --git a/src/modules/settlement/settlement-bills-table.tsx b/src/modules/settlement/settlement-bills-table.tsx
index 1a48403..526861e 100644
--- a/src/modules/settlement/settlement-bills-table.tsx
+++ b/src/modules/settlement/settlement-bills-table.tsx
@@ -8,6 +8,7 @@ import { AdminNoResourceState } from "@/components/admin/admin-no-resource-state
import { AdminLoadingState } from "@/components/admin/admin-loading-state";
import { AdminRowActionsMenu } from "@/components/admin/admin-row-actions-menu";
import { AdminStatusBadge } from "@/components/admin/admin-status-badge";
+import { AdminTableMoney, adminMoneyCellClassName } from "@/components/admin/admin-table-money";
import { signedMoneyClass } from "@/lib/admin-signed-money";
import { cn } from "@/lib/utils";
import { formatSettlementPeriodSpan } from "@/lib/agent-settlement-period-range";
@@ -243,16 +244,20 @@ export function SettlementBillsTable({
)}
) : null}
- {t("cs.title")}
+ {t("finance.title")}
+