diff --git a/.gitignore b/.gitignore index ce31e26..4e55091 100644 --- a/.gitignore +++ b/.gitignore @@ -62,4 +62,5 @@ chatlab-format.md *.bak AGENTS.md .claude/ -.agents/ \ No newline at end of file +.agents/ +resources/wx_send \ No newline at end of file diff --git a/src/pages/ChatPage.scss b/src/pages/ChatPage.scss index abd6368..8a6a9c5 100644 --- a/src/pages/ChatPage.scss +++ b/src/pages/ChatPage.scss @@ -1856,13 +1856,13 @@ } } -// 卡片类消息:气泡变透明,让卡片自己做视觉容器 -.message-bubble .bubble-content:has(.link-message), -.message-bubble .bubble-content:has(.card-message), -.message-bubble .bubble-content:has(.chat-record-message), -.message-bubble .bubble-content:has(.official-message), -.message-bubble .bubble-content:has(.channel-video-card), -.message-bubble .bubble-content:has(.location-message) { +// 卡片类消息:气泡变透明,让卡片自己做视觉容器(仅直接子元素,排除引用消息内的卡片) +.message-bubble .bubble-content:has(> .link-message), +.message-bubble .bubble-content:has(> .card-message), +.message-bubble .bubble-content:has(> .chat-record-message), +.message-bubble .bubble-content:has(> .official-message), +.message-bubble .bubble-content:has(> .channel-video-card), +.message-bubble .bubble-content:has(> .location-message) { background: transparent !important; padding: 0 !important; border: none !important; diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index b8192c9..e5389eb 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -4037,6 +4037,23 @@ function MessageBubble({ const q = (selector: string) => getDoc()?.querySelector(selector)?.textContent?.trim() || '' const xmlType = message.xmlType || q('appmsg > type') || q('type') + + // type 57: 引用回复消息,解析 refermsg 渲染为引用样式 + if (xmlType === '57') { + const replyText = q('title') || cleanMessageContent(message.parsedContent) || '' + const referContent = q('refermsg > content') || '' + const referSender = q('refermsg > displayname') || '' + return ( +
+
+ {referSender && {referSender}} + {renderTextWithEmoji(cleanMessageContent(referContent))} +
+
{renderTextWithEmoji(cleanMessageContent(replyText))}
+
+ ) + } + const title = message.linkTitle || q('title') || cleanMessageContent(message.parsedContent) || 'Card' const desc = message.appMsgDesc || q('des') const url = message.linkUrl || q('url')