From 26b7eb7cd8437df2f022a258d7c599f81ce8f29c 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: Fri, 19 Sep 2025 16:34:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=B6=88=E6=81=AF=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E4=B8=8E=E8=AE=B0=E5=BD=95):=20=E5=A2=9E=E5=BC=BA=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E6=B6=88=E6=81=AF=E5=8A=9F=E8=83=BD=E4=B8=8E=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在消息输入组件中添加引用消息的逻辑,确保引用内容能够正确显示。同时,在消息记录组件中实现引用功能的处理,优化了状态管理,提升了用户体验。 --- .../components/MessageEnter/index.tsx | 13 +++++++++++- .../components/ClickMeau/index.tsx | 18 ++++++++++++----- .../components/MessageRecord/index.tsx | 20 +++++++++++++++++++ .../src/store/module/weChat/weChat.data.ts | 2 ++ Touchkebao/src/store/module/weChat/weChat.ts | 16 +++++++++++---- .../src/store/module/websocket/msgManage.ts | 2 +- 6 files changed, 60 insertions(+), 11 deletions(-) diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageEnter/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageEnter/index.tsx index e3073c7e..cca4650c 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageEnter/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageEnter/index.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import { Layout, Input, Button, Modal } from "antd"; import { SendOutlined, @@ -35,6 +35,17 @@ const MessageEnter: React.FC = ({ contract }) => { const updateTransmitModal = useWeChatStore( state => state.updateTransmitModal, ); + + const quoteMessageContent = useWeChatStore( + state => state.quoteMessageContent, + ); + + useEffect(() => { + if (quoteMessageContent) { + setInputValue(quoteMessageContent); + } + }, [quoteMessageContent]); + const handleSend = async () => { if (!inputValue.trim()) return; console.log("发送消息", contract); diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/ClickMeau/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/ClickMeau/index.tsx index a20b28c3..b9b69d97 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/ClickMeau/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/ClickMeau/index.tsx @@ -111,6 +111,9 @@ const ClickMenu: React.FC = ({ return timeDiffInSeconds <= 108; }; + const isText = (): boolean => { + return messageData.msgType === 1; + }; const menuItems = [ { key: "transmit", @@ -127,11 +130,16 @@ const ClickMenu: React.FC = ({ icon: , label: "多条转发", }, - { - key: "quote", - icon: , - label: "引用", - }, + + ...(isText() + ? [ + { + key: "quote", + icon: , + label: "引用", + }, + ] + : []), ...(isShowRecall() ? [ { diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx index 205d456e..530debf7 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx @@ -54,6 +54,11 @@ const MessageRecord: React.FC = ({ contract }) => { state => state.updateTransmitModal, ); + const currentContract = useWeChatStore(state => state.currentContract); + const updateQuoteMessageContent = useWeChatStore( + state => state.updateQuoteMessageContent, + ); + // 判断是否为表情包URL的工具函数 const isEmojiUrl = (content: string): boolean => { return ( @@ -680,6 +685,20 @@ const MessageRecord: React.FC = ({ contract }) => { seq: +new Date(), }); }; + const handQuote = (messageData: ChatRecord) => { + //判断如果是用户 + const isWechatUser = !!currentContract?.chatroomId; + const nickname = currentContract.nickname; + if (isWechatUser) { + } else { + console.log(isWechatUser, nickname); + //当前用户的昵称 + } + + updateQuoteMessageContent(JSON.stringify(messageData)); + //更新值 + console.log("handQuote 引入逻辑", messageData); + }; const handCommad = (action: string) => { switch (action) { @@ -693,6 +712,7 @@ const MessageRecord: React.FC = ({ contract }) => { break; case "quote": // 引用逻辑 + handQuote(contextMenu.messageData); break; case "recall": // 撤回逻辑 diff --git a/Touchkebao/src/store/module/weChat/weChat.data.ts b/Touchkebao/src/store/module/weChat/weChat.data.ts index 477d740b..ba677541 100644 --- a/Touchkebao/src/store/module/weChat/weChat.data.ts +++ b/Touchkebao/src/store/module/weChat/weChat.data.ts @@ -10,6 +10,8 @@ import { * 包含聊天消息、联系人管理、朋友圈等功能的状态和方法 */ export interface WeChatState { + quoteMessageContent: string; + updateQuoteMessageContent: (value: string) => void; // ==================== Transmit Module =========Start=========== /** 选中的聊天记录列表 */ selectedChatRecords: ChatRecord[]; diff --git a/Touchkebao/src/store/module/weChat/weChat.ts b/Touchkebao/src/store/module/weChat/weChat.ts index e9df46b0..a71d9279 100644 --- a/Touchkebao/src/store/module/weChat/weChat.ts +++ b/Touchkebao/src/store/module/weChat/weChat.ts @@ -27,6 +27,10 @@ import { export const useWeChatStore = create()( persist( (set, get) => ({ + quoteMessageContent: "", + updateQuoteMessageContent: (message: string) => { + set({ quoteMessageContent: message }); + }, // ==================== Transmit Module =========Start=========== /** 选中的聊天记录列表 */ selectedChatRecords: [], @@ -61,13 +65,17 @@ export const useWeChatStore = create()( // ==================== 聊天消息管理方法 ==================== /** 添加新消息到当前聊天 */ addMessage: message => { - const { wechatAccountId, wechatChatroomId, wechatFriendId } = message; + const { wechatChatroomId, wechatFriendId } = message; const currentContract = get().currentContract; if (currentContract) { + console.log( + currentContract.id === wechatFriendId || + currentContract.id === wechatChatroomId, + ); + if ( - currentContract.wechatAccountId === wechatAccountId && - (currentContract.id === wechatFriendId || - currentContract.id === wechatChatroomId) + currentContract.id === wechatFriendId || + currentContract.id === wechatChatroomId ) { set(state => ({ currentMessages: [...state.currentMessages, message], diff --git a/Touchkebao/src/store/module/websocket/msgManage.ts b/Touchkebao/src/store/module/websocket/msgManage.ts index 063ee6ce..beab2fbf 100644 --- a/Touchkebao/src/store/module/websocket/msgManage.ts +++ b/Touchkebao/src/store/module/websocket/msgManage.ts @@ -38,7 +38,7 @@ const messageHandlers: Record = { // 发送消息响应 CmdSendMessageResp: message => { console.log("发送消息响应", message); - // addMessage(message.friendMessage || message.chatroomMessage); + addMessage(message.friendMessage || message.chatroomMessage); // 在这里添加具体的处理逻辑 }, CmdSendMessageResult: message => {