Files
lotteryAdmin/src/modules/draws/draw-detail-header.tsx
kang 0d984b00f0
Some checks failed
lotteryadmin CI / build (push) Has been cancelled
feat(admin): 仪表盘重构、代理线路修复与后台体验优化
- 各角色仪表盘:KPI 可点击跳转、快捷入口、去重冗余区块,代理/站点降级 analytics
- 代理线路:创建玩家权限、侧栏搜索、深链 URL、档案保存与删除预检等修复
- 统一密码最短 6 位;代理模块表格/侧栏背景色一致(admin-table-inset)
- 报表、钱包、对账、开奖、结算、配置等模块结构与 i18n 同步更新
2026-06-26 14:39:22 +08:00

52 lines
1.8 KiB
TypeScript

"use client";
import Link from "next/link";
import { useTranslation } from "react-i18next";
import { AdminLoadingInline } from "@/components/admin/admin-loading-state";
import { drawStatusLabel, hallPreviewDiffersFromDbStatus } from "@/modules/draws/draw-display";
import { useDrawDetail } from "@/modules/draws/draw-detail-context";
import { DrawStatusBadge } from "@/modules/draws/draw-status-badge";
export function DrawDetailHeader(): React.ReactElement {
const { t } = useTranslation("draws");
const { draw, loading, error } = useDrawDetail();
if (error) {
return <p className="mb-4 text-sm text-destructive">{error}</p>;
}
if (loading && !draw) {
return <AdminLoadingInline className="mb-4 py-2" />;
}
if (!draw) {
return <div className="mb-4" />;
}
return (
<div className="mb-4 flex flex-wrap items-center justify-between gap-3">
<div className="flex min-w-0 flex-wrap items-center gap-3">
<Link
href="/admin/draws"
className="shrink-0 text-sm text-muted-foreground hover:text-foreground hover:underline"
>
{t("backToList")}
</Link>
<h1 className="font-mono text-lg font-semibold tracking-tight">{draw.draw_no}</h1>
<div className="flex flex-wrap items-center gap-2">
<DrawStatusBadge status={draw.status} label={drawStatusLabel(draw.status, t)} />
{hallPreviewDiffersFromDbStatus(draw.status, draw.hall_preview_status) ? (
<DrawStatusBadge
status={draw.hall_preview_status}
label={drawStatusLabel(draw.hall_preview_status, t)}
/>
) : null}
</div>
</div>
<p className="text-sm text-muted-foreground">
{t("detailSubtitle", { date: draw.business_date, seq: draw.sequence_no })}
</p>
</div>
);
}