From 7d9f94984cfec45d1b8dcf5cff48d51ba24ffe14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=98=E9=A3=8E?= Date: Mon, 1 Dec 2025 14:23:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8MessageRecord=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD=E5=AE=9E=E7=8E=B0parseSystemMessage=E5=AE=9E=E7=94=A8?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=EF=BC=8C=E4=BB=8E=E7=B3=BB=E7=BB=9F=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E4=B8=AD=E6=8F=90=E5=8F=96=E7=BA=AF=E6=96=87=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E9=80=9A=E8=BF=87=E5=88=A0=E9=99=A4HTML=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E5=B9=B6=E4=B8=BA=E7=9B=B8=E5=85=B3=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BA=A2=E5=8C=85=E5=9B=BE=E6=A0=87=E6=9D=A5?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=B6=88=E6=81=AF=E6=B8=B2=E6=9F=93=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/MessageRecord/index.tsx | 17 ++++++---- Touchkebao/src/utils/filter.ts | 34 +++++++++++++++++++ 2 files changed, 44 insertions(+), 7 deletions(-) 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 44b01c97..23ea4a23 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 @@ -12,6 +12,7 @@ import TransferMessage from "./components/TransferMessage"; import { ChatRecord, ContractData, weChatGroup } from "@/pages/pc/ckbox/data"; import { formatWechatTime } from "@/utils/common"; import { getEmojiPath } from "@/components/EmojiSeclection/wechatEmoji"; +import { parseSystemMessage } from "@/utils/filter"; import styles from "./com.module.scss"; import { useWeChatStore } from "@/store/module/weChat/weChat"; import { useContactStore } from "@/store/module/weChat/contacts"; @@ -856,13 +857,15 @@ const MessageRecord: React.FC = ({ contract }) => { {group.messages .filter(v => [10000].includes(v.msgType)) - .map(msg => ( -
- ))} + .map(msg => { + // 解析系统消息,提取纯文本(移除img标签和_wc_custom_link_标签) + const parsedText = parseSystemMessage(msg.content); + return ( +
+ {parsedText} +
+ ); + })} {group.messages .filter(v => [570425393, 90000].includes(v.msgType)) diff --git a/Touchkebao/src/utils/filter.ts b/Touchkebao/src/utils/filter.ts index 199c2ce8..04058d51 100644 --- a/Touchkebao/src/utils/filter.ts +++ b/Touchkebao/src/utils/filter.ts @@ -86,3 +86,37 @@ export const messageFilter = (message: string) => { return message; } }; + +/** + * 解析系统消息中的HTML标签,提取纯文本 + * 例如: 你领取了许老板的<_wc_custom_link_>红包。 + * 提取为:🧧 你领取了许老板的红包 + */ +export const parseSystemMessage = (html: string): string => { + if (!html) return ""; + + let text = html; + + // 移除所有 标签 + text = text.replace(/]*>/gi, ""); + + // 提取 <_wc_custom_link_> 标签内的文本内容 + // 匹配 <_wc_custom_link_ ...>内容 + text = text.replace( + /<_wc_custom_link_[^>]*>(.*?)<\/_wc_custom_link_>/gi, + "$1", + ); + + // 清理多余的空格(将多个连续空格替换为单个空格) + text = text.replace(/\s+/g, " "); + + // 去除首尾空格 + text = text.trim(); + + // 如果消息内容包含红包相关关键词,在前面添加🧧图标 + if (/红包|hongbao/i.test(text)) { + text = `🧧 ${text}`; + } + + return text; +};