diff --git a/im-web/src/components/account/AccountSwitchMenu.vue b/im-web/src/components/account/AccountSwitchMenu.vue index a025e09..8f50dd1 100644 --- a/im-web/src/components/account/AccountSwitchMenu.vue +++ b/im-web/src/components/account/AccountSwitchMenu.vue @@ -55,7 +55,7 @@ {{ account.nickName }}
@{{ account.userName }}
-
ID: {{ account.id }}
+
= 0; idx--) { - const chat = chats[idx]; + const friendStore = useFriendStore(); + const onlineFriendIds = friendStore.onlineFriendIds || []; + // 获取当前会话列表 + let chats = this.findChats(); + let removedCount = 0; - // 只处理私聊会话 - if (chat.type === 'PRIVATE') { - const isOnline = onlineFriendIds.includes(chat.targetId); - + // 从后往前遍历,避免删除时索引错乱 + for (let idx = chats.length - 1; idx >= 0; idx--) { + const chat = chats[idx]; - if (!isOnline) { - // 标记为删除 - chat.delete = true; - chat.stored = false; - removedCount++; + // 只处理私聊会话 + if (chat.type === 'PRIVATE') { + const isOnline = onlineFriendIds.includes(chat.targetId); + + + if (!isOnline) { + // 标记为删除 + chat.delete = true; + chat.stored = false; + removedCount++; + } } } - } - - // 清理已删除的会话 - this.chats = this.chats.filter(chat => !chat.delete); - - // 保存到存储 - this.saveToStorage(true); - - console.log(`清理完成: 删除了 ${removedCount} 个离线会话,剩余 ${this.chats.length} 个会话`); - - return removedCount; - }, + + // 清理已删除的会话 + this.chats = this.chats.filter(chat => !chat.delete); + + // 保存到存储 + this.saveToStorage(true); + + console.log(`清理完成: 删除了 ${removedCount} 个离线会话,剩余 ${this.chats.length} 个会话`); + + return removedCount; + }, initChats(chatsData) { this.chats = []; this.privateMsgMaxId = chatsData.privateMsgMaxId || 0; @@ -373,6 +373,16 @@ export default defineStore('chatStore', { let chats = cacheChats || this.chats; // 刷新免打扰状态 const friendStore = useFriendStore(); + const onlineFriendIds = friendStore.onlineFriendIds || []; + chats = chats.filter(chat => { + // 保留群聊 + if (chat.type === 'GROUP') return true; + // 私聊只保留在线好友的 + if (chat.type === 'PRIVATE') { + return onlineFriendIds.includes(chat.targetId); + } + return true; + }); const groupStore = useGroupStore(); chats.forEach(chat => { if (chat.type == 'PRIVATE') {