diff --git a/components/agents/AgentPresetDialog.tsx b/components/agents/AgentPresetDialog.tsx index c4f69559e..37cf3ceed 100644 --- a/components/agents/AgentPresetDialog.tsx +++ b/components/agents/AgentPresetDialog.tsx @@ -23,7 +23,7 @@ import { SelectValue, } from "@/components/ui/select"; import { ScrollArea } from "@/components/ui/scroll-area"; -import { fetcher } from "@/lib/utils"; +import { cn, fetcher } from "@/lib/utils"; import { imageGenerationService } from "@/services/canvas"; import { agentService } from "@/services/agents"; import type { @@ -47,6 +47,8 @@ interface AgentPresetDialogProps { onOpenChange: (open: boolean) => void; initialPreset?: AgentPreset | null; onSaved?: (preset: AgentPreset) => void; + entityLabel?: string; + theme?: "light" | "dark"; } export function AgentPresetDialog({ @@ -54,6 +56,8 @@ export function AgentPresetDialog({ onOpenChange, initialPreset, onSaved, + entityLabel = "智能体", + theme = "light", }: AgentPresetDialogProps) { const { data: modelsData } = useSWR<{ models?: Array<{ @@ -89,6 +93,11 @@ export function AgentPresetDialog({ ]); const fileInputRefs = useRef>([]); const avatarInputRef = useRef(null); + const isDark = theme === "dark"; + const entityNameLabel = `${entityLabel}名称`; + const dialogTitle = initialPreset ? `编辑${entityLabel}` : `新建${entityLabel}`; + const dialogDescription = `配置${entityLabel}名称、预览图、模型和槽位提示词。`; + const submitLabel = initialPreset ? `保存${entityLabel}` : `创建${entityLabel}`; const videoProviderTypes = useMemo( () => new Set(["volcano-video", "doubao-video", "qianwen-video", "fal-video", "ruxa-video"]), @@ -235,13 +244,13 @@ export function AgentPresetDialog({ try { const result = await imageGenerationService.uploadImage(file); if (!result.success || !result.data?.assetId || !result.data.url) { - throw new Error(result.error || "头像上传失败"); + throw new Error(result.error || "预览图上传失败"); } setAvatarAssetId(result.data.assetId); setAvatarUrl(result.data.url); - toast.success("头像上传成功"); + toast.success("预览图上传成功"); } catch (error) { - toast.error(error instanceof Error ? error.message : "头像上传失败"); + toast.error(error instanceof Error ? error.message : "预览图上传失败"); } finally { setAvatarUploading(false); event.target.value = ""; @@ -298,7 +307,7 @@ export function AgentPresetDialog({ const handleCreate = async () => { if (!name.trim()) { - toast.error("请输入智能体名称"); + toast.error(`请输入${entityNameLabel}`); return; } if (!defaultModelId) { @@ -339,15 +348,15 @@ export function AgentPresetDialog({ : await agentService.createPreset(basePayload); if (!result.success || !result.data) { - throw new Error(result.error || (initialPreset ? "更新智能体失败" : "创建智能体失败")); + throw new Error(result.error || (initialPreset ? `更新${entityLabel}失败` : `创建${entityLabel}失败`)); } - toast.success(initialPreset ? "智能体更新成功" : "智能体创建成功"); + toast.success(initialPreset ? `${entityLabel}更新成功` : `${entityLabel}创建成功`); onSaved?.(result.data); onOpenChange(false); resetState(); } catch (error) { - toast.error(error instanceof Error ? error.message : "创建智能体失败"); + toast.error(error instanceof Error ? error.message : `创建${entityLabel}失败`); } finally { setIsSubmitting(false); } @@ -361,26 +370,49 @@ export function AgentPresetDialog({ if (!nextOpen) resetState(); }} > - + button]:rounded-full [&>button]:border [&>button]:border-white/10 [&>button]:bg-white/[0.03]", + "[&>button]:text-white/58 [&>button]:opacity-100 [&>button:hover]:bg-white/[0.08] [&>button:hover]:text-white", + ] + : "border-slate-200 bg-white dark:border-slate-800 dark:bg-zinc-950" + )} + > - {initialPreset ? "编辑智能体" : "新建智能体"} - 配置模式名称、预览图、模型和槽位提示词。 + {dialogTitle} + + {dialogDescription} + - +
-
预览图
+
预览图
{avatarUrl ? ( 智能体预览图 ) : ( -
+
未上传
)} @@ -398,7 +430,12 @@ export function AgentPresetDialog({ type="button" variant="outline" size="sm" - className="h-11 px-5 text-base" + className={cn( + "h-11 px-5 text-base", + isDark + ? "border-white/10 bg-white/[0.03] text-white hover:bg-white/[0.08] hover:text-white" + : "" + )} onClick={() => avatarInputRef.current?.click()} disabled={avatarUploading} > @@ -413,29 +450,45 @@ export function AgentPresetDialog({
-
智能体名称
- setName(event.target.value)} /> +
+ {entityNameLabel} +
+ setName(event.target.value)} + className={cn( + isDark + ? "border-white/10 bg-black/30 text-white placeholder:text-white/22 focus-visible:ring-emerald-400/35" + : "" + )} + />
-
可见性
+
可见性
-
类型
+
类型
-
对应模型
+
对应模型