From 76e318be8f422dcfd0319bdf4d40cc8e16132cdf Mon Sep 17 00:00:00 2001 From: kang Date: Mon, 11 May 2026 17:21:12 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E5=86=97?= =?UTF-8?q?=E4=BD=99=E6=B3=A8=E9=87=8A=E5=92=8C=E6=8F=8F=E8=BF=B0=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=AE=A1=E7=90=86=E5=91=98=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/admin-draws.ts | 1 - src/app/admin/(shell)/audit-logs/page.tsx | 4 +- src/app/admin/(shell)/config/page.tsx | 49 ++++----------- .../draws/[drawId]/publish/[batchId]/page.tsx | 1 - src/app/admin/(shell)/jackpot/pools/page.tsx | 1 - src/app/admin/(shell)/page.tsx | 26 +------- .../(shell)/risk/draws/[drawId]/hot/page.tsx | 1 - .../risk/draws/[drawId]/pools/page.tsx | 1 - .../risk/draws/[drawId]/sold-out/page.tsx | 1 - src/app/admin/(shell)/service-desk/page.tsx | 5 +- src/components/admin/login-form.tsx | 12 +--- src/lib/admin-datetime.ts | 7 +-- src/modules/audit/audit-logs-console.tsx | 6 +- src/modules/audit/meta.ts | 6 +- src/modules/auth/meta.ts | 4 +- .../config/config-versions-console.tsx | 5 +- .../config/doc/odds-config-doc-screen.tsx | 5 +- .../config/doc/play-config-doc-screen.tsx | 5 +- src/modules/config/doc/prize-scopes.ts | 2 +- .../config/doc/rebate-config-doc-screen.tsx | 5 +- .../config/doc/risk-cap-doc-screen.tsx | 5 +- src/modules/config/meta.ts | 39 ++++++++---- src/modules/dashboard/dashboard-console.tsx | 63 ++++++++++--------- src/modules/dashboard/meta.ts | 2 +- src/modules/draws/draw-detail-console.tsx | 7 +-- src/modules/draws/draw-finance-console.tsx | 9 +-- src/modules/draws/draw-prd.ts | 17 +---- src/modules/draws/draw-publish-console.tsx | 22 ++----- src/modules/draws/draw-results-console.tsx | 11 ++-- src/modules/draws/draw-review-console.tsx | 12 ++-- src/modules/draws/draws-index-console.tsx | 11 +--- src/modules/draws/meta.ts | 3 +- src/modules/jackpot/jackpot-pools-console.tsx | 3 +- .../jackpot/jackpot-records-console.tsx | 5 +- src/modules/jackpot/meta.ts | 4 +- src/modules/players/meta.ts | 4 +- src/modules/players/players-console.tsx | 10 +-- src/modules/reconcile/meta.ts | 2 +- src/modules/reconcile/reconcile-console.tsx | 20 +++--- src/modules/reports/meta.ts | 4 +- src/modules/reports/reports-console.tsx | 8 +-- src/modules/risk/meta.ts | 2 +- src/modules/risk/risk-draw-header.tsx | 4 -- src/modules/risk/risk-index-console.tsx | 5 +- src/modules/risk/risk-lock-logs-console.tsx | 5 +- src/modules/risk/risk-pool-detail-console.tsx | 11 ++-- src/modules/risk/risk-pools-console.tsx | 5 +- src/modules/service-desk/meta.ts | 6 +- .../service-desk/service-desk-console.tsx | 49 +++------------ src/modules/settings/meta.ts | 2 +- src/modules/settlement/meta.ts | 4 +- .../settlement-batch-details-console.tsx | 11 ++-- .../settlement/settlement-batches-console.tsx | 5 +- src/modules/tickets/meta.ts | 4 +- .../tickets/player-tickets-console.tsx | 7 +-- src/modules/wallet/meta.ts | 2 +- src/modules/wallet/wallet-console.tsx | 15 +---- 57 files changed, 163 insertions(+), 382 deletions(-) diff --git a/src/api/admin-draws.ts b/src/api/admin-draws.ts index d94f74b..5c4fdd9 100644 --- a/src/api/admin-draws.ts +++ b/src/api/admin-draws.ts @@ -31,7 +31,6 @@ export async function getAdminDrawResultBatches(drawId: number): Promise(`${A}/draws/${drawId}/result-batches`); } -/** PRD §15.4:单期投注/派彩与结算批次摘要 */ export async function getAdminDrawFinanceSummary( drawId: number, ): Promise { diff --git a/src/app/admin/(shell)/audit-logs/page.tsx b/src/app/admin/(shell)/audit-logs/page.tsx index d3b8dac..80279c3 100644 --- a/src/app/admin/(shell)/audit-logs/page.tsx +++ b/src/app/admin/(shell)/audit-logs/page.tsx @@ -1,10 +1,10 @@ import { ModuleScaffold } from "@/components/admin/module-scaffold"; -import { auditModuleMeta } from "@/modules/audit/meta"; +import { auditLogsModuleMeta } from "@/modules/audit/meta"; import { AuditLogsConsole } from "@/modules/audit/audit-logs-console"; import type { Metadata } from "next"; export const metadata: Metadata = { - title: auditModuleMeta.title, + title: auditLogsModuleMeta.title, }; export default function AdminAuditLogsPage() { diff --git a/src/app/admin/(shell)/config/page.tsx b/src/app/admin/(shell)/config/page.tsx index 34c4826..fbdc2c7 100644 --- a/src/app/admin/(shell)/config/page.tsx +++ b/src/app/admin/(shell)/config/page.tsx @@ -1,12 +1,7 @@ import Link from "next/link"; import { ModuleScaffold } from "@/components/admin/module-scaffold"; -import { - Card, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; +import { Card, CardHeader, CardTitle } from "@/components/ui/card"; import { configHubMeta } from "@/modules/config/meta"; import type { Metadata } from "next"; @@ -15,47 +10,27 @@ export const metadata: Metadata = { }; const SECTIONS = [ - { - href: "/admin/config/plays", - title: "玩法配置", - description: "§5.4:目录开关、显示名与排序、限额、规则说明(玩法配置版本)。", - }, - { - href: "/admin/config/odds", - title: "赔率配置", - description: "§5.5:按维度 / 玩法编辑五档赔率、回水率、历史版本与回滚。", - }, - { - href: "/admin/config/rebate", - title: "佣金 / 回水", - description: "§5.6:按 2D / 3D / 4D 批量写入 rebate_rate(共用赔率版本)。", - }, - { - href: "/admin/config/risk-cap", - title: "风控封顶", - description: "§5.7:默认封顶、特殊号码封顶;占用列为占位,待注单汇总接入。", - }, - { - href: "/admin/config/versions", - title: "配置版本历史", - description: "三套流水线的版本列表(玩法配置 / 赔率 / 风控封顶)。", - }, + { href: "/admin/config/plays", title: "玩法配置" }, + { href: "/admin/config/odds", title: "赔率配置" }, + { href: "/admin/config/rebate", title: "佣金 / 回水" }, + { href: "/admin/config/risk-cap", title: "风控封顶" }, + { href: "/admin/config/versions", title: "配置版本历史" }, ] as const; export default function AdminConfigHubPage() { return ( -
-

{configHubMeta.title}

-

{configHubMeta.description}

-
+

{configHubMeta.title}

{SECTIONS.map((s) => ( - + {s.title} - {s.description} diff --git a/src/app/admin/(shell)/draws/[drawId]/publish/[batchId]/page.tsx b/src/app/admin/(shell)/draws/[drawId]/publish/[batchId]/page.tsx index 4bdbfa5..5a3700e 100644 --- a/src/app/admin/(shell)/draws/[drawId]/publish/[batchId]/page.tsx +++ b/src/app/admin/(shell)/draws/[drawId]/publish/[batchId]/page.tsx @@ -5,7 +5,6 @@ export const metadata: Metadata = { title: "开奖结果发布", }; -/** PRD §11.4:与 `POST /api/v1/admin/draws/{draw}/result-batches/{batch}/publish` 联调页 */ export default async function AdminDrawPublishBatchPage(props: { params: Promise<{ drawId: string; batchId: string }>; }) { diff --git a/src/app/admin/(shell)/jackpot/pools/page.tsx b/src/app/admin/(shell)/jackpot/pools/page.tsx index 739c9a5..8c75c95 100644 --- a/src/app/admin/(shell)/jackpot/pools/page.tsx +++ b/src/app/admin/(shell)/jackpot/pools/page.tsx @@ -11,7 +11,6 @@ export default function AdminJackpotPoolsPage() { <>

{jackpotModuleMeta.title}

-

{jackpotModuleMeta.description}

diff --git a/src/app/admin/(shell)/page.tsx b/src/app/admin/(shell)/page.tsx index c5884dd..e3586df 100644 --- a/src/app/admin/(shell)/page.tsx +++ b/src/app/admin/(shell)/page.tsx @@ -1,5 +1,4 @@ import { ModuleScaffold } from "@/components/admin/module-scaffold"; -import { getAdminPing } from "@/api"; import { DashboardConsole } from "@/modules/dashboard/dashboard-console"; import type { Metadata } from "next"; @@ -7,33 +6,10 @@ export const metadata: Metadata = { title: "仪表盘", }; -export default async function AdminDashboardPage() { - const ping = await getAdminPing(); - const apiReady = process.env.NEXT_PUBLIC_LOTTERY_API_BASE_URL?.trim() !== ""; - +export default function AdminDashboardPage() { return ( - -
- API 连通性(调试) -
-

- 基底: - {apiReady ? ( - 已配置 - ) : ( - - 未配置 NEXT_PUBLIC_LOTTERY_API_BASE_URL - - )} -

-

- Admin ping(服务端无 Token 时多为空): - {!apiReady ? "—" : ping ? JSON.stringify(ping) : "未返回"} -

-
-
); } diff --git a/src/app/admin/(shell)/risk/draws/[drawId]/hot/page.tsx b/src/app/admin/(shell)/risk/draws/[drawId]/hot/page.tsx index 7cd08ab..a579d81 100644 --- a/src/app/admin/(shell)/risk/draws/[drawId]/hot/page.tsx +++ b/src/app/admin/(shell)/risk/draws/[drawId]/hot/page.tsx @@ -10,7 +10,6 @@ export default async function AdminRiskHotPage(props: { diff --git a/src/app/admin/(shell)/risk/draws/[drawId]/pools/page.tsx b/src/app/admin/(shell)/risk/draws/[drawId]/pools/page.tsx index 1264c60..ecfff6b 100644 --- a/src/app/admin/(shell)/risk/draws/[drawId]/pools/page.tsx +++ b/src/app/admin/(shell)/risk/draws/[drawId]/pools/page.tsx @@ -10,7 +10,6 @@ export default async function AdminRiskPoolsPage(props: { diff --git a/src/app/admin/(shell)/service-desk/page.tsx b/src/app/admin/(shell)/service-desk/page.tsx index 8f46706..bdf65b5 100644 --- a/src/app/admin/(shell)/service-desk/page.tsx +++ b/src/app/admin/(shell)/service-desk/page.tsx @@ -10,11 +10,8 @@ export const metadata: Metadata = { export default function AdminServiceDeskPage() { return ( -
+

{serviceDeskModuleMeta.title}

-

- {serviceDeskModuleMeta.description} -

diff --git a/src/components/admin/login-form.tsx b/src/components/admin/login-form.tsx index 5ba1a7f..a135123 100644 --- a/src/components/admin/login-form.tsx +++ b/src/components/admin/login-form.tsx @@ -8,14 +8,7 @@ import { isAxiosError } from "axios"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card"; +import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { getAdminCaptcha, postAdminLogin } from "@/api"; @@ -151,9 +144,6 @@ export function LoginForm() { {authModuleMeta.title} - - 使用账号与密码登录;请输入图形验证码(不区分大小写)。 -
diff --git a/src/lib/admin-datetime.ts b/src/lib/admin-datetime.ts index aa3ad78..bd883ef 100644 --- a/src/lib/admin-datetime.ts +++ b/src/lib/admin-datetime.ts @@ -5,12 +5,7 @@ function pad2(n: number): string { } /** - * 将接口返回的 ISO 时间串格式化为 **浏览器本地时区** 下的 - * `YYYY-MM-DD HH:mm:ss`(与《01-界面文档》时间展示习惯一致,且列宽稳定)。 - * - * 不使用 `Intl` 拼接 `GMT+8` 等时区后缀,避免在表格里挤出过长、重叠的字符串。 - * - * `@param options.locale` 与调用方保持一致,便于日后按界面语言微调格式。 + * 将接口返回的 ISO 时间串格式化为浏览器本地时区下的 `YYYY-MM-DD HH:mm:ss`。 */ export function formatAdminInstant( iso: string | null | undefined, diff --git a/src/modules/audit/audit-logs-console.tsx b/src/modules/audit/audit-logs-console.tsx index 0a1a7a9..28394cf 100644 --- a/src/modules/audit/audit-logs-console.tsx +++ b/src/modules/audit/audit-logs-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminAuditLogs } from "@/api/admin-audit"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { @@ -67,10 +67,6 @@ export function AuditLogsConsole(): React.ReactElement {
审计日志 - - 查询参数与 GET /api/v1/admin/audit-logs{" "} - 一致;数据范围受 RBAC 约束。 -
{drawId != null ? ( @@ -646,7 +654,6 @@ export function DashboardConsole(): ReactElement {

{abnormalTransferTotal ?? "—"}

-

待跟进或待对账

-
- - 安全可信 · 仅限授权访问 -
); } diff --git a/src/modules/dashboard/meta.ts b/src/modules/dashboard/meta.ts index 293cbfc..c1f3592 100644 --- a/src/modules/dashboard/meta.ts +++ b/src/modules/dashboard/meta.ts @@ -1,5 +1,5 @@ export const dashboardModuleMeta = { segment: "dashboard", title: "仪表盘", - description: "仪表盘:大厅当前期、投注/派彩/风控占用与快捷入口。", + description: "", } as const; diff --git a/src/modules/draws/draw-detail-console.tsx b/src/modules/draws/draw-detail-console.tsx index 799cc4f..1a7db79 100644 --- a/src/modules/draws/draw-detail-console.tsx +++ b/src/modules/draws/draw-detail-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminDraw } from "@/api/admin-draws"; import { buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { Separator } from "@/components/ui/separator"; import { useAdminDateTimeFormatter } from "@/hooks/use-admin-datetime-formatter"; @@ -70,10 +70,6 @@ export function DrawDetailConsole({ drawId }: { drawId: string }) { 当期状态 - - 数据库 status{" "} - 为权威;以下为玩家大厅「展示态」预览(未跑 tick 时可能与 DB 不一致)。 -
@@ -103,7 +99,6 @@ export function DrawDetailConsole({ drawId }: { drawId: string }) { 批次统计 - 用于跳转「开奖结果 / 审核」页前的概览。
diff --git a/src/modules/draws/draw-finance-console.tsx b/src/modules/draws/draw-finance-console.tsx index b802ba9..78030e7 100644 --- a/src/modules/draws/draw-finance-console.tsx +++ b/src/modules/draws/draw-finance-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminDrawFinanceSummary } from "@/api/admin-draws"; import { Button, buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, @@ -18,7 +18,6 @@ import { cn } from "@/lib/utils"; import { LotteryApiBizError } from "@/types/api/errors"; import type { AdminDrawFinanceSummaryData } from "@/types/api/admin-draw-finance"; -/** PRD §15.4:单期投注/派彩与结算批次(`GET …/draws/{id}/finance-summary`) */ export function DrawFinanceConsole({ drawId }: { drawId: string }): React.ReactElement { const idNum = Number(drawId); const [data, setData] = useState(null); @@ -57,16 +56,11 @@ export function DrawFinanceConsole({ drawId }: { drawId: string }): React.ReactE return

{err ?? "无数据"}

; } - const cur = data.currency_code ?? "—"; - return (
期号收支概览 - - 币种 {cur};金额为最小货币单位。毛损益 = 实扣投注 −(中奖派彩 + Jackpot),不含回水细项。 -
@@ -120,7 +114,6 @@ export function DrawFinanceConsole({ drawId }: { drawId: string }): React.ReactE 本关联期结算批次 - 与 `settlement_batches` 对照;明细见结算模块。 {data.settlement_batches.length === 0 ? ( diff --git a/src/modules/draws/draw-prd.ts b/src/modules/draws/draw-prd.ts index 13794cf..e2b1a8a 100644 --- a/src/modules/draws/draw-prd.ts +++ b/src/modules/draws/draw-prd.ts @@ -1,17 +1,2 @@ -/** - * 后台开奖域与 PRD 阶段 3 · §11.4 / §11.7 验收对照(路径以 `API_V1_PREFIX=/api/v1` 为前缀)。 - * - * - 期号列表:`GET …/admin/draws` - * - 期号详情 / 状态:`GET …/admin/draws/{draw}` - * - 开奖结果批次(含待审核、已发布):`GET …/admin/draws/{draw}/result-batches` - * - 发布:`POST …/admin/draws/{draw}/result-batches/{batch}/publish` - */ -export const DRAW_ADMIN_API_PRD_LINES = [ - "GET /api/v1/admin/draws", - "GET /api/v1/admin/draws/{draw}", - "GET /api/v1/admin/draws/{draw}/result-batches", - "POST /api/v1/admin/draws/{draw}/result-batches/{batch}/publish", -] as const; - -/** 具备其一即可执行发布、进入发布页(与 Laravel `prd.draw_result.manage` 一致) */ +/** 开奖结果发布权限 slug */ export const PRD_DRAW_RESULT_MANAGE = "prd.draw_result.manage" as const; diff --git a/src/modules/draws/draw-publish-console.tsx b/src/modules/draws/draw-publish-console.tsx index 52c61d8..f6ce76c 100644 --- a/src/modules/draws/draw-publish-console.tsx +++ b/src/modules/draws/draw-publish-console.tsx @@ -7,7 +7,7 @@ import { toast } from "sonner"; import { getAdminDrawResultBatches, postAdminPublishResultBatch } from "@/api/admin-draws"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { Button, buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, @@ -112,38 +112,24 @@ export function DrawPublishConsole({ drawId, batchId }: { drawId: string; batchI 发布 - - 期号 {data.draw_no} · 批次 v - {batch.result_version}{" "} - {batch.status} - · 接口{" "} - - POST …/result-batches/{batch.id}/publish - - {!canManageDraw ? ( 无发布权限 - - 需要 {PRD_DRAW_RESULT_MANAGE}{" "} - 方可调用发布接口;当前账号仅可查看号码表。 - + 当前账号不可执行发布。 ) : null} {!canPublish && canManageDraw ? ( 不可发布 - - 仅 pending_review 可执行发布接口;当前为「{batch.status}」。已发布时请从「开奖结果」页核对。 - + 当前批次状态为「{batch.status}」。 ) : null} {canPublish ? ( 请核对以下号码后再发布 - 发布后无期将进入冷静期并按配置写入结果版本。 + 确认无误后点击发布。 ) : null} diff --git a/src/modules/draws/draw-results-console.tsx b/src/modules/draws/draw-results-console.tsx index 96c55b1..d585d9b 100644 --- a/src/modules/draws/draw-results-console.tsx +++ b/src/modules/draws/draw-results-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminDrawResultBatches } from "@/api/admin-draws"; import { buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, @@ -74,8 +74,7 @@ export function DrawResultsConsole({ drawId }: { drawId: string }) {

开奖结果

- 期号 {data.draw_no} · 当期库内状态 · - 以下为已发布批次号码表;未发布请在「审核与发布」中处理。 + 期号 {data.draw_no} ·

- 暂无「已发布」批次。若存在待审核 RNG 结果,请先完成审核发布。 + 暂无已发布批次。
) : ( @@ -104,9 +103,9 @@ function BatchTable({ batch }: { batch: AdminDrawBatchRow }) { 版本 v{batch.result_version} - +

RNG 摘要 {batch.rng_seed_hash ?? "—"} · 确认时间 {batch.confirmed_at ?? "—"} - +

diff --git a/src/modules/draws/draw-review-console.tsx b/src/modules/draws/draw-review-console.tsx index 0c0fc26..aeeaae4 100644 --- a/src/modules/draws/draw-review-console.tsx +++ b/src/modules/draws/draw-review-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useMemo, useState } from "react"; import { getAdminDrawResultBatches } from "@/api/admin-draws"; import { buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, @@ -74,13 +74,9 @@ export function DrawReviewConsole({ drawId }: { drawId: string }) { 审核 - - 待审核 RNG 批次会出现在下表;具备{" "} - {PRD_DRAW_RESULT_MANAGE}{" "} - 时可进入发布页,调用{" "} - POST …/result-batches/…/publish - 。当前 DB 状态:。 - +

+ 当前状态 +

{pending.length === 0 ? ( diff --git a/src/modules/draws/draws-index-console.tsx b/src/modules/draws/draws-index-console.tsx index 884acc4..4fe74e1 100644 --- a/src/modules/draws/draws-index-console.tsx +++ b/src/modules/draws/draws-index-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminDraws } from "@/api/admin-draws"; import { Button, buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; @@ -29,7 +29,6 @@ import { cn } from "@/lib/utils"; import { LotteryApiBizError } from "@/types/api/errors"; import type { AdminDrawListData, AdminDrawListItem } from "@/types/api/admin-draws"; -import { DRAW_ADMIN_API_PRD_LINES } from "./draw-prd"; import { DrawStatusBadge } from "./draw-status-badge"; /** 下拉「不限」;请求时不传 status */ @@ -104,14 +103,6 @@ export function DrawsIndexConsole() { 期号列表 - - - 按开奖时间倒序;点「详情」进入期号子页:状态、开奖结果、审核与发布(阶段 3 · §11.4)。 - - - {DRAW_ADMIN_API_PRD_LINES.join(" · ")} - - {/* Grid:桌面端标签一行 / 控件一行,避免 flex+items-end 与各列实际高度不一致;移动端单列自上而下 */} diff --git a/src/modules/draws/meta.ts b/src/modules/draws/meta.ts index 7564a8b..c3524fc 100644 --- a/src/modules/draws/meta.ts +++ b/src/modules/draws/meta.ts @@ -1,6 +1,5 @@ export const drawsModuleMeta = { segment: "draws", title: "开奖", - description: - "PRD 阶段3 §11.4:期号列表 / 状态 / 开奖结果 / 审核队列 / 发布(POST …/result-batches/…/publish);路由 `/admin/draws/[id]/publish/[batchId]` 与接口动词对齐。", + description: "", } as const; diff --git a/src/modules/jackpot/jackpot-pools-console.tsx b/src/modules/jackpot/jackpot-pools-console.tsx index 70bec60..666c1b0 100644 --- a/src/modules/jackpot/jackpot-pools-console.tsx +++ b/src/modules/jackpot/jackpot-pools-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminJackpotPools, putAdminJackpotPool } from "@/api/admin-jackpot"; import { ModuleScaffold } from "@/components/admin/module-scaffold"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { @@ -106,7 +106,6 @@ export function JackpotPoolsConsole() { Jackpot 奖池配置 - 蓄水比例、爆池阈值、派彩比例等;修改后保存生效 {loading ?

加载中…

: null} diff --git a/src/modules/jackpot/jackpot-records-console.tsx b/src/modules/jackpot/jackpot-records-console.tsx index 161dc53..393079c 100644 --- a/src/modules/jackpot/jackpot-records-console.tsx +++ b/src/modules/jackpot/jackpot-records-console.tsx @@ -6,7 +6,7 @@ import { getAdminJackpotContributions, getAdminJackpotPayoutLogs } from "@/api/a import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { ModuleScaffold } from "@/components/admin/module-scaffold"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { @@ -97,7 +97,6 @@ export function JackpotRecordsConsole() { 筛选 - 按期号模糊过滤两类记录
@@ -121,7 +120,6 @@ export function JackpotRecordsConsole() { Jackpot 派彩记录 - 爆池触发与划出总额 {loadingP && !payouts ? ( @@ -177,7 +175,6 @@ export function JackpotRecordsConsole() { Jackpot 蓄水记录 - 每笔注单蓄水入账流水 {loadingC && !contribs ? ( diff --git a/src/modules/jackpot/meta.ts b/src/modules/jackpot/meta.ts index c69398e..9ef5f41 100644 --- a/src/modules/jackpot/meta.ts +++ b/src/modules/jackpot/meta.ts @@ -1,4 +1,4 @@ export const jackpotModuleMeta = { - title: "Jackpot", - description: "奖池配置与蓄水 / 派彩记录", + title: "奖池", + description: "", } as const; diff --git a/src/modules/players/meta.ts b/src/modules/players/meta.ts index 0ca05aa..da0e220 100644 --- a/src/modules/players/meta.ts +++ b/src/modules/players/meta.ts @@ -1,5 +1,5 @@ export const playersModuleMeta = { segment: "players", - title: "玩家查询", - description: "按玩家 ID 查钱包等(PRD 15.3);列表/冻结待管理端用户 API。", + title: "玩家", + description: "", } as const; diff --git a/src/modules/players/players-console.tsx b/src/modules/players/players-console.tsx index 4d7be8e..12e8a33 100644 --- a/src/modules/players/players-console.tsx +++ b/src/modules/players/players-console.tsx @@ -1,23 +1,15 @@ "use client"; -import { Card, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardHeader, CardTitle } from "@/components/ui/card"; import { PlayerWalletPanel } from "@/modules/wallet/wallet-console"; -/** PRD 15.3:玩家查询(当前对接 `GET .../players/{id}/wallets`)。 */ export function PlayersConsole(): React.ReactElement { return (
玩家查询 - - 按本地玩家主键查询钱包余额;需具备{" "} - - prd.users.manage | view_finance | view_cs - {" "} - 之一。完整列表/冻结等能力待管理端用户 API 就绪后扩展。 - diff --git a/src/modules/reconcile/meta.ts b/src/modules/reconcile/meta.ts index d620991..c75f078 100644 --- a/src/modules/reconcile/meta.ts +++ b/src/modules/reconcile/meta.ts @@ -1,5 +1,5 @@ export const reconcileModuleMeta = { segment: "reconcile", title: "对账", - description: "钱包对账任务列表、创建与明细(PRD §8 钱包对账)。", + description: "", } as const; diff --git a/src/modules/reconcile/reconcile-console.tsx b/src/modules/reconcile/reconcile-console.tsx index f40a951..7df1ff3 100644 --- a/src/modules/reconcile/reconcile-console.tsx +++ b/src/modules/reconcile/reconcile-console.tsx @@ -11,7 +11,7 @@ import { import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { @@ -143,10 +143,6 @@ export function ReconcileConsole(): React.ReactElement { 新建对账任务 - - 需要权限 prd.wallet_reconcile.manage - 。周期与明细结构与接口校验一致。 -
@@ -193,16 +189,13 @@ export function ReconcileConsole(): React.ReactElement { ) : ( -

- 当前账号无「钱包对账·可管理」权限,仅可查看任务与明细。 -

+

当前账号无新建对账任务权限。

)}
对账任务 - 点击行以查看该任务明细分页
diff --git a/src/modules/reports/meta.ts b/src/modules/reports/meta.ts index 7634c5d..16c1ead 100644 --- a/src/modules/reports/meta.ts +++ b/src/modules/reports/meta.ts @@ -1,5 +1,5 @@ export const reportsModuleMeta = { segment: "reports", - title: "报表导出", - description: "创建异步导出任务并查看历史记录(PRD §8 报表权限)。", + title: "报表", + description: "", } as const; diff --git a/src/modules/reports/reports-console.tsx b/src/modules/reports/reports-console.tsx index e645477..1002292 100644 --- a/src/modules/reports/reports-console.tsx +++ b/src/modules/reports/reports-console.tsx @@ -7,7 +7,7 @@ import { getAdminReportJobs, postAdminReportJob } from "@/api/admin-reports"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { Select, @@ -105,11 +105,6 @@ export function ReportsConsole(): React.ReactElement { 新建导出 - - 对应接口 POST /api/v1/admin/report-jobs - ;任务异步执行,完成后可凭 output_path{" "} - 取文件(由后端存储策略决定)。 -
@@ -177,7 +172,6 @@ export function ReportsConsole(): React.ReactElement {
任务列表 - 按创建时间倒序
); } diff --git a/src/modules/risk/risk-index-console.tsx b/src/modules/risk/risk-index-console.tsx index ff748c2..ef52974 100644 --- a/src/modules/risk/risk-index-console.tsx +++ b/src/modules/risk/risk-index-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminDraws } from "@/api/admin-draws"; import { buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, @@ -52,9 +52,6 @@ export function RiskIndexConsole() { 风控中心 - - 选择期号进入:风险占用流水、热门号码(按占用比)、售罄列表、单号码风险池详情(实施计划 §13.4)。 - {error ?

{error}

: null} diff --git a/src/modules/risk/risk-lock-logs-console.tsx b/src/modules/risk/risk-lock-logs-console.tsx index de932e7..9ba4ea3 100644 --- a/src/modules/risk/risk-lock-logs-console.tsx +++ b/src/modules/risk/risk-lock-logs-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminRiskPoolLockLogs } from "@/api/admin-risk"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { @@ -77,9 +77,6 @@ export function RiskLockLogsConsole({ drawId }: { drawId: number }) { 风险占用流水 - - 每次下注锁定 / 回滚释放写入 `risk_pool_lock_logs`;可按号码与动作筛选(产品文档:后台监控风险占用)。 -
diff --git a/src/modules/risk/risk-pool-detail-console.tsx b/src/modules/risk/risk-pool-detail-console.tsx index d5376f7..a56707b 100644 --- a/src/modules/risk/risk-pool-detail-console.tsx +++ b/src/modules/risk/risk-pool-detail-console.tsx @@ -6,7 +6,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminRiskPoolDetail } from "@/api/admin-risk"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, @@ -62,9 +62,9 @@ export function RiskPoolDetailConsole({ 风险池详情 - {error} - + +

{error}

号码 {pool.normalized_number} - - 期号 {data.draw_no} · 封顶与占用来自 `risk_pools`;售罄表示剩余额度为 0(产品文档 §6.4)。 - +

期号 {data.draw_no}

@@ -139,7 +137,6 @@ export function RiskPoolDetailConsole({ 本号码占用 / 释放流水 - 与「风险占用」页同一数据源,此处限定单号码。
diff --git a/src/modules/risk/risk-pools-console.tsx b/src/modules/risk/risk-pools-console.tsx index b21ebb8..d3ceefb 100644 --- a/src/modules/risk/risk-pools-console.tsx +++ b/src/modules/risk/risk-pools-console.tsx @@ -6,7 +6,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminRiskPools } from "@/api/admin-risk"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { Select, @@ -39,7 +39,6 @@ const SORT_OPTIONS: { value: "usage_desc" | "locked_desc" | "remaining_asc" | "n type RiskPoolsConsoleProps = { drawId: number; title: string; - description: string; soldOutOnly: boolean; defaultSort: "usage_desc" | "locked_desc" | "remaining_asc" | "number_asc"; allowSortChange?: boolean; @@ -48,7 +47,6 @@ type RiskPoolsConsoleProps = { export function RiskPoolsConsole({ drawId, title, - description, soldOutOnly, defaultSort, allowSortChange = false, @@ -91,7 +89,6 @@ export function RiskPoolsConsole({ {title} - {description} {allowSortChange ? (
diff --git a/src/modules/service-desk/meta.ts b/src/modules/service-desk/meta.ts index 28488ca..c7d44a5 100644 --- a/src/modules/service-desk/meta.ts +++ b/src/modules/service-desk/meta.ts @@ -1,5 +1,5 @@ export const serviceDeskModuleMeta = { - segment: "service_desk", - title: "客服 / 财务", - description: "PRD §15.4 能力入口:注单、流水、转账失败、期号收支、报表。", + segment: "service-desk", + title: "服务台", + description: "", } as const; diff --git a/src/modules/service-desk/service-desk-console.tsx b/src/modules/service-desk/service-desk-console.tsx index 77cd546..2220332 100644 --- a/src/modules/service-desk/service-desk-console.tsx +++ b/src/modules/service-desk/service-desk-console.tsx @@ -1,58 +1,29 @@ "use client"; +import type { ReactElement } from "react"; import Link from "next/link"; import { buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { cn } from "@/lib/utils"; -const items: { title: string; desc: string; href: string; hint: string }[] = [ - { - title: "玩家注单", - desc: "按玩家 ID 查注单、失败原因、中奖金额。", - href: "/admin/tickets", - hint: "GET …/players/{id}/ticket-items", - }, - { - title: "钱包流水", - desc: "按玩家、单号、日期筛选流水。", - href: "/admin/wallet/transactions", - hint: "GET …/wallet/transactions", - }, - { - title: "转账单与失败原因", - desc: "筛选 status=failed 或异常单,查看 fail_reason 列。", - href: "/admin/wallet/transfer-orders", - hint: "GET …/wallet/transfer-orders", - }, - { - title: "期号列表 → 期号收支", - desc: "开奖 → 点期号 →「期号收支」看当期投注/派彩与结算批次。", - href: "/admin/draws", - hint: "GET …/draws/{id}/finance-summary", - }, - { - title: "报表导出", - desc: "异步导出任务(如钱包流水日报)。", - href: "/admin/reports", - hint: "POST …/report-jobs", - }, +const items: { title: string; href: string }[] = [ + { title: "玩家注单", href: "/admin/tickets" }, + { title: "钱包流水", href: "/admin/wallet/transactions" }, + { title: "转账单", href: "/admin/wallet/transfer-orders" }, + { title: "期号列表", href: "/admin/draws" }, + { title: "报表导出", href: "/admin/reports" }, ]; -/** PRD §15.4 客服/财务能力入口聚合 */ -export function ServiceDeskConsole(): React.ReactElement { +export function ServiceDeskConsole(): ReactElement { return (
{items.map((it) => ( {it.title} - {it.desc} - - - {it.hint} - + 打开 diff --git a/src/modules/settings/meta.ts b/src/modules/settings/meta.ts index efcc1fc..b0f9ac3 100644 --- a/src/modules/settings/meta.ts +++ b/src/modules/settings/meta.ts @@ -1,5 +1,5 @@ export const settingsModuleMeta = { segment: "settings", title: "系统设置", - description: "运营参数与权限(占位)。", + description: "", } as const; diff --git a/src/modules/settlement/meta.ts b/src/modules/settlement/meta.ts index ae9f633..5870631 100644 --- a/src/modules/settlement/meta.ts +++ b/src/modules/settlement/meta.ts @@ -1,4 +1,4 @@ export const settlementModuleMeta = { - title: "结算批次", - description: "按期查看结算批次与注单结算明细", + title: "结算", + description: "", } as const; diff --git a/src/modules/settlement/settlement-batch-details-console.tsx b/src/modules/settlement/settlement-batch-details-console.tsx index 945d674..6994060 100644 --- a/src/modules/settlement/settlement-batch-details-console.tsx +++ b/src/modules/settlement/settlement-batch-details-console.tsx @@ -7,7 +7,7 @@ import { getAdminSettlementBatch, getAdminSettlementBatchDetails } from "@/api/a import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { ModuleScaffold } from "@/components/admin/module-scaffold"; import { Button, buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Table, TableBody, @@ -74,9 +74,9 @@ export function SettlementBatchDetailsConsole({ batchId }: Props) { 错误 - {err} - + +

{err}

@@ -88,10 +88,10 @@ export function SettlementBatchDetailsConsole({ batchId }: Props) { 批次 #{summary.id} - +

期号 {summary.draw_no ?? "—"} · 期状态 {summary.draw_status ?? "—"} · 结果批次 v {summary.result_batch_version ?? "—"} - +

@@ -131,7 +131,6 @@ export function SettlementBatchDetailsConsole({ batchId }: Props) { 注单结算明细 - 该批次内每条注项的匹配档与派彩拆分 {details ? ( diff --git a/src/modules/settlement/settlement-batches-console.tsx b/src/modules/settlement/settlement-batches-console.tsx index 0cb607e..146176b 100644 --- a/src/modules/settlement/settlement-batches-console.tsx +++ b/src/modules/settlement/settlement-batches-console.tsx @@ -7,7 +7,7 @@ import { getAdminSettlementBatches } from "@/api/admin-settlement"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { ModuleScaffold } from "@/components/admin/module-scaffold"; import { Button, buttonVariants } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { @@ -90,12 +90,10 @@ export function SettlementBatchesConsole() {

{settlementModuleMeta.title}

-

{settlementModuleMeta.description}

筛选 - 按业务期号、批次状态过滤
@@ -132,7 +130,6 @@ export function SettlementBatchesConsole() { 结算批次 - 每期与采纳开奖版本对应的一次结算运行 {error ?

{error}

: null} diff --git a/src/modules/tickets/meta.ts b/src/modules/tickets/meta.ts index 555ac12..229bd07 100644 --- a/src/modules/tickets/meta.ts +++ b/src/modules/tickets/meta.ts @@ -1,5 +1,5 @@ export const ticketsModuleMeta = { segment: "tickets", - title: "玩家注单", - description: "PRD §15.4:按玩家查注单(管理端 ticket-items API)。", + title: "注单", + description: "", } as const; diff --git a/src/modules/tickets/player-tickets-console.tsx b/src/modules/tickets/player-tickets-console.tsx index 0383a23..367408d 100644 --- a/src/modules/tickets/player-tickets-console.tsx +++ b/src/modules/tickets/player-tickets-console.tsx @@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react"; import { getAdminPlayerTicketItems } from "@/api/admin-player-tickets"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { @@ -19,7 +19,6 @@ import { import { LotteryApiBizError } from "@/types/api/errors"; import type { AdminPlayerTicketItemsData } from "@/types/api/admin-player-tickets"; -/** PRD §15.4:按玩家主键查注单(`GET …/admin/players/{id}/ticket-items`) */ export function PlayerTicketsConsole(): React.ReactElement { const [playerIdDraft, setPlayerIdDraft] = useState(""); const [drawNoDraft, setDrawNoDraft] = useState(""); @@ -77,10 +76,6 @@ export function PlayerTicketsConsole(): React.ReactElement { 玩家注单查询 - - 需 prd.users.view_cs | view_finance | manage - 之一。可选按期号精确筛选。 -
diff --git a/src/modules/wallet/meta.ts b/src/modules/wallet/meta.ts index 1ba10e2..aa1e0bc 100644 --- a/src/modules/wallet/meta.ts +++ b/src/modules/wallet/meta.ts @@ -1,5 +1,5 @@ export const walletModuleMeta = { segment: "wallet", title: "钱包流水与对账", - description:"" + description: "", } as const; diff --git a/src/modules/wallet/wallet-console.tsx b/src/modules/wallet/wallet-console.tsx index 36df773..d0ec000 100644 --- a/src/modules/wallet/wallet-console.tsx +++ b/src/modules/wallet/wallet-console.tsx @@ -13,7 +13,7 @@ import { AdminDateRangeField } from "@/components/admin/admin-date-range-field"; import { AdminListPaginationFooter } from "@/components/admin/admin-list-pagination-footer"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; @@ -243,11 +243,6 @@ export function TransferOrdersPanel(): React.ReactElement { 转账单 - - 主站 ↔ 彩票划转单;检索口径与 §5.11 一致(单号、主站流水号、玩家账号、状态、日期)。与{" "} - player_id 同时填写时以 ID 为准。PRD §15.4:失败单请看「失败原因」列,可筛{" "} - status=failed。 -
@@ -510,10 +505,6 @@ export function WalletTxnsPanel(): React.ReactElement { 钱包流水 - - §5.11 列表:流水号、主站流水号、玩家、类型、金额、状态、请求时间、完成时间、操作。「仅异常」对应{" "} - pending_reconcile。 -
@@ -771,10 +762,6 @@ export function PlayerWalletPanel(): React.ReactElement { 玩家钱包查询 - - 按本地玩家主键 players.id{" "} - 查询各币种余额。完整客服视图见界面文档 §5.12(待迭代)。 -