From 74400f51a02a09cb82bd6856b6e38d91ce65d41d Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Wed, 6 Aug 2025 21:29:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A5=BD=E5=8F=8B=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8D=E6=98=BE=E7=A4=BA=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- im-web/src/store/friendStore.js | 37 ++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/im-web/src/store/friendStore.js b/im-web/src/store/friendStore.js index ff95289..46d29fe 100644 --- a/im-web/src/store/friendStore.js +++ b/im-web/src/store/friendStore.js @@ -33,14 +33,36 @@ export default defineStore('friendStore', { this.friends.unshift(friend); } }, - updateOnlineStatus(onlineData) { - let friend = this.findFriend(onlineData.userId); - if (onlineData.terminal == TERMINAL_TYPE.WEB) { - friend.onlineWeb = onlineData.online; - } else if (onlineData.terminal == TERMINAL_TYPE.APP) { - friend.onlineApp = onlineData.online; + setOnlineStatus(onlineTerminals) { + this.friends.forEach((f) => { + let userTerminal = onlineTerminals.find((o) => f.id == o.userId); + if (userTerminal) { + f.online = true; + f.onlineWeb = userTerminal.terminals.indexOf(TERMINAL_TYPE.WEB) >= 0 + f.onlineApp = userTerminal.terminals.indexOf(TERMINAL_TYPE.APP) >= 0 + } else { + f.online = false; + f.onlineWeb = false; + f.onlineApp = false; + } + }); + }, + refreshOnlineStatus() { + let userIds = this.friends.filter((f) => !f.deleted).map((f) => f.id); + if (userIds.length == 0) { + return; } - friend.online = friend.onlineWeb || friend.onlineApp; + http({ + url: '/user/terminal/online?userIds=' + userIds.join(','), + method: 'GET' + }).then((onlineTerminals) => { + this.setOnlineStatus(onlineTerminals); + }) + // 30s后重新拉取 + clearTimeout(this.timer); + this.timer = setTimeout(() => { + this.refreshOnlineStatus(); + }, 30000) }, setDnd(id, isDnd) { let friend = this.findFriend(id); @@ -58,6 +80,7 @@ export default defineStore('friendStore', { method: 'GET' }).then(async (friends) => { this.setFriends(friends); + this.refreshOnlineStatus(); resolve(); }).catch(e => { reject(e);