"use client"; import { BotIcon, MessageSquareIcon, Radio, SquarePenIcon } from "lucide-react"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { SENTIMENT_AGENT_ID } from "@/core/sentiment-agent/config"; import { readSentimentAgentProfile } from "@/core/sentiment-agent/profile"; import { desensitize } from "@/lib/desensitize"; import { cn } from "@/lib/utils"; import { SentimentAgentProfileDialog } from "./sentiment-agent-profile-dialog"; /** * 「舆情分析」类型下的虚拟智能体卡片:只存在于前端(不落库 /api/agents), * 对话经 Gateway 转发外部 AG-UI 网关。名称 / 简介可编辑(localStorage), * 视觉与普通智能体卡片保持一致(网格 / 列表两种布局)。 */ export function SentimentAgentCard({ layout = "grid", className, }: { layout?: "grid" | "list"; className?: string; }) { const router = useRouter(); const [profile, setProfile] = useState(() => readSentimentAgentProfile()); const [editOpen, setEditOpen] = useState(false); // 编辑弹窗也可能挂在对话页,保存后广播事件,这里即时刷新卡片。 useEffect(() => { const onChange = () => setProfile(readSentimentAgentProfile()); window.addEventListener("sentiment-agent-profile-changed", onChange); return () => window.removeEventListener("sentiment-agent-profile-changed", onChange); }, []); const handleChat = () => { router.push(`/page/workspace/agents/${SENTIMENT_AGENT_ID}/chats/new`); }; const editButton = ( ); const chatButton = ( ); const badge = ( 舆情分析 ); const dialog = ( ); if (layout === "list") { return (
{desensitize(profile.name)} {badge}

{desensitize(profile.description)}

{editButton} {chatButton}
{dialog}
); } return (
{desensitize(profile.name)}
{badge}
{editButton}
{desensitize(profile.description)}
{chatButton} {dialog}
); }