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);