diff --git a/src/components/ChatAi/index.jsx b/src/components/ChatAi/index.jsx index a1d9b5e..f3512d2 100644 --- a/src/components/ChatAi/index.jsx +++ b/src/components/ChatAi/index.jsx @@ -1,9 +1,10 @@ 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 { DownloadOutlined, EditOutlined, CheckOutlined, CloseOutlined } from '@ant-design/icons'; +import { useRef, useEffect, useState } from 'react'; import { useSessionStorage } from 'react-use'; +import Editor from "@monaco-editor/react"; export default function ChatAIDrawer({ open, onClose, onExport }) { const STORAGE_KEY = 'chat_history'; @@ -35,13 +36,44 @@ export default function ChatAIDrawer({ open, onClose, onExport }) { } }; + const [editingMessageId, setEditingMessageId] = useState(null); + const [editingContent, setEditingContent] = useState(''); + + // 优化编辑处理函数 + const handleEdit = (message) => { + if(isLoading) return; + setEditingContent(message.content); + setEditingMessageId(message.id); + }; + + const handleSaveEdit = () => { + try { + JSON.parse(editingContent); + setMessages(messages.map(msg => + msg.id === editingMessageId + ? { ...msg, content: editingContent } + : msg + )); + setEditingMessageId(null); + message.success('编辑成功'); + } catch (error) { + message.error('请输入有效的 JSON 格式'); + } + }; + + const handleCancelEdit = () => { + setEditingMessageId(null); + setEditingContent(''); + }; + return ( - AI 助手 +
+ AI 助手
} placement="right" - width={600} + width={800} open={open} onClose={onClose} + className="rounded-l-xl" > -
-
+
+
{messages.map((message) => (
-
- {message.role === 'assistant' ? 'AI 助手' : '用户'} +
+ + {message.role === 'assistant' ? 'AI 助手' : '用户'} + {message.role === 'assistant' && ( - - )} -
-
- {message.role === "assistant" ? ( - - ) : ( -
- {message.content} -
+ + + + )}
+ + {message.role === "assistant" ? ( +
+ {editingMessageId === message.id ? ( +
+ { + editor.getModel()?.updateOptions({ tabSize: 2 }); + editor.focus(); + }} + /> +
+ + +
+
+ ) : ( + + )} +
+ ) : ( +
+ {message.content} +
+ )}
))}
-
- +
+ - - + +
);