重构MessageRecord组件,更新样式文件引用,优化消息转发逻辑,新增消息过滤功能以提升用户体验和代码可读性。

This commit is contained in:
超级老白兔
2025-10-24 14:44:25 +08:00
parent bb6453d3a2
commit e1d4f678ab
7 changed files with 73 additions and 24 deletions

View File

@@ -10,8 +10,9 @@ import SystemRecommendRemarkMessage from "./components/SystemRecommendRemarkMess
import { ChatRecord, ContractData, weChatGroup } from "@/pages/pc/ckbox/data";
import { formatWechatTime } from "@/utils/common";
import { getEmojiPath } from "@/components/EmojiSeclection/wechatEmoji";
import styles from "./MessageRecord.module.scss";
import styles from "./com.module.scss";
import { useWeChatStore } from "@/store/module/weChat/weChat";
import { useContactStore } from "@/store/module/weChat/contacts";
import { useCkChatStore } from "@/store/module/ckchat/ckchat";
import { fetchReCallApi } from "./api";
import TransmitModal from "./components/TransmitModal";
@@ -52,9 +53,7 @@ const MessageRecord: React.FC<MessageRecordProps> = ({ contract }) => {
state => state.updateSelectedChatRecords,
);
const updateTransmitModal = useWeChatStore(
state => state.updateTransmitModal,
);
const setTransmitModal = useContactStore(state => state.setTransmitModal);
const currentContract = useWeChatStore(state => state.currentContract);
const updateQuoteMessageContent = useWeChatStore(
@@ -682,7 +681,7 @@ const MessageRecord: React.FC<MessageRecordProps> = ({ contract }) => {
const handleForwardMessage = (messageData: ChatRecord) => {
updateSelectedChatRecords([messageData]);
updateTransmitModal(true);
setTransmitModal(true);
};
const handRecall = messageData => {

View File

@@ -19,6 +19,7 @@ import { formatWechatTime } from "@/utils/common";
import { MessageManager } from "@/utils/dbAction/message";
import { ChatSession } from "@/utils/db";
import { useUserStore } from "@/store/module/user";
import { messageFilter } from "@/utils/filter";
interface MessageListProps {}
@@ -632,7 +633,7 @@ const MessageList: React.FC<MessageListProps> = () => {
</div>
</div>
<div className={styles.messageContent}>
{session.content}
{messageFilter(session.content)}
</div>
</div>
</div>

View File

@@ -26,7 +26,6 @@ export const useCkChatStore = createPersistStore<CkChatState>(
return useCkChatStore.getState().isLoadWeChat;
},
updateIsLoadWeChat: (isLoadWeChat: boolean) => {
console.log("updateIsLoadWeChat", isLoadWeChat);
set({ isLoadWeChat });
},
//客服列表

View File

@@ -313,23 +313,23 @@ export const useWeChatStore = create<WeChatState>()(
} else {
params.friendMessage = [message];
}
const dataProcessingResult = await dataProcessing(params);
//如果成功就请求ai对话接口
set(() => ({
isLoadingAiChat: true,
}));
if (!dataProcessingResult) {
const messageContent = await aiChat({
friendId: getMessageId,
wechatAccountId: currentContract.wechatAccountId,
message: message,
});
// const dataProcessingResult = await dataProcessing(params);
// //如果成功就请求ai对话接口
// set(() => ({
// isLoadingAiChat: true,
// }));
// if (!dataProcessingResult) {
// const messageContent = await aiChat({
// friendId: getMessageId,
// wechatAccountId: currentContract.wechatAccountId,
// message: message,
// });
set(() => ({
quoteMessageContent: messageContent,
isLoadingAiChat: false,
}));
}
// set(() => ({
// quoteMessageContent: messageContent,
// isLoadingAiChat: false,
// }));
// }
} else {
// 更新其他聊天的未读消息数
const chatSessions = useCkChatStore.getState().chatSessions;

View File

@@ -123,7 +123,7 @@ const messageHandlers: Record<string, MessageHandler> = {
await db.kfUsers.clear();
await db.weChatGroup.clear();
await db.contracts.clear();
await db.newContractList.clear();
await db.newContactList.clear();
} finally {
(window as any).__CKB_AUTH_FAILED_SHOWN__ = false;
window.location.href = "/login";

View File

@@ -1 +1,51 @@
//消息过滤器
export const messageFilter = (message: string) => {
if (!message) return "";
try {
// 尝试解析为 JSON
const parsed = JSON.parse(message);
// 根据消息类型返回对应的显示文本
switch (true) {
// 图片消息:包含 previewImage 或 tencentUrl
case !!(parsed.previewImage || parsed.tencentUrl):
return "[图片]";
// 语音消息:包含 voiceUrl 或 voice
case !!(parsed.voiceUrl || parsed.voice):
return "[语音]";
// 视频消息:包含 videoUrl 或 video
case !!(parsed.videoUrl || parsed.video):
return "[视频]";
// 文件消息:包含 fileUrl 或 file
case !!(parsed.fileUrl || parsed.file):
return "[文件]";
// 表情消息:包含 emoji 或 emojiUrl
case !!(parsed.emoji || parsed.emojiUrl):
return "[表情]";
// 位置消息:包含 latitude 和 longitude
case !!(parsed.latitude && parsed.longitude):
return "[位置]";
// 链接消息:包含 linkUrl
case !!parsed.linkUrl:
return "[链接]";
// 文本消息:包含 text 或 content
case !!(parsed.text || parsed.content):
return parsed.text || parsed.content;
// 其他未知 JSON 格式
default:
return message;
}
} catch (error) {
// 如果不是 JSON 格式,直接返回原始消息
return message;
}
};