import { useTranslation } from "react-i18next"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { useRequestDetail } from "@/lib/query/usage"; interface RequestDetailPanelProps { requestId: string; onClose: () => void; } export function RequestDetailPanel({ requestId, onClose, }: RequestDetailPanelProps) { const { t, i18n } = useTranslation(); const { data: request, isLoading } = useRequestDetail(requestId); const dateLocale = i18n.language === "zh" ? "zh-CN" : i18n.language === "ja" ? "ja-JP" : "en-US"; if (isLoading) { return (
); } if (!request) { return ( {t("usage.requestDetail", "请求详情")}
{t("usage.requestNotFound", "请求未找到")}
); } return ( {t("usage.requestDetail", "请求详情")}
{/* 基本信息 */}

{t("usage.basicInfo", "基本信息")}

{t("usage.requestId", "请求ID")}
{request.requestId}
{t("usage.time", "时间")}
{new Date(request.createdAt * 1000).toLocaleString( dateLocale, )}
{t("usage.provider", "供应商")}
{request.providerName || t("usage.unknownProvider", "未知")} {request.providerId}
{t("usage.appType", "应用类型")}
{request.appType}
{t("usage.model", "模型")}
{request.model}
{t("usage.status", "状态")}
= 200 && request.statusCode < 300 ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800" }`} > {request.statusCode}
{/* Token 使用量 */}

{t("usage.tokenUsage", "Token 使用量")}

{t("usage.inputTokens", "输入 Tokens")}
{request.inputTokens.toLocaleString()}
{t("usage.outputTokens", "输出 Tokens")}
{request.outputTokens.toLocaleString()}
{t("usage.cacheReadTokens", "缓存读取")}
{request.cacheReadTokens.toLocaleString()}
{t("usage.cacheCreationTokens", "缓存写入")}
{request.cacheCreationTokens.toLocaleString()}
{t("usage.totalTokens", "总计")}
{( request.inputTokens + request.outputTokens ).toLocaleString()}
{/* 成本明细 */}

{t("usage.costBreakdown", "成本明细")}

{t("usage.inputCost", "输入成本")}
${parseFloat(request.inputCostUsd).toFixed(6)}
{t("usage.outputCost", "输出成本")}
${parseFloat(request.outputCostUsd).toFixed(6)}
{t("usage.cacheReadCost", "缓存读取成本")}
${parseFloat(request.cacheReadCostUsd).toFixed(6)}
{t("usage.cacheCreationCost", "缓存写入成本")}
${parseFloat(request.cacheCreationCostUsd).toFixed(6)}
{t("usage.totalCost", "总成本")}
${parseFloat(request.totalCostUsd).toFixed(6)}
{/* 性能信息 */}

{t("usage.performance", "性能信息")}

{t("usage.latency", "延迟")}
{request.latencyMs}ms
{/* 错误信息 */} {request.errorMessage && (

{t("usage.errorMessage", "错误信息")}

{request.errorMessage}

)}
); }