Kaynağa Gözat

消息的已读/未读状态3

mazhenhang 1 ay önce
ebeveyn
işleme
34e8561c5a

+ 9 - 9
LiangZhiYUMao/pages/message/chat.vue

@@ -1016,13 +1016,12 @@ export default {
         return;
       }
       
-      console.log('✅ TIM 对象已就绪,准备监听 MESSAGE_READ_BY_PEER 事件');
+      console.log('✅ TIM 对象已就绪,使用全局已读回执监听');
       
-      // 监听消息已读回执事件
+      // 🔥 使用 timManager 的全局已读回执监听
       const handleMessageReadByPeer = async (event) => {
-        console.log('=== 📖 收到已读回执事件 MESSAGE_READ_BY_PEER ===');
+        console.log('=== 📖 [chat.vue] 收到已读回执事件 ===');
         console.log('   - 触发时间:', new Date().toLocaleString());
-        console.log('   - 完整事件对象:', event);
         console.log('   - 事件数据:', JSON.stringify(event.data));
         console.log('   - 当前会话ID:', this.conversationID);
         console.log('   - 当前用户ID:', this.userId);
@@ -1074,9 +1073,10 @@ export default {
         }
       };
       
+      // 🔥 使用 timManager 的全局已读回执监听
       this.handleMessageReadByPeer = handleMessageReadByPeer;
-      timManager.tim.on(TIM.EVENT.MESSAGE_READ_BY_PEER, handleMessageReadByPeer);
-      console.log('✅ 已监听消息已读回执');
+      timManager.onMessageRead(handleMessageReadByPeer);
+      console.log('✅ 已通过 timManager 注册消息已读回执监听');
     },
     
     /**
@@ -2416,9 +2416,9 @@ export default {
     }
     
     // 清理已读回执监听
-    if (this.handleMessageReadByPeer && timManager.tim) {
-      timManager.tim.off(TIM.EVENT.MESSAGE_READ_BY_PEER, this.handleMessageReadByPeer);
-      console.log('✅ 已清理已读回执监听');
+    if (this.handleMessageReadByPeer) {
+      timManager.offMessageRead(this.handleMessageReadByPeer);
+      console.log('✅ 已通过 timManager 清理已读回执监听');
     }
     
     // 清理新消息监听

+ 41 - 0
LiangZhiYUMao/utils/tim-manager.js

@@ -6,6 +6,7 @@ class TIMManager {
     this.isLogin = false;
     this.userId = null;
     this.messageCallbacks = [];
+    this.messageReadCallbacks = []; // 🔥 添加已读回执回调列表
   }
 
   /**
@@ -42,6 +43,9 @@ class TIMManager {
     // 会话列表更新
     this.tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, this.onConversationListUpdated.bind(this));
     
+    // 🔥 消息已读回执(对方已读我发送的消息)
+    this.tim.on(TIM.EVENT.MESSAGE_READ_BY_PEER, this.onMessageReadByPeer.bind(this));
+    
     // 被踢下线
     this.tim.on(TIM.EVENT.KICKED_OUT, this.onKickedOut.bind(this));
     
@@ -198,6 +202,24 @@ class TIMManager {
     }
   }
 
+  /**
+   * 消息已读回执(对方已读我发送的消息)
+   */
+  onMessageReadByPeer(event) {
+    console.log('=== 📖 [全局] 收到已读回执事件 MESSAGE_READ_BY_PEER ===');
+    console.log('   - 触发时间:', new Date().toLocaleString());
+    console.log('   - 事件数据:', JSON.stringify(event.data));
+    
+    // 触发所有已读回执回调
+    this.messageReadCallbacks.forEach(callback => {
+      try {
+        callback(event);
+      } catch (error) {
+        console.error('❌ 已读回执回调执行失败:', error);
+      }
+    });
+  }
+
   /**
    * 会话列表更新
    */
@@ -483,6 +505,25 @@ class TIMManager {
       this.messageCallbacks.splice(index, 1);
     }
   }
+
+  /**
+   * 监听已读回执
+   */
+  onMessageRead(callback) {
+    this.messageReadCallbacks.push(callback);
+    console.log('✅ 已注册已读回执回调,当前回调数:', this.messageReadCallbacks.length);
+  }
+
+  /**
+   * 移除已读回执监听
+   */
+  offMessageRead(callback) {
+    const index = this.messageReadCallbacks.indexOf(callback);
+    if (index > -1) {
+      this.messageReadCallbacks.splice(index, 1);
+      console.log('✅ 已移除已读回执回调,剩余回调数:', this.messageReadCallbacks.length);
+    }
+  }
 }
 
 // 导出单例