重构MessageRecord组件,更新样式文件引用,优化消息转发逻辑,新增消息过滤功能以提升用户体验和代码可读性。
This commit is contained in:
@@ -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 => {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -26,7 +26,6 @@ export const useCkChatStore = createPersistStore<CkChatState>(
|
||||
return useCkChatStore.getState().isLoadWeChat;
|
||||
},
|
||||
updateIsLoadWeChat: (isLoadWeChat: boolean) => {
|
||||
console.log("updateIsLoadWeChat", isLoadWeChat);
|
||||
set({ isLoadWeChat });
|
||||
},
|
||||
//客服列表
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user