From 5aae81c831c6c97f14c4df0530e44a7ff95e6b06 Mon Sep 17 00:00:00 2001 From: kevin Date: Fri, 19 Jun 2026 18:17:27 +0800 Subject: [PATCH] up --- .../src/components/AdminBotDirect.vue | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/meshmap_frontend/src/components/AdminBotDirect.vue b/meshmap_frontend/src/components/AdminBotDirect.vue index 146ab26..494ea48 100644 --- a/meshmap_frontend/src/components/AdminBotDirect.vue +++ b/meshmap_frontend/src/components/AdminBotDirect.vue @@ -128,13 +128,18 @@ async function reloadConversations() { if (!selectedBot.value) return try { const response = await getBotConversations(selectedBot.value.id, conversationPageSize, 0) - conversations.value = response.items + let items = response.items + // 用户通过“新建私聊”选中尚未有消息的节点时,本地有占位会话,但后端不会返回它。 + // 直接覆盖会让轮询自动取消选择,所以这里保留占位并 prepend 回去。 + if (selectedPeerNum.value != null && !items.some((c) => c.peer_node_num === selectedPeerNum.value)) { + const localPlaceholder = conversations.value.find((c) => c.peer_node_num === selectedPeerNum.value) + if (localPlaceholder) items = [localPlaceholder, ...items] + } + conversations.value = items unreadTotal.value = response.unread_total - // 第一次进入或目标会话被删除时自动选中第一个会话,避免空白页面。 - if (selectedPeerNum.value == null && response.items.length > 0) { - selectedPeerNum.value = response.items[0].peer_node_num - } else if (selectedPeerNum.value != null && !response.items.some((c) => c.peer_node_num === selectedPeerNum.value)) { - selectedPeerNum.value = response.items[0]?.peer_node_num ?? null + // 第一次进入时自动选中第一个会话,避免空白页面。 + if (selectedPeerNum.value == null && items.length > 0) { + selectedPeerNum.value = items[0].peer_node_num } } catch (err) { error.value = err instanceof Error ? err.message : String(err)