Spaces:
Sleeping
Sleeping
Update components/ai/WorkAssistantPanel.tsx
Browse files
components/ai/WorkAssistantPanel.tsx
CHANGED
|
@@ -241,7 +241,8 @@ export const WorkAssistantPanel: React.FC<WorkAssistantPanelProps> = ({ currentU
|
|
| 241 |
text: '',
|
| 242 |
thought: '',
|
| 243 |
timestamp: Date.now(),
|
| 244 |
-
images: base64Images
|
|
|
|
| 245 |
};
|
| 246 |
|
| 247 |
setMessages(prev => [...prev, newUserMsg, newAiMsg]);
|
|
@@ -320,17 +321,22 @@ export const WorkAssistantPanel: React.FC<WorkAssistantPanelProps> = ({ currentU
|
|
| 320 |
setIsThinkingExpanded(prev => ({ ...prev, [aiMsgId]: false }));
|
| 321 |
}
|
| 322 |
aiTextAccumulated += data.content;
|
| 323 |
-
setMessages(prev => prev.map(m => m.id === aiMsgId ? { ...m, text: aiTextAccumulated } : m));
|
|
|
|
|
|
|
|
|
|
| 324 |
} else if (data.type === 'error') {
|
| 325 |
-
setMessages(prev => prev.map(m => m.id === aiMsgId ? { ...m, text: `⚠️ 错误: ${data.message}
|
| 326 |
}
|
| 327 |
} catch (e) {}
|
| 328 |
}
|
| 329 |
}
|
| 330 |
}
|
|
|
|
|
|
|
| 331 |
|
| 332 |
} catch (error: any) {
|
| 333 |
-
setMessages(prev => prev.map(m => m.id === aiMsgId ? { ...m, text: `抱歉,处理失败: ${error.message}
|
| 334 |
} finally {
|
| 335 |
setIsProcessing(false);
|
| 336 |
}
|
|
@@ -504,6 +510,14 @@ export const WorkAssistantPanel: React.FC<WorkAssistantPanelProps> = ({ currentU
|
|
| 504 |
</div>
|
| 505 |
)}
|
| 506 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 507 |
<div className={`p-5 rounded-2xl shadow-sm text-sm overflow-hidden relative group w-full ${msg.role === 'user' ? 'bg-blue-600 text-white rounded-tr-none' : 'bg-white text-gray-800 border border-gray-100 rounded-tl-none'}`}>
|
| 508 |
{/* User Image Preview Grid */}
|
| 509 |
{msg.role === 'user' && sourceImages.length > 0 && (
|
|
|
|
| 241 |
text: '',
|
| 242 |
thought: '',
|
| 243 |
timestamp: Date.now(),
|
| 244 |
+
images: base64Images,
|
| 245 |
+
isSearching: enableSearch
|
| 246 |
};
|
| 247 |
|
| 248 |
setMessages(prev => [...prev, newUserMsg, newAiMsg]);
|
|
|
|
| 321 |
setIsThinkingExpanded(prev => ({ ...prev, [aiMsgId]: false }));
|
| 322 |
}
|
| 323 |
aiTextAccumulated += data.content;
|
| 324 |
+
setMessages(prev => prev.map(m => m.id === aiMsgId ? { ...m, text: aiTextAccumulated, isSearching: false } : m));
|
| 325 |
+
} else if (data.type === 'search') {
|
| 326 |
+
// Enable search visual
|
| 327 |
+
setMessages(prev => prev.map(m => m.id === aiMsgId ? { ...m, isSearching: true } : m));
|
| 328 |
} else if (data.type === 'error') {
|
| 329 |
+
setMessages(prev => prev.map(m => m.id === aiMsgId ? { ...m, text: `⚠️ 错误: ${data.message}`, isSearching: false } : m));
|
| 330 |
}
|
| 331 |
} catch (e) {}
|
| 332 |
}
|
| 333 |
}
|
| 334 |
}
|
| 335 |
+
// Cleanup
|
| 336 |
+
setMessages(prev => prev.map(m => m.id === aiMsgId ? { ...m, isSearching: false } : m));
|
| 337 |
|
| 338 |
} catch (error: any) {
|
| 339 |
+
setMessages(prev => prev.map(m => m.id === aiMsgId ? { ...m, text: `抱歉,处理失败: ${error.message}`, isSearching: false } : m));
|
| 340 |
} finally {
|
| 341 |
setIsProcessing(false);
|
| 342 |
}
|
|
|
|
| 510 |
</div>
|
| 511 |
)}
|
| 512 |
|
| 513 |
+
{/* Search Status Bubble */}
|
| 514 |
+
{msg.role === 'model' && msg.isSearching && (
|
| 515 |
+
<div className="flex items-center gap-2 bg-blue-50 text-blue-600 px-3 py-2 rounded-xl mb-2 text-xs border border-blue-100 animate-pulse w-fit">
|
| 516 |
+
<Globe size={14} className="animate-spin"/>
|
| 517 |
+
<span>正在联网搜索相关信息...</span>
|
| 518 |
+
</div>
|
| 519 |
+
)}
|
| 520 |
+
|
| 521 |
<div className={`p-5 rounded-2xl shadow-sm text-sm overflow-hidden relative group w-full ${msg.role === 'user' ? 'bg-blue-600 text-white rounded-tr-none' : 'bg-white text-gray-800 border border-gray-100 rounded-tl-none'}`}>
|
| 522 |
{/* User Image Preview Grid */}
|
| 523 |
{msg.role === 'user' && sourceImages.length > 0 && (
|