优化AI消息处理逻辑,区分AI辅助模式与AI接管模式,确保在接管模式下直接发送消息而不经过MessageEnter组件。同时,调整相关组件的状态管理,提升代码可读性和维护性。

This commit is contained in:
2025-11-27 15:07:34 +08:00
parent 65da14032b
commit a5cc4e5e18
4 changed files with 183 additions and 35 deletions

View File

@@ -8,17 +8,23 @@ import { Modal } from "antd";
import { useCustomerStore, updateCustomerList } from "../weChat/customer";
// 消息处理器类型定义
type MessageHandler = (message: WebSocketMessage) => void;
const addMessage = useWeChatStore.getState().addMessage;
const recallMessage = useWeChatStore.getState().recallMessage;
const receivedMsg = useWeChatStore.getState().receivedMsg;
const findMessageBySeq = useWeChatStore.getState().findMessageBySeq;
const findMessageById = useWeChatStore.getState().findMessageById;
const updateMessage = useWeChatStore.getState().updateMessage;
const updateMomentCommonLoading =
useWeChatStore.getState().updateMomentCommonLoading;
const addMomentCommon = useWeChatStore.getState().addMomentCommon;
const setFileDownloadUrl = useWeChatStore.getState().setFileDownloadUrl;
const setFileDownloading = useWeChatStore.getState().setFileDownloading;
// 延迟获取 store 方法,避免循环依赖问题
const getWeChatStoreMethods = () => {
const state = useWeChatStore.getState();
return {
addMessage: state.addMessage,
recallMessage: state.recallMessage,
receivedMsg: state.receivedMsg,
findMessageBySeq: state.findMessageBySeq,
findMessageById: state.findMessageById,
updateMessage: state.updateMessage,
updateMomentCommonLoading: state.updateMomentCommonLoading,
addMomentCommon: state.addMomentCommon,
setFileDownloadUrl: state.setFileDownloadUrl,
setFileDownloading: state.setFileDownloading,
};
};
// 消息处理器映射
const messageHandlers: Record<string, MessageHandler> = {
// 微信账号存活状态响应
@@ -46,6 +52,7 @@ const messageHandlers: Record<string, MessageHandler> = {
},
// 发送消息响应
CmdSendMessageResp: message => {
const { findMessageBySeq, updateMessage } = getWeChatStoreMethods();
const msg = findMessageBySeq(message.seq);
if (msg) {
updateMessage(message.seq, {
@@ -55,6 +62,7 @@ const messageHandlers: Record<string, MessageHandler> = {
}
},
CmdSendMessageResult: message => {
const { updateMessage } = getWeChatStoreMethods();
updateMessage(message.friendMessageId || message.chatroomMessageId, {
sendStatus: 0,
});
@@ -68,6 +76,7 @@ const messageHandlers: Record<string, MessageHandler> = {
//收到消息
CmdNewMessage: (message: Messages) => {
// 处理消息本身
const { receivedMsg } = getWeChatStoreMethods();
receivedMsg(message.friendMessage || message.chatroomMessage);
// 触发会话列表更新事件
@@ -107,6 +116,7 @@ const messageHandlers: Record<string, MessageHandler> = {
// setVideoUrl(message.friendMessageId, message.url);
},
CmdDownloadFileResult: message => {
const { setFileDownloadUrl, setFileDownloading } = getWeChatStoreMethods();
const messageId = message.friendMessageId || message.chatroomMessageId;
if (!messageId) {
@@ -124,6 +134,8 @@ const messageHandlers: Record<string, MessageHandler> = {
},
CmdFetchMomentResult: message => {
const { addMomentCommon, updateMomentCommonLoading } =
getWeChatStoreMethods();
addMomentCommon(message.result);
updateMomentCommonLoading(false);
},
@@ -162,16 +174,18 @@ const messageHandlers: Record<string, MessageHandler> = {
//撤回消息
CmdMessageRecalled: message => {
const { recallMessage } = getWeChatStoreMethods();
const MessageId = message.friendMessageId || message.chatroomMessageId;
recallMessage(MessageId);
},
CmdVoiceToTextResult: message => {
const { findMessageById, updateMessage } = getWeChatStoreMethods();
const msg = findMessageById(
message.friendMessageId || message.chatroomMessageId,
);
const content = JSON.parse(msg.content);
if (msg) {
const content = JSON.parse(msg.content);
updateMessage(msg.id, {
content: JSON.stringify({
...content,