feat(消息输入与记录): 增强引用消息功能与状态管理

在消息输入组件中添加引用消息的逻辑,确保引用内容能够正确显示。同时,在消息记录组件中实现引用功能的处理,优化了状态管理,提升了用户体验。
This commit is contained in:
超级老白兔
2025-09-19 16:34:56 +08:00
parent 18f2ebf455
commit 26b7eb7cd8
6 changed files with 60 additions and 11 deletions

View File

@@ -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<MessageEnterProps> = ({ 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);

View File

@@ -111,6 +111,9 @@ const ClickMenu: React.FC<ClickMenuProps> = ({
return timeDiffInSeconds <= 108;
};
const isText = (): boolean => {
return messageData.msgType === 1;
};
const menuItems = [
{
key: "transmit",
@@ -127,11 +130,16 @@ const ClickMenu: React.FC<ClickMenuProps> = ({
icon: <CheckSquareOutlined />,
label: "多条转发",
},
{
key: "quote",
icon: <LinkOutlined />,
label: "引用",
},
...(isText()
? [
{
key: "quote",
icon: <LinkOutlined />,
label: "引用",
},
]
: []),
...(isShowRecall()
? [
{

View File

@@ -54,6 +54,11 @@ const MessageRecord: React.FC<MessageRecordProps> = ({ 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<MessageRecordProps> = ({ 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<MessageRecordProps> = ({ contract }) => {
break;
case "quote":
// 引用逻辑
handQuote(contextMenu.messageData);
break;
case "recall":
// 撤回逻辑

View File

@@ -10,6 +10,8 @@ import {
* 包含聊天消息、联系人管理、朋友圈等功能的状态和方法
*/
export interface WeChatState {
quoteMessageContent: string;
updateQuoteMessageContent: (value: string) => void;
// ==================== Transmit Module =========Start===========
/** 选中的聊天记录列表 */
selectedChatRecords: ChatRecord[];

View File

@@ -27,6 +27,10 @@ import {
export const useWeChatStore = create<WeChatState>()(
persist(
(set, get) => ({
quoteMessageContent: "",
updateQuoteMessageContent: (message: string) => {
set({ quoteMessageContent: message });
},
// ==================== Transmit Module =========Start===========
/** 选中的聊天记录列表 */
selectedChatRecords: [],
@@ -61,13 +65,17 @@ export const useWeChatStore = create<WeChatState>()(
// ==================== 聊天消息管理方法 ====================
/** 添加新消息到当前聊天 */
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],

View File

@@ -38,7 +38,7 @@ const messageHandlers: Record<string, MessageHandler> = {
// 发送消息响应
CmdSendMessageResp: message => {
console.log("发送消息响应", message);
// addMessage(message.friendMessage || message.chatroomMessage);
addMessage(message.friendMessage || message.chatroomMessage);
// 在这里添加具体的处理逻辑
},
CmdSendMessageResult: message => {