From aebdfe3d68f4c3b6fc097d01f39862e3e49556d0 Mon Sep 17 00:00:00 2001 From: xiamuceer Date: Wed, 31 Dec 2025 11:57:21 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E7=81=B5=E6=84=9F=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=8D=E6=96=B0=E5=BC=80=E5=A7=8B=E6=8C=89?= =?UTF-8?q?=E9=92=AE=EF=BC=8C=E6=94=AF=E6=8C=81=E5=9C=A8=E5=AF=B9=E8=AF=9D?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E4=B8=AD=E9=87=8D=E7=BD=AE=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/Inspiration.tsx | 49 +++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/Inspiration.tsx b/frontend/src/pages/Inspiration.tsx index a306717..57f25ff 100644 --- a/frontend/src/pages/Inspiration.tsx +++ b/frontend/src/pages/Inspiration.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; -import { Card, Input, Button, Space, Typography, message, Spin } from 'antd'; -import { SendOutlined, ArrowLeftOutlined } from '@ant-design/icons'; +import { Card, Input, Button, Space, Typography, message, Spin, Modal } from 'antd'; +import { SendOutlined, ArrowLeftOutlined, ReloadOutlined } from '@ant-design/icons'; import { inspirationApi } from '../services/api'; import { AIProjectGenerator, type GenerationConfig } from '../components/AIProjectGenerator'; @@ -36,6 +36,10 @@ interface CacheData { wizardData: Partial; initialIdea: string; selectedOptions: string[]; + lastFailedRequest: { + step: 'title' | 'description' | 'theme' | 'genre'; + context: Partial; + } | null; timestamp: number; } @@ -80,6 +84,9 @@ const Inspiration: React.FC = () => { // 生成配置 const [generationConfig, setGenerationConfig] = useState(null); + // Modal hook + const [modal, contextHolder] = Modal.useModal(); + // 滚动容器引用 const messagesEndRef = useRef(null); const chatContainerRef = useRef(null); @@ -114,6 +121,7 @@ const Inspiration: React.FC = () => { wizardData, initialIdea, selectedOptions, + lastFailedRequest, timestamp: Date.now() }; @@ -153,6 +161,10 @@ const Inspiration: React.FC = () => { setWizardData(cacheData.wizardData); setInitialIdea(cacheData.initialIdea); setSelectedOptions(cacheData.selectedOptions); + // 恢复失败请求信息,确保"重新生成"按钮可用 + if (cacheData.lastFailedRequest) { + setLastFailedRequest(cacheData.lastFailedRequest); + } console.log('✅ 已恢复上次的对话进度'); message.success('已恢复上次的对话进度', 2); @@ -194,7 +206,7 @@ const Inspiration: React.FC = () => { }, 500); return () => clearTimeout(timer); - }, [messages, currentStep, wizardData, initialIdea, selectedOptions, cacheLoaded]); + }, [messages, currentStep, wizardData, initialIdea, selectedOptions, lastFailedRequest, cacheLoaded]); // 自动滚动到底部 const scrollToBottom = () => { @@ -1041,6 +1053,7 @@ const Inspiration: React.FC = () => { minHeight: '100vh', background: 'var(--color-bg-base)', }}> + {contextHolder}