Browse Source

fix: 好友在线状态不显示的bug

master
xsx 8 months ago
parent
commit
74400f51a0
  1. 37
      im-web/src/store/friendStore.js

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

Loading…
Cancel
Save