Parcourir la source

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

xsx il y a 7 mois
Parent
commit
74400f51a0
1 fichiers modifiés avec 30 ajouts et 7 suppressions
  1. 30 7
      im-web/src/store/friendStore.js

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