fix: 优化占位图显示时序
1. AI 文字回复显示后延迟 3 秒再显示动态占位图 2. 延迟期间隐藏占位图,让用户有时间阅读文字 3. 只有 isGeneratingImageFlag=true 时才显示图片生成占位图 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
b60afb16cb
commit
2fc702b543
@ -301,8 +301,13 @@ export function Chat({
|
|||||||
(part: any) => part.type === "text" && part.text?.includes("<!-- GENERATING_IMAGE -->")
|
(part: any) => part.type === "text" && part.text?.includes("<!-- GENERATING_IMAGE -->")
|
||||||
);
|
);
|
||||||
if (hasGeneratingMarker) {
|
if (hasGeneratingMarker) {
|
||||||
console.log("[Chat] 🖼️ Detected GENERATING_IMAGE marker, showing placeholder");
|
console.log("[Chat] 🖼️ Detected GENERATING_IMAGE marker, will show placeholder after delay");
|
||||||
setIsGeneratingImageFlag(true);
|
// 🆕 延迟显示占位图,让用户先看到 AI 的文字回复
|
||||||
|
// 消息会立即添加到 appendedMessages 并显示,3 秒后再显示动态占位图
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log("[Chat] 🖼️ Now showing placeholder after 3s delay");
|
||||||
|
setIsGeneratingImageFlag(true);
|
||||||
|
}, 3000); // 延迟 3 秒,让用户有时间阅读文字
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🆕 检测是否包含图片(生成完成)
|
// 🆕 检测是否包含图片(生成完成)
|
||||||
|
|||||||
@ -230,12 +230,13 @@ function PureMessages({
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 🆕 正确的占位图逻辑
|
// 🆕 正确的占位图逻辑
|
||||||
// 优先级:isGeneratingImageFlag > (hasImageContent && status=ready) > isGeneratingImage > status
|
// 优先级:isGeneratingImageFlag > (hasImageContent && status=ready) > status
|
||||||
// 关键:isGeneratingImageFlag 有最高优先级,只有它变 false 且有图片时才隐藏
|
// 关键:只有 isGeneratingImageFlag=true 时才显示图片生成占位图
|
||||||
|
// isGeneratingImage(消息中的标记检测)不再直接控制占位图,由 chat.tsx 的延迟逻辑控制
|
||||||
|
|
||||||
if (isGeneratingImageFlag) {
|
if (isGeneratingImageFlag) {
|
||||||
// 后端正在生成图片,始终显示占位图
|
// 后端正在生成图片(延迟后设置),显示占位图
|
||||||
console.log("[Messages useEffect] isGeneratingImageFlag=true,强制显示占位图");
|
console.log("[Messages useEffect] isGeneratingImageFlag=true,显示生成占位图");
|
||||||
setShowThinkingWithDelay(true);
|
setShowThinkingWithDelay(true);
|
||||||
} else if (hasImageContent && status === "ready") {
|
} else if (hasImageContent && status === "ready") {
|
||||||
// 生成完成(flag=false)且有图片内容,延迟后隐藏占位图
|
// 生成完成(flag=false)且有图片内容,延迟后隐藏占位图
|
||||||
@ -244,17 +245,18 @@ function PureMessages({
|
|||||||
setShowThinkingWithDelay(false);
|
setShowThinkingWithDelay(false);
|
||||||
}, delayTime);
|
}, delayTime);
|
||||||
return () => clearTimeout(timer);
|
return () => clearTimeout(timer);
|
||||||
} else if (hasImageContent && !isGeneratingImage) {
|
} else if (hasImageContent) {
|
||||||
// 有图片内容且没有生成标记(可能是历史消息),直接隐藏
|
// 有图片内容,隐藏占位图
|
||||||
console.log("[Messages useEffect] 有图片内容无生成标记,隐藏占位图");
|
console.log("[Messages useEffect] 有图片内容,隐藏占位图");
|
||||||
|
setShowThinkingWithDelay(false);
|
||||||
|
} else if (isGeneratingImage && !isGeneratingImageFlag) {
|
||||||
|
// 消息中有生成标记但 flag 还没设置(延迟期间)
|
||||||
|
// 这时候应该显示 AI 文字回复,不显示占位图
|
||||||
|
console.log("[Messages useEffect] 生成标记存在但flag未设置(延迟期间),隐藏占位图让用户看文字");
|
||||||
setShowThinkingWithDelay(false);
|
setShowThinkingWithDelay(false);
|
||||||
} else if (isGeneratingImage) {
|
|
||||||
// 消息中检测到 GENERATING_IMAGE 标记
|
|
||||||
console.log("[Messages useEffect] 检测到消息中的生成标记,显示占位图");
|
|
||||||
setShowThinkingWithDelay(true);
|
|
||||||
} else if (status === "streaming" || status === "submitted") {
|
} else if (status === "streaming" || status === "submitted") {
|
||||||
// 正在处理中(分析意图或流式传输)
|
// 正在处理中(分析意图或流式传输),显示普通思考占位图
|
||||||
console.log("[Messages useEffect] streaming/submitted,显示占位图");
|
console.log("[Messages useEffect] streaming/submitted,显示思考占位图");
|
||||||
setShowThinkingWithDelay(true);
|
setShowThinkingWithDelay(true);
|
||||||
} else {
|
} else {
|
||||||
// ready 或其他状态:不显示占位图
|
// ready 或其他状态:不显示占位图
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user