From 5c688007c86bf0ceb122b2d9f9ffd0934adc4254 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 6 Sep 2026 15:58:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BC=9A=E8=AF=9D=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8A=8A=E7=B3=BB=E7=BB=9F=E9=80=9A=E7=9F=A5/?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E8=BD=AC=E5=8F=91=E6=B6=88=E6=81=AF=E7=9A=84?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E8=A1=8C=E6=81=92=E6=98=BE=E7=A4=BA=E6=88=90?= =?UTF-8?q?=E6=97=A0=E4=BF=A1=E6=81=AF=E9=87=8F=E7=9A=84"[=E6=B6=88?= =?UTF-8?q?=E6=81=AF]"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 现象:好友通过验证、群成员加入、群邀请卡片("邀请你加入群聊。")这类系统消息 (x-im-type=system_notice/system_action)和合并转发消息,点开会话看到的是完整的一句 人话,但会话列表的预览行不显示这句话,一律显示占位符"[消息]"。 根因:message-center-view.jsx 的 draftyPreview() 只认三种取值来源——纯字符串、 Drafty 附件实体(content.ent[],映射成"[图片]"等标签)、以及 content.txt——最后兜底 到"[消息]"。但 system_notice/system_action 的真实文案字段是 content.text(跟 chat-message.jsx 渲染这类消息时读的字段一致),合并转发消息的文案字段是 content.comment/content.title,三者都不是 content.txt,全部落进兜底分支。 修复:draftyPreview() 补上对 content.text(system_*)和 content.comment/ content.title(forward_bundle)的识别,命中就直接用这句真实文案,仍然兜底到 "[消息]"覆盖真正未知的内容形状。 验证:真实浏览器操作,两个全新注册账号之间邀请入群后,会话列表预览行正确显示 "邀请你加入群聊。",不再是"[消息]"。 Co-Authored-By: Claude Sonnet 5 --- src/views/message-center-view.jsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/views/message-center-view.jsx b/src/views/message-center-view.jsx index e7453762..6fc714ff 100644 --- a/src/views/message-center-view.jsx +++ b/src/views/message-center-view.jsx @@ -106,6 +106,14 @@ function draftyPreview(content) { const label = {IM: '[图片]', VD: '[视频]', AU: '[语音]', EX: '[文件]', TC: '[名片]', VC: '[通话]'}[content.ent[0].tp]; if (label) return label; } + // 服务端的 system_notice/system_action(好友通过、群成员加入、群邀请卡片等,见 chat-message.jsx + // 对 x-im-type 的处理)以及合并转发消息都不是 Drafty,也没有 `txt` 字段,真正的可读文案在 + // `text`(system_*)或 `comment`/`title`(forward_bundle)——原来这里只认 `txt`,这三类消息在 + // 会话列表的预览行一律回退成没有信息量的"[消息]",即使内容本身早就是一句完整人话 + // (比如"邀请你加入群聊。"),聊天页里点开看到的和列表预览完全对不上。 + if (typeof content.text === 'string' && content.text) return content.text; + if (typeof content.comment === 'string' && content.comment) return content.comment; + if (typeof content.title === 'string' && content.title) return '[聊天记录] ' + content.title; return content.txt || '[消息]'; }