fix(frontend): 流式消息逐字显示动画 + 侧边栏会话切换修复

This commit is contained in:
2026-05-16 21:25:03 +08:00
parent 02a5067f8c
commit 15a22737a2
5 changed files with 176 additions and 29 deletions
+27 -1
View File
@@ -1,21 +1,40 @@
import { create } from 'zustand';
import type { Message } from '@/types/chat';
import type { IoTDevice, BackgroundThinkingStatus } from '@/types/chat';
interface ChatStore {
messages: Message[];
isTyping: boolean;
// 连续对话模式
continuousMode: boolean;
// 后台思考状态
backgroundThinkingStatus: BackgroundThinkingStatus;
// IoT 设备状态
iotDevices: IoTDevice[];
iotDevicesLastUpdated: number | null;
addMessage: (message: Message) => void;
appendToLastMessage: (content: string) => void;
finishStreaming: () => void;
setMessages: (messages: Message[]) => void;
setTyping: (typing: boolean) => void;
clearMessages: () => void;
setContinuousMode: (enabled: boolean) => void;
setBackgroundThinkingStatus: (status: BackgroundThinkingStatus) => void;
setIoTDevices: (devices: IoTDevice[]) => void;
}
export const useChatStore = create<ChatStore>((set) => ({
messages: [],
isTyping: false,
continuousMode: true,
backgroundThinkingStatus: 'idle',
iotDevices: [],
iotDevicesLastUpdated: null,
addMessage: (message) =>
set((state) => ({
@@ -54,9 +73,16 @@ export const useChatStore = create<ChatStore>((set) => ({
return { messages: msgs, isTyping: false };
}),
setMessages: (messages) => set({ messages }),
setMessages: (messages) => set({ messages, isTyping: false }),
setTyping: (typing) => set({ isTyping: typing }),
clearMessages: () => set({ messages: [], isTyping: false }),
setContinuousMode: (enabled) => set({ continuousMode: enabled }),
setBackgroundThinkingStatus: (status) => set({ backgroundThinkingStatus: status }),
setIoTDevices: (devices) =>
set({ iotDevices: devices, iotDevicesLastUpdated: Date.now() }),
}));