diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index f844347..f7a7053 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -116,8 +116,8 @@ export default function ChatPage() { const loadMessages = async () => { if (!id || !sessionId) return; const his = await ChatAPI.history(id, sessionId); - setMessages(his.messages); - setBranches(his.branches); + setMessages(Array.isArray(his.messages) ? his.messages : []); + setBranches(his.branches || {}); requestAnimationFrame(() => { if (highlightId) { const el = document.getElementById('msg-' + highlightId); @@ -185,7 +185,7 @@ export default function ChatPage() { content: text, createdAt: Date.now() }; - setMessages((m) => [...m, tempUser]); + setMessages((m) => [...(m || []), tempUser]); setStreaming({ active: true, text: '', retrieved: [], toolCalls: [] }); scrollBottom(); @@ -226,7 +226,7 @@ export default function ChatPage() { return { ...s, toolCalls: list }; }), onDone: (data) => { - setMessages((m) => [...m.filter((x) => x.id !== tempUser.id), data.user, data.assistant]); + setMessages((m) => [...(m || []).filter((x) => x.id !== tempUser.id), data.user, data.assistant]); setStreaming({ active: false, text: '', retrieved: [], toolCalls: [] }); setSessionRefresh((t) => t + 1); setAttachments([]); // 用完即清 @@ -236,7 +236,7 @@ export default function ChatPage() { onAborted: (data) => { // 已停止:保留已生成内容;user 消息也留下(用 tempUser 占位) setMessages((m) => [ - ...m.filter((x) => x.id !== tempUser.id), + ...(m || []).filter((x) => x.id !== tempUser.id), { ...tempUser, id: 'u-' + data.assistant.id }, // 占位 data.assistant ]); @@ -247,7 +247,7 @@ export default function ChatPage() { }, onError: (errMsg) => { msg.error('流式失败:' + errMsg); - setMessages((m) => m.filter((x) => x.id !== tempUser.id)); + setMessages((m) => (m || []).filter((x) => x.id !== tempUser.id)); setStreaming({ active: false, text: '', retrieved: [], toolCalls: [] }); } }, @@ -260,7 +260,7 @@ export default function ChatPage() { if (e?.name !== 'AbortError') { msg.error('请求失败:' + (e?.message ?? e)); } - setMessages((m) => m.filter((x) => x.id !== tempUser.id)); + setMessages((m) => (m || []).filter((x) => x.id !== tempUser.id)); setStreaming({ active: false, text: '', retrieved: [], toolCalls: [] }); } }; @@ -273,7 +273,7 @@ export default function ChatPage() { content: text, createdAt: Date.now() }; - setMessages((m) => [...m, tempUser]); + setMessages((m) => [...(m || []), tempUser]); scrollBottom(); const attText = buildAttachmentsText(); const content = attText ? `${text}\n\n${attText}` : text; @@ -286,14 +286,14 @@ export default function ChatPage() { model, imageUrls ); - setMessages((m) => [...m.filter((x) => x.id !== tempUser.id), res.user, res.assistant]); + setMessages((m) => [...(m || []).filter((x) => x.id !== tempUser.id), res.user, res.assistant]); setSessionRefresh((t) => t + 1); setAttachments([]); setImageUrls([]); scrollBottom(); } catch (e: any) { msg.error('发送失败:' + (e?.message ?? e)); - setMessages((m) => m.filter((x) => x.id !== tempUser.id)); + setMessages((m) => (m || []).filter((x) => x.id !== tempUser.id)); } };