refactor: 移除冗余注释和描述,优化管理员模块的代码结构

This commit is contained in:
2026-05-11 17:21:12 +08:00
parent 217ed7c02f
commit 76e318be8f
57 changed files with 163 additions and 382 deletions

View File

@@ -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 }) {
<Card>
<CardHeader>
<CardTitle className="text-lg"></CardTitle>
<CardDescription>
<code className="rounded bg-muted px-1 py-0.5 text-xs">status</code>{" "}
tick DB
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="flex flex-wrap items-center gap-2">
@@ -103,7 +99,6 @@ export function DrawDetailConsole({ drawId }: { drawId: string }) {
<Card>
<CardHeader>
<CardTitle className="text-base"></CardTitle>
<CardDescription> / </CardDescription>
</CardHeader>
<CardContent className="flex flex-col gap-4">
<div className="flex flex-wrap gap-6 text-sm">

View File

@@ -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<AdminDrawFinanceSummaryData | null>(null);
@@ -57,16 +56,11 @@ export function DrawFinanceConsole({ drawId }: { drawId: string }): React.ReactE
return <p className="text-destructive text-sm">{err ?? "无数据"}</p>;
}
const cur = data.currency_code ?? "—";
return (
<div className="space-y-6">
<Card>
<CardHeader>
<CardTitle className="text-lg"></CardTitle>
<CardDescription>
{cur} = + Jackpot
</CardDescription>
</CardHeader>
<CardContent className="grid gap-3 text-sm sm:grid-cols-2 lg:grid-cols-3">
<div>
@@ -120,7 +114,6 @@ export function DrawFinanceConsole({ drawId }: { drawId: string }): React.ReactE
<Card>
<CardHeader>
<CardTitle className="text-base"></CardTitle>
<CardDescription> `settlement_batches` </CardDescription>
</CardHeader>
<CardContent>
{data.settlement_batches.length === 0 ? (

View File

@@ -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;

View File

@@ -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
<Card>
<CardHeader>
<CardTitle className="text-lg"></CardTitle>
<CardDescription>
<span className="font-mono font-medium">{data.draw_no}</span> · v
{batch.result_version}{" "}
<span className="rounded bg-muted px-1 py-0.5 font-mono text-xs">{batch.status}</span>
· {" "}
<code className="rounded bg-muted px-1 text-xs">
POST /result-batches/{batch.id}/publish
</code>
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
{!canManageDraw ? (
<Alert variant="destructive">
<AlertTitle></AlertTitle>
<AlertDescription>
<code className="rounded bg-background/80 px-1">{PRD_DRAW_RESULT_MANAGE}</code>{" "}
</AlertDescription>
<AlertDescription></AlertDescription>
</Alert>
) : null}
{!canPublish && canManageDraw ? (
<Alert>
<AlertTitle></AlertTitle>
<AlertDescription>
pending_review {batch.status}
</AlertDescription>
<AlertDescription>{batch.status}</AlertDescription>
</Alert>
) : null}
{canPublish ? (
<Alert>
<AlertTitle></AlertTitle>
<AlertDescription></AlertDescription>
<AlertDescription></AlertDescription>
</Alert>
) : null}

View File

@@ -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 }) {
<div>
<h2 className="text-lg font-semibold"></h2>
<p className="text-sm text-muted-foreground">
{data.draw_no} · <DrawStatusBadge status={data.draw_status} /> ·
{data.draw_no} · <DrawStatusBadge status={data.draw_status} />
</p>
</div>
<Link
@@ -89,7 +88,7 @@ export function DrawResultsConsole({ drawId }: { drawId: string }) {
{published.length === 0 ? (
<Card>
<CardContent className="py-8 text-center text-sm text-muted-foreground">
RNG
</CardContent>
</Card>
) : (
@@ -104,9 +103,9 @@ function BatchTable({ batch }: { batch: AdminDrawBatchRow }) {
<Card>
<CardHeader className="pb-2">
<CardTitle className="text-base"> v{batch.result_version}</CardTitle>
<CardDescription className="font-mono text-xs">
<p className="font-mono text-xs text-muted-foreground">
RNG {batch.rng_seed_hash ?? "—"} · {batch.confirmed_at ?? "—"}
</CardDescription>
</p>
</CardHeader>
<CardContent className="overflow-x-auto pt-0">
<Table>

View File

@@ -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 }) {
<Card>
<CardHeader>
<CardTitle className="text-lg"></CardTitle>
<CardDescription>
RNG {" "}
<code className="rounded bg-muted px-1 text-xs">{PRD_DRAW_RESULT_MANAGE}</code>{" "}
{" "}
<code className="rounded bg-muted px-1 text-xs">POST /result-batches//publish</code>
DB <DrawStatusBadge status={data.draw_status} />
</CardDescription>
<p className="flex flex-wrap items-center gap-2 text-sm text-muted-foreground">
<DrawStatusBadge status={data.draw_status} />
</p>
</CardHeader>
<CardContent>
{pending.length === 0 ? (

View File

@@ -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() {
<Card>
<CardHeader className="space-y-1">
<CardTitle className="text-lg"></CardTitle>
<CardDescription className="space-y-2">
<span>
3 · §11.4
</span>
<span className="block font-mono text-[11px] leading-relaxed text-muted-foreground">
{DRAW_ADMIN_API_PRD_LINES.join(" · ")}
</span>
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
{/* Grid桌面端标签一行 / 控件一行,避免 flex+items-end 与各列实际高度不一致;移动端单列自上而下 */}

View File

@@ -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;