From 2e62d1731791d6c63fec17ecf43d11beba786bec Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 31 Jan 2026 22:11:29 +0800 Subject: [PATCH] fix: preserve chat context after image generation by updating URL to /chat/id Co-authored-by: Cursor --- .../settings/admin-settings-client.tsx | 18 ++++++------- components/chat.tsx | 26 ++++++++++++++++--- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx index 2147b71..2f6a06d 100644 --- a/app/(admin)/settings/admin-settings-client.tsx +++ b/app/(admin)/settings/admin-settings-client.tsx @@ -2543,9 +2543,9 @@ export function AdminSettingsClient() { {siteSettings.bannerEnabled && ( <> -
+
- setSiteSettings({ ...siteSettings, bannerText: e.target.value })} @@ -2880,11 +2880,11 @@ export function AdminSettingsClient() {
- + -
+
- setTutorialVideoForm({ ...tutorialVideoForm, videoUrl: e.target.value })} placeholder="视频URL(上传后自动填充或手动输入)" @@ -2937,7 +2937,7 @@ export function AdminSettingsClient() {
-
+
@@ -2984,7 +2984,7 @@ export function AdminSettingsClient() { + @@ -3047,8 +3047,8 @@ export function AdminSettingsClient() {
)} - - + + )} {/* 导航链接列表 */} diff --git a/components/chat.tsx b/components/chat.tsx index b1474a8..84ccb6d 100644 --- a/components/chat.tsx +++ b/components/chat.tsx @@ -79,10 +79,18 @@ export function Chat({ // 最后一条已经是 AI 回复,说明生成已完成,清除 pending 状态 console.log("[Chat] 🎉 检测到生成已完成(最后消息是 AI 回复),清除 pending 状态"); completeGeneration(); - } else if (lastMessage?.role === "user") { - // 最后一条是用户消息,可能还在生成中,或者已经完成但页面数据过期 + } else if (lastMessage?.role === "user" || initialMessages.length === 0) { + // 最后一条是用户消息,或者消息列表为空(可能是从首页刷新) // 标记已尝试刷新,然后刷新页面获取最新数据 hasTriedRefreshRef.current = true; + + // 🆕 如果当前在首页但有 pending generation,先尝试跳转到 /chat/${id} + if (window.location.pathname === "/" || window.location.pathname === "") { + console.log("[Chat] 🔄 检测到首页有 pending 状态,跳转到 /chat/" + id); + window.location.href = `/chat/${id}`; + return; + } + console.log("[Chat] 🔄 检测到恢复的 pending 状态,刷新页面获取最新消息..."); // 延迟一小段时间再刷新,避免立即刷新 @@ -91,7 +99,7 @@ export function Chat({ }, 500); } } - }, [pendingGeneration, initialMessages, completeGeneration, router]); + }, [pendingGeneration, initialMessages, completeGeneration, router, id]); const { mutate } = useSWRConfig(); @@ -293,6 +301,12 @@ export function Chat({ // 🆕 收到消息,清除持久化状态 completeGeneration(); + // 🆕 如果当前在首页,更新 URL 为 /chat/${id},确保刷新后不会丢失消息 + if (window.location.pathname === "/" || window.location.pathname === "") { + console.log("[Chat] 更新 URL 到 /chat/" + id); + window.history.replaceState({}, "", `/chat/${id}`); + } + setMessages((prevMessages) => { if (prevMessages.some(m => m.id === messageData.id)) { return prevMessages; @@ -320,6 +334,12 @@ export function Chat({ mutate(unstable_serialize(getChatHistoryPaginationKey)); // 🆕 生成完成,清除持久化状态 completeGeneration(); + + // 🆕 如果当前在首页,更新 URL 为 /chat/${id},确保刷新后不会丢失消息 + if (window.location.pathname === "/" || window.location.pathname === "") { + console.log("[Chat] onFinish: 更新 URL 到 /chat/" + id); + window.history.replaceState({}, "", `/chat/${id}`); + } }, onError: (error) => { if (error instanceof ChatSDKError) {