import React, { useState, useEffect } from "react"; import { Card, Descriptions, Button, message, Tag, Spin } from "antd"; import { ArrowLeftOutlined, CopyOutlined } from "@ant-design/icons"; import { useParams, useNavigate } from "react-router-dom"; import { toolsCallLogApi } from "../services/api"; import dayjs from "dayjs"; const ToolsCallLogDetail = () => { const { id } = useParams(); const navigate = useNavigate(); const [loading, setLoading] = useState(false); const [data, setData] = useState(null); // 格式化时间戳为 YYYY-MM-DD HH:mm:ss const formatTimestamp = (timestamp) => { if (!timestamp) return "-"; return dayjs(timestamp).format("YYYY-MM-DD HH:mm:ss"); }; // 计算耗时(秒) const calculateDuration = (callTime, finishTime) => { if (!callTime || !finishTime) return "-"; return ((finishTime - callTime) / 1000).toFixed(2) + "s"; }; // 复制到剪贴板 const copyToClipboard = async (text) => { try { await navigator.clipboard.writeText(text); message.success("复制成功"); } catch (error) { message.error("复制失败"); } }; // 获取详情数据 const fetchDetail = async () => { setLoading(true); try { const response = await toolsCallLogApi.getDetail(id); setData(response.data); } catch (error) { message.error("获取详情失败"); console.error("获取工具调用日志详情失败:", error); } finally { setLoading(false); } }; // 返回列表 const handleBack = () => { navigate("/tools-call-log"); }; useEffect(() => { if (id) { fetchDetail(); } }, [id]); if (loading) { return (
); } if (!data) { return (

未找到相关数据

); } return (
{data.user || "-"} {data.mcp_tools_name || "-"}
{data.token || "-"} {data.token && (
{data.status === "success" ? "成功" : "失败"} {calculateDuration(data.call_timestamp, data.finish_timestamp)} {formatTimestamp(data.call_timestamp)} {formatTimestamp(data.finish_timestamp)} {data.fail_msg && (
{data.fail_msg}
)}
{/* 请求参数 */}
{/* 工具响应 */}
); }; export default ToolsCallLogDetail;