"use client"; import useSWR from "swr"; import { Loader2 } from "lucide-react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { ScrollArea } from "@/components/ui/scroll-area"; import { fetcher } from "@/lib/utils"; import type { AgentExecutionSnapshot } from "@/types/agent"; interface AgentExecutionSnapshotDialogProps { snapshotId?: string | null; open: boolean; onOpenChange: (open: boolean) => void; } export function AgentExecutionSnapshotDialog({ snapshotId, open, onOpenChange, }: AgentExecutionSnapshotDialogProps) { const { data, isLoading } = useSWR<{ success?: boolean; data?: AgentExecutionSnapshot }>( open && snapshotId ? `/api/agent-execution-snapshots/${snapshotId}` : null, fetcher ); const snapshot = data?.success ? data.data : null; const uploadedImageUrls = Array.isArray(snapshot?.requestPayload?.uploadedImageUrls) ? snapshot?.requestPayload?.uploadedImageUrls .map((item) => String(item || "").trim()) .filter(Boolean) : []; return ( 执行快照 查看本次风格化执行时使用的素材图、槽位提示词、参考图与模型。 {isLoading ? (
) : !snapshot ? (
暂无快照详情
) : (
风格化
{snapshot.presetName}
类型:{snapshot.presetType === "video" ? "视频" : "生图"}
分类:{snapshot.categoryName || "未分类"}
模型
{snapshot.resolvedModel?.displayName || snapshot.defaultModel?.displayName || "未记录"}
槽位:{snapshot.slotCount} 个
素材图:{snapshot.requiredUploadCount} 张
本次使用的 3 张素材图
{uploadedImageUrls.length > 0 ? (
{uploadedImageUrls.map((url, index) => (
{`素材图
{index === 0 ? "产品图1" : index === 1 ? "产品图2" : "模特图"}
))}
) : (
未记录素材图
)}
{snapshot.userInputText ? (
用户补充提示
{snapshot.userInputText}
) : null}
槽位详情
{snapshot.slots.map((slot, index) => (
{slot.title || slot.uploadLabel || `槽位 ${slot.slotIndex + 1}`}
序号 {slot.slotIndex + 1}
{slot.promptTemplate}
{slot.referenceImageUrls.length > 0 ? (
参考图
{slot.referenceImageUrls.map((url, imageIndex) => ( {`参考图 ))}
) : null}
))}
)}
); }