import type { ComponentType } from "react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; import { AlertCircle, CheckCircle, Clock, Info, XCircle } from "lucide-react"; import type { ExecuteResult, ExecuteResultDetail, ExecuteResultStatus } from "./types"; interface ExecuteResultDialogProps { open: boolean; onOpenChange: (open: boolean) => void; result: ExecuteResult | null; } type StatusConfig = { icon: ComponentType<{ className?: string }>; className: string; label: string; }; const statusConfig: Record = { success: { icon: CheckCircle, className: "text-success", label: "成功", }, warning: { icon: AlertCircle, className: "text-warning", label: "警告", }, error: { icon: XCircle, className: "text-destructive", label: "失败", }, info: { icon: Info, className: "text-info", label: "信息", }, }; export function ExecuteResultDialog({ open, onOpenChange, result }: ExecuteResultDialogProps) { return ( 执行结果 查看执行过程及返回结果。 {result && (
{result.success ? '执行成功' : '执行失败'}
{result.executedAt}
{result.details.map((detail: ExecuteResultDetail, index) => { const config = statusConfig[detail.status] ?? statusConfig.info; const Icon = config.icon; return (
{detail.step} {config.label}
{detail.message}
); })}
)}
); }