import { Button, Drawer, Input, Space, message } from 'antd'; import { useChat } from "ai/react"; import { CodeHighlight } from "@mantine/code-highlight"; import { DownloadOutlined } from '@ant-design/icons'; import { useRef, useEffect } from 'react'; import { useSessionStorage } from 'react-use'; export default function ChatAIDrawer({ open, onClose, onExport }) { const STORAGE_KEY = 'chat_history'; const [storedMessages, setStoredMessages] = useSessionStorage(STORAGE_KEY, '[]'); const { messages, input, handleSubmit, handleInputChange, isLoading, setMessages } = useChat({ api: "https://test-ai-quirkyai.vercel.app/api/chat", initialMessages: JSON.parse(storedMessages), }); const messagesEndRef = useRef(null); useEffect(() => { setStoredMessages(JSON.stringify(messages)); }, [messages, setStoredMessages]); // 新消息时自动滚动到底部 useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); // 修改导出函数,接收单条消息内容 const handleExport = (content) => { try { const jsonContent = JSON.parse(content); onExport?.(jsonContent); } catch (error) { console.log(error); message.error('导出失败,请重试'); } }; return ( AI 助手 } placement="right" width={600} open={open} onClose={onClose} >
{messages.map((message) => (
{message.role === 'assistant' ? 'AI 助手' : '用户'} {message.role === 'assistant' && ( )}
{message.role === "assistant" ? ( ) : (
{message.content}
)}
))}
); }