From 68a5350c19358a32873e1ba42e73a46ef83b2414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Thu, 23 Oct 2025 12:55:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E5=AE=A2=E6=9C=8D=E5=88=97=E8=A1=A8=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E4=BC=98=E5=8C=96=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E6=8F=90=E5=8D=87=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E5=92=8C=E5=8F=AF=E8=AF=BB=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SidebarMenu/MessageList/index.tsx | 2 - Touchkebao/src/pages/pc/ckbox/weChat/main.ts | 6 -- .../src/store/module/weChat/message.data.ts | 39 +++++++++++++ Touchkebao/src/store/module/weChat/message.ts | 56 +++++++++++++++++++ .../src/store/module/websocket/msgManage.ts | 21 ++++--- 5 files changed, 107 insertions(+), 17 deletions(-) create mode 100644 Touchkebao/src/store/module/weChat/message.data.ts diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/SidebarMenu/MessageList/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/SidebarMenu/MessageList/index.tsx index 2e64e377..aac77a5f 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/SidebarMenu/MessageList/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/SidebarMenu/MessageList/index.tsx @@ -27,8 +27,6 @@ const MessageList: React.FC = () => { const kfSelected = useCkChatStore(state => state.kfSelected); const { sendCommand } = useWebSocketStore(); const onContactClick = (session: ContractData | weChatGroup) => { - console.log(session); - setCurrentContact(session, true); }; const [chatSessions, setChatSessions] = useState< diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/main.ts b/Touchkebao/src/pages/pc/ckbox/weChat/main.ts index de25c845..a74e2d28 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/main.ts +++ b/Touchkebao/src/pages/pc/ckbox/weChat/main.ts @@ -52,11 +52,6 @@ export const chatInitAPIdata = async () => { await asyncWeChatGroup(groupList); - // //获取控制终端列表 - // const kfUserList: KfUserListData[] = await getCustomerList(); - - // //获取用户列表 - // updateCustomerList(kfUserList); //获取标签列表 const countLables = await getCountLables(); await asyncCountLables(countLables); @@ -112,7 +107,6 @@ export const chatInitAPIdata = async () => { return { contractList, groupList, - kfUserList, }; } catch (error) { console.error("获取联系人列表失败:", error); diff --git a/Touchkebao/src/store/module/weChat/message.data.ts b/Touchkebao/src/store/module/weChat/message.data.ts new file mode 100644 index 00000000..102a5a02 --- /dev/null +++ b/Touchkebao/src/store/module/weChat/message.data.ts @@ -0,0 +1,39 @@ +export interface Message { + id: number; + wechatId: string; + nickname: string; + alias: string; + avatar: string; + region: string; + signature: string; + bindQQ: string; + bindEmail: string; + bindMobile: string; + createTime: string; + currentDeviceId: number; + isDeleted: boolean; + deleteTime: string; + groupId: number; + memo: string; + wechatVersion: string; + labels: string[]; + lastUpdateTime: string; + isOnline?: boolean; + momentsMax: number; + momentsNum: number; + [key: string]: any; +} + +//Store State +export interface MessageState { + //消息列表 + messageList: Message[]; + //当前选中的消息 + currentMessage: Message | null; + //更新消息列表 + updateMessageList: (messageList: Message[]) => void; + //更新消息状态 + updateMessageStatus: (messageId: number, status: string) => void; + //更新当前选中的消息 + updateCurrentMessage: (message: Message) => void; +} diff --git a/Touchkebao/src/store/module/weChat/message.ts b/Touchkebao/src/store/module/weChat/message.ts index e69de29b..60e6e74e 100644 --- a/Touchkebao/src/store/module/weChat/message.ts +++ b/Touchkebao/src/store/module/weChat/message.ts @@ -0,0 +1,56 @@ +import { create } from "zustand"; +import { persist } from "zustand/middleware"; +import { Message, MessageState } from "./message.data"; +export const useMessageStore = create()( + persist( + (set, get) => ({ + messageList: [], //消息列表 + currentMessage: null, //当前选中的消息 + updateMessageList: (messageList: Message[]) => set({ messageList }), //更新消息列表 + updateCurrentMessage: (message: Message) => + set({ currentMessage: message }), //更新当前选中的消息 + updateMessageStatus: (messageId: number, status: string) => + set({ + messageList: get().messageList.map(message => + message.id === messageId ? { ...message, status } : message, + ), + }), //更新消息状态 + }), + { + name: "message-storage", + partialize: state => ({ + messageList: [], + currentMessage: null, + }), + }, + ), +); +/** + * 更新当前选中的消息 + * @param message 消息 + * @returns void + */ +export const updateCurrentMessage = (message: Message) => + useMessageStore.getState().updateCurrentMessage(message); +/** + * 更新消息列表 + * @param messageList 消息列表 + * @returns void + */ +export const updateMessageList = (messageList: Message[]) => + useMessageStore.getState().updateMessageList(messageList); +/** + * 获取当前选中的消息 + * @returns Message | null + */ +export const getCurrentMessage = () => + useMessageStore.getState().currentMessage; + +/** + * 更新消息状态 + * @param messageId 消息ID + * @param status 状态 + * @returns void + */ +export const updateMessageStatus = (messageId: number, status: string) => + useMessageStore.getState().updateMessageStatus(messageId, status); diff --git a/Touchkebao/src/store/module/websocket/msgManage.ts b/Touchkebao/src/store/module/websocket/msgManage.ts index 54eddcc5..2a9166b6 100644 --- a/Touchkebao/src/store/module/websocket/msgManage.ts +++ b/Touchkebao/src/store/module/websocket/msgManage.ts @@ -1,11 +1,11 @@ //消息管理器 -import { getkfUserList, asyncKfUserList } from "@/store/module/ckchat/ckchat"; import { useWeChatStore } from "../weChat/weChat"; import { WebSocketMessage } from "./websocket"; import { deepCopy } from "@/utils/common"; import { Messages } from "./msg.data"; import { db } from "@/utils/db"; import { Modal } from "antd"; +import { useCustomerStore, updateCustomerList } from "../weChat/customer"; // 消息处理器类型定义 type MessageHandler = (message: WebSocketMessage) => void; const addMessage = useWeChatStore.getState().addMessage; @@ -20,21 +20,24 @@ const messageHandlers: Record = { CmdRequestWechatAccountsAliveStatusResp: message => { // console.log("微信账号存活状态响应", message); // 获取客服列表 - const kfUserList = deepCopy(getkfUserList()); + const customerList = deepCopy(useCustomerStore.getState().customerList); const wechatAccountsAliveStatus = message.wechatAccountsAliveStatus || {}; - // 遍历客服列表,更新存活状态 - kfUserList.forEach(kfUser => { - kfUser.isOnline = wechatAccountsAliveStatus[kfUser.id]; - }); + + // 遍历客服列表,更新在线状态 + const updatedCustomerList = customerList.map(customer => ({ + ...customer, + isOnline: wechatAccountsAliveStatus[customer.id] || false, + })); // 按在线状态排序,在线的排在前面 - kfUserList.sort((a, b) => { + updatedCustomerList.sort((a, b) => { if (a.isOnline && !b.isOnline) return -1; if (!a.isOnline && b.isOnline) return 1; return 0; }); - asyncKfUserList(kfUserList); + // 更新客服列表 + updateCustomerList(updatedCustomerList); }, // 发送消息响应 CmdSendMessageResp: message => { @@ -57,7 +60,7 @@ const messageHandlers: Record = { // 在这里添加具体的处理逻辑 receivedMsg(message.friendMessage || message.chatroomMessage); }, - CmdFriendInfoChanged: message => { + CmdFriendInfoChanged: () => { // console.log("好友信息变更", message); // 在这里添加具体的处理逻辑 },