From 7340b5e1350477a008885ea49140e67977548f39 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 4 Sep 2026 16:25:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B6=88=E6=81=AF=E9=A6=96?= =?UTF-8?q?=E9=A1=B5"=E7=BD=AE=E9=A1=B6=E8=81=8A=E5=A4=A9"=E8=AF=BB?= =?UTF-8?q?=E4=BA=86=E4=B8=AA=E4=B8=8D=E5=AD=98=E5=9C=A8=E7=9A=84=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E4=BB=8E=E6=9D=A5=E6=B2=A1=E6=9C=89=E8=A7=86?= =?UTF-8?q?=E8=A7=89=E6=95=88=E6=9E=9C=EF=BC=88=E7=AC=AC2=E7=AB=A0?= =?UTF-8?q?=E5=A4=8D=E6=B5=8B=E5=8F=91=E7=8E=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit normalizeConversations 里 pinned 读的是 item.pinned——原生 Tinode 订阅对象上根本 没有这个键,恒为 undefined。第5/6章的置顶开关点了之后,服务端确实存了,但这个 列表拿到的永远是"没置顶",用户会觉得这个开关是假的。 真实存放位置是订阅的原生 private.pinned 字段,但只对群聊成立:群聊置顶走 updateGroupMemberSettings,服务端真的写进 Subs.Private,会随原生 {meta} 同步下来 (真实验证:重连后能看到;同一连接内没有实时 {pres} 通知,所以点亮开关那一刻不会 立即反映在列表上,要等下一次重连,这个次要延迟这次没有顺手解决)。单聊置顶走的 是完全不同的 updateConversationSettings,服务端存进独立的 im_conversation_settings 表,从不写入原生 Subs.Private——不管等多久重连都不会在这里出现,这是真实的后端 架构缺口(没有批量查询会话设置的接口,前端不可能为渲染一屏列表去挨个 topic 发 请求核对置顶状态),已记录、这次没法在前端解决。 Co-Authored-By: Claude Opus 5 --- src/views/message-center-view.jsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/views/message-center-view.jsx b/src/views/message-center-view.jsx index ac27a586..bb1e4830 100644 --- a/src/views/message-center-view.jsx +++ b/src/views/message-center-view.jsx @@ -164,7 +164,18 @@ function normalizeConversations(chatList, myUserId) { // 在线状态只对单聊有意义:群不存在"在线",传 undefined 让 Avatar 不渲染那个状态点 online: isGroup ? undefined : !!item.online, muted: !!(item.acs && item.acs.isMuted && item.acs.isMuted()), - pinned: !!item.pinned + // 原来读的是 item.pinned——这个键在原生订阅对象上根本不存在,永远 undefined,置顶开关点了 + // 会话列表从来没有过任何视觉变化。真实存放位置是 subscription 原生 private.pinned 字段, + // 但只对**群聊**成立:group-management-view.jsx 的置顶走 updateGroupMemberSettings -> + // serveIMGroupMemberSettings,服务端确实写的是 Subs.Private,随原生 {meta} 同步下来(真实 + // 验证:开关点亮后要等下一次重连/刷新才会在这里体现——同一会话内没有实时 {pres} 通知去让 + // 已连接的这份 subscription 缓存失效,这是已知的、这次没有顺手解决的次要延迟,不是没生效)。 + // contact-management-view.jsx 的单聊置顶走的是完全不同的 updateConversationSettings -> + // serveIMConversationSettings,服务端存进独立的 im_conversation_settings 表,从不写入原生 + // Subs.Private——单聊置顶因此不管等多久重连都不会在这里出现,这是真实的后端架构缺口(没有 + // 批量查询会话设置的接口,前端也不可能为渲染一屏会话列表挨个按 topic 发请求),已记录到 + // 后端问题清单,不是这一行能修的。 + pinned: !!(item.private && item.private.pinned) }; }); }