feat(api, i18n): add agent_node_id to various admin queries and enhance multi-language support

Introduced the agent_node_id field in AdminDrawListQuery, AdminPlayerListQuery, AdminSettlementBatchListQuery, TicketItemsListQuery, and TransferOrderListQuery to improve filtering capabilities. Updated the admin-breadcrumb and admin-sidebar components to include new translations for agent-related terms in English, Nepali, and Chinese, enhancing the overall user experience and multi-language support across the admin interface.
This commit is contained in:
2026-06-02 14:37:08 +08:00
parent a4e7a2d228
commit b15e377187
105 changed files with 5305 additions and 1596 deletions

View File

@@ -1,14 +1,17 @@
"use client";
import Link from "next/link";
import { useCallback, useEffect, useState } from "react";
import { useCallback, useState } from "react";
import { useTranslation } from "react-i18next";
import { useAsyncEffect } from "@/hooks/use-async-effect";
import { useTranslationRef } from "@/hooks/use-translation-ref";
import { getAdminRiskPoolDetail } from "@/api/admin-risk";
import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer";
import { AdminTableExportButton } from "@/components/admin/admin-table-export-button";
import { buttonVariants } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { AdminLoadingState, AdminLoadingInline, AdminTableLoadingRow } from "@/components/admin/admin-loading-state";
import {
Table,
TableBody,
@@ -35,6 +38,7 @@ export function RiskPoolDetailConsole({
number4d: string;
}) {
const { t } = useTranslation(["risk", "common"]);
const tRef = useTranslationRef(["risk", "common"]);
const exportLabels = useExportLabels("riskPoolDetail", { number: number4d });
useAdminCurrencyCatalog();
const playCodeLabel = useAdminPlayCodeLabel();
@@ -53,19 +57,17 @@ export function RiskPoolDetailConsole({
setData(d);
} catch (e) {
const msg =
e instanceof LotteryApiBizError ? e.message : t("loadDetailFailed");
e instanceof LotteryApiBizError ? e.message : tRef.current("loadDetailFailed");
setError(msg);
setData(null);
} finally {
setLoading(false);
}
}, [drawId, number4d, page, perPage, t]);
}, [drawId, number4d, page, perPage]);
useEffect(() => {
queueMicrotask(() => {
void load();
});
}, [load]);
useAsyncEffect(() => {
void load();
}, [drawId, number4d, page, perPage]);
if (error && !data) {
return (
@@ -87,7 +89,7 @@ export function RiskPoolDetailConsole({
}
if (loading && !data) {
return <p className="text-sm text-muted-foreground">{t("states.loading", { ns: "common" })}</p>;
return <AdminLoadingState minHeight="6rem" className="py-6" />;
}
if (!data) {