congjiang 1 tháng trước cách đây
mục cha
commit
3bebf07b04
3 tập tin đã thay đổi với 320 bổ sung140 xóa
  1. 165 31
      src/stores/modules/webSocketStore.js
  2. 10 8
      src/views/im/chat/index.vue
  3. 145 101
      src/views/im/hook/messagesHook.js

+ 165 - 31
src/stores/modules/webSocketStore.js

@@ -406,13 +406,8 @@ export const useWebSocketStore = defineStore("webSocketStore", {
 
       reader.readAsArrayBuffer(data);
     },
-    // 处理本地消息
-    pushMessage(message) { 
 
-    },
-    modifyMessage(message) { 
-      
-    },
+
     // ************功能*************//
     // 添加消息回调
     addOnMessageCallback(cb) {
@@ -428,17 +423,120 @@ export const useWebSocketStore = defineStore("webSocketStore", {
       );
     },
 
+    // 处理本地消息
+    pushMessage(message, sessionId = null) {
+      if(!sessionId){
+        sessionId = message.from;
+      } 
+      if (!messageList[sessionId]) {
+        messageList[sessionId] = [];
+      }
+      messageList[sessionId].push(message);
+      // 检测当前消息
+      if (this.toUserInfo.uuid === sessionId) { 
+        this.messages.push(message);
+        this.indexs +=1;
+      }
+      // 更新会话最新消息
+      this.updateSessionNewMessage(message, sessionId)
+    },
+    modifyMessageId(message, msg, sessionId = null) { 
+      if(!sessionId){
+        sessionId = message.from;
+      }
+      if (!messageList[sessionId]) {
+        messageList[sessionId] = [];
+      }
+      messageList[sessionId] = messageList[sessionId].map(item => {
+        if (!item.id && item.msgId + '' === msg?.msgId + '') return {...item, id: msg.id, msgId: undefined};
+        if (item.id + '' === msg?.msgId + '') return {...item, content: "", url: ""};
+        return item;
+      });
+      // 检测当前消息
+      if (this.toUserInfo.uuid === sessionId) { 
+        this.messages = this.messages.map(item => {
+          if (!item.id && item.msgId + '' === message.msgId + '') return {...item, id: msg.id, msgId: undefined};
+          if (item.id + '' === msg?.msgId + '') return {...item, content: "", url: ""};
+          return item;
+        });
+      }
+      console.log("修改消息", message, sessionId, messageList, this.messages);
+    },
+    modifyMessage(message, msgId, sessionId = null) { 
+      if(!sessionId){
+        sessionId = message.from;
+      } 
+      if (!messageList[sessionId]) {
+        messageList[sessionId] = [];
+      }
+      messageList[sessionId] = messageList[sessionId].map(item => {
+        if (item.id + '' === msgId + '') return {...item, content: "", url: ""};
+        return item;
+      });
+      // 检测当前消息
+      if (this.toUserInfo.uuid === sessionId) { 
+        this.messages = this.messages.map(item => {
+          if (item.id + '' === msgId + '') return {...item, content: "", url: ""};
+          return item;
+        });
+      }
+    },
+    deleteMessage(message, msgId, sessionId = null) { 
+      if(!sessionId){
+        sessionId = message.from;
+      } 
+      if (!messageList[sessionId]) {
+        messageList[sessionId] = [];
+      }
+      console.log("删除消息", message, sessionId, messageList, this.messages);
+      messageList[sessionId] = messageList[sessionId].filter(item => {
+        if (item.id + '' === msgId + '') return false;
+        return true;
+      });
+      // 检测当前消息
+      if (this.toUserInfo.uuid === sessionId) { 
+        this.messages = this.messages.filter(item => {
+          if (item.id + '' === msgId + '') return false;
+          return true;
+        });
+      }
+    },
+    // 获取会话消息
+    getSessionMessages(sessionId) { 
+      if (!messageList[sessionId]) {
+        messageList[sessionId] = [];
+      }
+      return [...messageList[sessionId]];
+    },
+    // 设置当前会话消息
+    setSessionMessages(sessionId, messages) { 
+      if (!messageList[sessionId]) {
+        messageList[sessionId] = [];
+      }
+      messageList[sessionId] = Array.isArray(messages)?messages:(typeof messages === 'object'?[messages]:[]);
+    },
+    // 更换会话
+    changeSessionMessage(sessionId) { 
+      this.sessionId = sessionId;
+      this.messages = this.getSessionMessages(sessionId);
+    },
+
     // 获取历史消息
     async getMessages(params) {
       const router = useRouter();
       const systemStore = useSystemStore();
-      if (this.sessionId){
-        messageList[this.sessionId] = [...this.messages]
-      }
-      this.messages = [];
-      this.sessionId = this.toUserInfo.uuid //params.uuid;
-      if (messageList[this.sessionId]){
-        this.messages = messageList[this.sessionId];
+      // if (this.sessionId){
+      //   messageList[this.sessionId] = [...this.messages]
+      // }
+      // this.messages = [];
+      // this.sessionId = this.toUserInfo.uuid //params.uuid;
+      // if (messageList[this.sessionId]){
+      //   this.messages = messageList[this.sessionId];
+      //   return;
+      // }
+      this.sessionId = this.toUserInfo.uuid;
+      this.messages = this.getSessionMessages(this.sessionId);
+      if (this.messages.length > 0) {
         return;
       }
       this.loading = true  // 开始加载
@@ -449,13 +547,15 @@ export const useWebSocketStore = defineStore("webSocketStore", {
           friendUsername: params.friendUsername,
         });
         if(res.code == 200){
-          this.messages = (res.data || []).map((item) => {
-            item.avatar = item.avatar
-              ? `${import.meta.env.VITE_IM_PATH_FIlE}${item.avatar}`
-              : item.avatar;
-            return item;
-          });
-          return this.messages;
+          // this.messages = (res.data || []).map((item) => {
+          //   item.avatar = item.avatar
+          //     ? `${import.meta.env.VITE_IM_PATH_FIlE}${item.avatar}`
+          //     : item.avatar;
+          //   return item;
+          // });
+          this.setSessionMessages(this.sessionId, (res.data || []));
+          this.changeSessionMessage(this.sessionId);
+          // return this.messages;
         }else{
           showDialog({
             title: '提示',
@@ -473,6 +573,42 @@ export const useWebSocketStore = defineStore("webSocketStore", {
         this.loading = false // 结束加载
       }
     },
+    // 更新会话列表消息
+    updateSessionNewMessage(message, sessionId, msg = null) { 
+      const systemStore = useSystemStore();
+      let index = systemStore.ImsessionList.findIndex(val=> val.uuid == sessionId);
+      // 已读未读
+      let unReadNum = 0;
+      const ts = message.timestamp || Math.floor(Date.now() / 1000);
+      const time = new Date(ts).toISOString().replace("T", " ").split(".")[0];
+      // 消息类型映射
+      const mapSet = {
+        [MsgType.MSG_TYPE.FILE]: '[文件]',
+        [MsgType.MSG_TYPE.IMAGE]: '[图片]',
+        [MsgType.MSG_TYPE.AUDIO]: '[音频]',
+        [MsgType.MSG_TYPE.VIDEO]: '[视频]',
+        [MsgType.MSG_TYPE.AUDIO_ONLINE]: '[语音通话]',
+        [MsgType.MSG_TYPE.VIDEO_ONLINE]: '[视频通话]',
+        // [Constant.CANCELL_AUDIO_ONLINE]:'[通话结束]',
+        // [Constant.REJECT_AUDIO_ONLINE]: '[对方拒绝]',
+        // [Constant.CANCELL_VIDEO_ONLINE]: '[通话结束]',
+        // [Constant.REJECT_VIDEO_ONLINE]: '[对方拒绝]',
+      };
+      // 检测最新消息
+      let lastMsg = message.contentType === MsgType.MSG_TYPE.TEXT || message.contentType === MsgType.MSG_TYPE.NOTICE ? (msg?msg.content : message.content) : (mapSet[message.contentType] || '[语音视频]');
+      // 更新
+      if(index >= 0){
+        systemStore.ImsessionList = systemStore.ImsessionList.map((item, i)=>{
+          if(i == index){
+            item.message = lastMsg;
+            item.lastTime = time;
+            item.unReadNum = item.unReadNum + 1;
+          }
+          return item;
+        })
+      }
+    },
+
     // 更新缓存里面的会话列表  type:0 发送者   1:接收者
     updateSessionList(payload,type = 0,msg) {
       const walletStore = useWalletStore();
@@ -585,13 +721,12 @@ export const useWebSocketStore = defineStore("webSocketStore", {
       }
     },
     // 删除会话
-    funDeleteMessage(message) {
-      const walletStore = useWalletStore();
+    funDeleteSessionMessage(message, msg) {
       if (message.messageType == MsgType.MESSAGE_DELETE_FRIEND || message.messageType == MsgType.DELETE_GROUP || message.messageType == MsgType.REMOVE_GROUP || message.messageType == MsgType.EXIT_GROUP) {
-        let msg;
-        try {
-          msg = JSON.parse(message.content);
-        } catch (e) { }
+        // let msg;
+        // try {
+        //   msg = JSON.parse(message.content);
+        // } catch (e) { }
 
         if (msg?.users?.includes(message.to) || message.messageType == MsgType.DELETE_GROUP) {
           this.funDeleteDelAuth(message.from);
@@ -599,9 +734,8 @@ export const useWebSocketStore = defineStore("webSocketStore", {
         }
       }
     },
-    
     // 恢复会话
-    funRestoreMessage(message) {
+    funRestoreSessionMessage(message) {
       if (message.messageType == MsgType.CREATE_GROUP || message.messageType == MsgType.JION_GROUP || message.messageType == MsgType.INVITATION_GROUP || message.messageType == MsgType.MESSAGE_PASS_FRIEND) {
         this.chatRefresh += 1;
         if (message.messageType == MsgType.JION_GROUP || message.messageType == MsgType.INVITATION_GROUP || message.messageType == MsgType.MESSAGE_PASS_FRIEND) {
@@ -610,6 +744,7 @@ export const useWebSocketStore = defineStore("webSocketStore", {
       }
     },
 
+    // 语音视频通知
     // 群通知
     funGroupNotice(msg){
       this.toUserInfo = {
@@ -620,12 +755,11 @@ export const useWebSocketStore = defineStore("webSocketStore", {
     },
     // 群消息置顶
     funGroupTop(message = null) { 
-
     },
 
     // ************ 发送方 方法 ************//
     //  删除好友申请
-    deleteMessage(uuid){
+    deleteFriend(uuid){
       if (this.applyfriend[uuid]) {
         delete this.applyfriend[uuid]
       }
@@ -639,7 +773,7 @@ export const useWebSocketStore = defineStore("webSocketStore", {
         //  delete this.applyfriend[message.from]
         // }
         // this.unread = Object.keys(this.applyfriend).length > 0;
-        this.deleteMessage(message.from);
+        this.deleteFriend(message.from);
       }
     },
 

+ 10 - 8
src/views/im/chat/index.vue

@@ -359,7 +359,11 @@ const scrollToBottom = () => {
     if (chatListRef.value) {
       const el = chatListRef.value;
       // el.scrollTop = el.scrollHeight;
-      el.scrollTo(0, el.scrollHeight);
+      setTimeout(() => {
+        el.scrollTo({
+          left: 0, top: el.scrollHeight + 100,behavior: 'smooth'
+        });
+      }, 200);
     }
   });
 };
@@ -487,9 +491,9 @@ const closeMessaageBurning = ()=>{
 }
 // 撤回消息
 const revokeMessage = (message)=>{
-  if(message.to != walletStore.account){
-    return;
-  }
+  // if(message.to != walletStore.account){
+  //   return;
+  // }
   wsStore.sendMessage({
     content: JSON.stringify({ 
       content: '',
@@ -724,7 +728,7 @@ const sendMessage = () => {
       cc = [0]
     }
   }
-
+console.log(wsStore.toUserInfo);
   const message = {
     content: JSON.stringify({ 
       content: text.value,
@@ -826,9 +830,7 @@ onMounted(async () => {
     messageType: wsStore.toUserInfo.type == 'user'?1:2, //1:个人  2:群组
     friendUsername: wsStore.toUserInfo.type == 'user'?route.query.uuid : walletStore.account
   });
-  setTimeout(() => {
-    scrollToBottom();
-  }, 200);
+  scrollToBottom();
   document.addEventListener("click", handleClickOutside);
 });
 

+ 145 - 101
src/views/im/hook/messagesHook.js

@@ -25,9 +25,21 @@ const formatMessageExt = (message, ext) => {
 // 格式化头像地址
 const formatAvatarUrl = (url) => url && /^https?:\/\//.test(url) ? url: (IM_PATH + (url || ''))
 
-// 发送消息处理
-export const setMessageHook = (message, state) => {
-  const wsStore = useWebSocketStore();
+// 消息通知
+const notifications = (state)=>{
+  // 检测是否开启免打扰
+  if (!state.toUserInfo.slience) {
+    setupNotifications(1)
+  }
+}
+
+/**
+ * 发送消息处理
+ * @param {{}} message 
+ * @param {useWebSocketStore} wsStore 
+ */
+export const setMessageHook = (message, wsStore) => {
+  // const wsStore = useWebSocketStore();
   const walletStore = useWalletStore();
   console.log('发送消息',message)
 
@@ -46,75 +58,100 @@ export const setMessageHook = (message, state) => {
 
   // 处理个人消息撤回
   if (message.messageType === MsgType.MESSAGE_REVOKE) { 
-    wsStore.messages = wsStore.messages.filter(item => {
-      if (item.id+'' === msg.msgId+'') return false;
-      return true;
-    });
+    // wsStore.messages = wsStore.messages.filter(item => {
+    //   if (item.id+'' === msg.msgId+'') return false;
+    //   return true;
+    // });
+    console.log('消息撤回',message)
+    wsStore.deleteMessage(message, msg.msgId, msg.to);
   }
 
-  // 语音和视频挂断消息处理
-  if (message.contentType === Constant.CANCELL_AUDIO_ONLINE || message.contentType === Constant.CANCELL_VIDEO_ONLINE) {
-    state.messages.push({
+  // 语音和视频挂断/拒接消息处理
+  if ([Constant.CANCELL_AUDIO_ONLINE, Constant.CANCELL_VIDEO_ONLINE, Constant.REJECT_AUDIO_ONLINE, Constant.REJECT_VIDEO_ONLINE].includes(message.contentType)) {
+    // wsStore.messages.push({
+    //   ...message,
+    //   content: '[通话结束]',
+    //   sender: wsStore.toUserInfo.sender || {
+    //     uuid: walletStore.account,
+    //     nickname: walletStore.username,
+    //     avatar: walletStore.avatar,
+    //   },
+    // });
+    // wsStore.indexs +=1;
+    wsStore.pushMessage({
       ...message,
-      content: '[通话结束]',
+      toUsername: message.to,
+      content:message.contentType === Constant.REJECT_AUDIO_ONLINE || message.contentType === Constant.REJECT_VIDEO_ONLINE?'[对方拒绝]':'[通话结束]',
       sender: wsStore.toUserInfo.sender || {
         uuid: walletStore.account,
         nickname: walletStore.username,
         avatar: walletStore.avatar,
       },
     });
-    wsStore.indexs +=1;
   }
   // 语音和视频拒绝消息处理
-  if (message.contentType === Constant.REJECT_AUDIO_ONLINE || message.contentType === Constant.REJECT_VIDEO_ONLINE) {
-    state.messages.push({
-      ...message,
-      content: '[对方拒绝]',
-      sender: wsStore.toUserInfo.sender || {
-        uuid: walletStore.account,
-        nickname: walletStore.username,
-        avatar: walletStore.avatar,
-      },
-    });
-    wsStore.indexs +=1;
-  }
+  // if (message.contentType === Constant.REJECT_AUDIO_ONLINE || message.contentType === Constant.REJECT_VIDEO_ONLINE) {
+  //   wsStore.messages.push({
+  //     ...message,
+  //     content: '[对方拒绝]',
+  //     sender: wsStore.toUserInfo.sender || {
+  //       uuid: walletStore.account,
+  //       nickname: walletStore.username,
+  //       avatar: walletStore.avatar,
+  //     },
+  //   });
+  //   wsStore.indexs +=1;
+  // }
   // 文本消息
   if (message.contentType == MsgType.MSG_TYPE.TEXT) {
-    state.messages.push(formatMessageExt({
+    // state.messages.push(formatMessageExt({
+    //   ...message,
+    //   toUsername: message.friendUsername
+    // }, msg));
+    // wsStore.indexs +=1;
+    wsStore.pushMessage(formatMessageExt({
       ...message,
       toUsername: message.friendUsername
     }, msg));
-    wsStore.indexs +=1;
   }
   // 音频消息
   if (message.contentType === MsgType.MSG_TYPE.AUDIO) {
     const blob = new Blob([message.file], { type: message.fileSuffix });
     const url = URL.createObjectURL(blob);
-
-    state.messages.push(formatMessageExt({
+    wsStore.pushMessage(formatMessageExt({
       ...message,
       toUsername: message.to,
       localUrl: url,
     }, msg));
-    wsStore.indexs +=1;
+    // state.messages.push(formatMessageExt({
+    //   ...message,
+    //   toUsername: message.to,
+    //   localUrl: url,
+    // }, msg));
+    // wsStore.indexs +=1;
   }
   // 图片
   if (message.contentType === MsgType.MSG_TYPE.IMAGE) {
     const blob = new Blob([message.file], { type: message.fileSuffix });
     const url = URL.createObjectURL(blob);
-    state.messages.push(formatMessageExt({
+    wsStore.pushMessage(formatMessageExt({
       ...message,
       toUsername: message.to,
       localUrl: url,
     }, msg));
-    wsStore.indexs +=1;
+    // state.messages.push(formatMessageExt({
+    //   ...message,
+    //   toUsername: message.to,
+    //   localUrl: url,
+    // }, msg));
+    // wsStore.indexs +=1;
   }
 
 
   // 同步更新会话列表缓存
-  if ((MsgType.MSG_TYPE_MAP.indexOf(message.contentType) >= 0 && !message.type) || msgType.includes(message.contentType)){
-    wsStore.updateSessionList(message, 0, msg);
-  }
+  // if ((MsgType.MSG_TYPE_MAP.indexOf(message.contentType) >= 0 && !message.type) || msgType.includes(message.contentType)){
+  //   wsStore.updateSessionList(message, 0, msg);
+  // }
 };
 
 
@@ -122,10 +159,15 @@ export const setMessageHook = (message, state) => {
 
 
 
-// 接收到消息处理
-export const handleMessageHook = async (payload, state) => {
+/**
+ * 接收到消息处理
+ * @param {{}} payload 
+ * @param {useWebSocketStore} wsStore 
+ * @returns 
+ */
+export const handleMessageHook = async (payload, wsStore) => {
   console.log('接收消息', payload);
-  const wsStore = useWebSocketStore();
+  // const wsStore = useWebSocketStore();
   const walletStore = useWalletStore();
   const message = {...payload};
   if (!message.contentType && !message.messageType) return;
@@ -142,48 +184,58 @@ export const handleMessageHook = async (payload, state) => {
   // 处理消息已到达
   if (message.messageType === MsgType.MESSAGE_RECEIPT) { 
     // 更新消息id
-    wsStore.messages = wsStore.messages.map(item => {
-      if (item.msgId === msg.msgId) {
-        item.id = msg.id;
-        delete item.msgId;
-      }
-      return item;
-    });
+    wsStore.modifyMessageId(message, msg)
+    // wsStore.messages = wsStore.messages.map(item => {
+    //   if (item.msgId === msg.msgId) {
+    //     item.id = msg.id;
+    //     delete item.msgId;
+    //   }
+    //   return item;
+    // });
     return;
   }
 
-  // 处理消息撤回/阅后即焚(个人和群)
+  // 消息撤回/阅后即焚(个人和群)
   if (message.messageType === MsgType.MESSAGE_REVOKE || message.messageType === MsgType.MESSAGE_REVOKE_GROUP) {
-    wsStore.messages = msg.isTemp?wsStore.messages.map(item => {
-      if (item.id + '' === msg.msgId + '') return {...item, content: "", url: ""};
-      return item;
-    }):wsStore.messages.filter(item => {
-      if (item.id + '' === msg.msgId + '') return false;
-      return true;
-    });
+    // wsStore.messages = msg.isTemp?wsStore.messages.map(item => {
+    //   if (item.id + '' === msg.msgId + '') return {...item, content: "", url: ""};
+    //   return item;
+    // }):wsStore.messages.filter(item => {
+    //   if (item.id + '' === msg.msgId + '') return false;
+    //   return true;
+    // });
+    // 更新消息
+    if (msg && msg.isTemp) {
+      wsStore.modifyMessage(message, msg.msgId)
+    } else {
+      wsStore.deleteMessage(message, msg.msgId);
+    }
+    // 更新会话列表
+    wsStore.updateSessionNewMessage({...message, content: `${message.from == walletStore.account ? '你' : (message.fromUsername || '对方')}撤回了一条消息`});
   }
 
   // 兼容图片
   message.avatar = formatAvatarUrl(message.avatar);
 
   // 同步更新会话列表缓存
-  if ((MsgType.MSG_TYPE_MAP.indexOf(message.contentType) >= 0 && !message.type) || msgType.includes(message.contentType)) {
-    // 处理群头像兼容
-    const avatar = message.avatar;
-    if (Array.isArray(state.toUserInfo.avatar)) {
-      message.avatar = state.toUserInfo.avatar.map(val => formatAvatarUrl(val))
-    }
-    // 更新会话列表
-    wsStore.updateSessionList(message, 1, msg);
-    // 还原
-    message.avatar = avatar;
-  }
+
+  // if ((MsgType.MSG_TYPE_MAP.indexOf(message.contentType) >= 0 && !message.type) || msgType.includes(message.contentType)) {
+  //   // 处理群头像兼容
+  //   const avatar = message.avatar;
+  //   if (Array.isArray(wsStore.toUserInfo.avatar)) {
+  //     message.avatar = wsStore.toUserInfo.avatar.map(val => formatAvatarUrl(val))
+  //   }
+  //   // 更新会话列表
+  //   wsStore.updateSessionList(message, 1, msg);
+  //   // 还原
+  //   message.avatar = avatar;
+  // }
 
   // 处理功能
   wsStore.funApplyfriend(message); // 好友申请
   wsStore.funCancelfriend(message); // 好友取消
-  wsStore.funDeleteMessage(message); // 会话禁用
-  wsStore.funRestoreMessage(message); // 会话恢复
+  wsStore.funDeleteSessionMessage(message, msg); // 会话禁用
+  wsStore.funRestoreSessionMessage(message, msg); // 会话恢复
 
   // 接收群系统消息
   if (MsgType.MSG_TYPE_GROUP.indexOf(message.messageType) >= 0) {
@@ -195,57 +247,50 @@ export const handleMessageHook = async (payload, state) => {
     }
     // 处理群置顶
     if (message.messageType === MsgType.MESSAGE_STICKY_GROUP) {
-      
     }
-
-    state.messages.push({
+    wsStore.pushMessage({
       ...message,
       toUsername: message.to,
       content: newContent,
       contentType: MsgType.MSG_TYPE.NOTICE,
       messageType: MsgType.MESSAGE_TYPE_GROUP
     });
-    wsStore.indexs +=1;
-
-    setupNotifications(1)
+    notifications(wsStore);
     return;
   }
-  // 语音和视频挂断消息处理
-  if (message.contentType === Constant.CANCELL_AUDIO_ONLINE || message.contentType === Constant.CANCELL_VIDEO_ONLINE) {
-    state.messages.push({
+  // 语音和视频挂断/拒接消息处理
+  if ([Constant.CANCELL_AUDIO_ONLINE, Constant.CANCELL_VIDEO_ONLINE, Constant.REJECT_AUDIO_ONLINE, Constant.REJECT_VIDEO_ONLINE].includes(message.contentType)) {
+    wsStore.pushMessage({
       ...message,
       toUsername: message.to,
-      content:'[通话结束]',
+      content:message.contentType === Constant.REJECT_AUDIO_ONLINE || message.contentType === Constant.REJECT_VIDEO_ONLINE?'[对方拒绝]':'[通话结束]',
       sender: wsStore.toUserInfo.sender || {
         uuid: walletStore.account,
         nickname: walletStore.username,
         avatar: walletStore.avatar,
       },
     });
-    wsStore.indexs +=1;
   }
   // 语音和视频拒绝消息处理
-  if (message.contentType === Constant.REJECT_AUDIO_ONLINE || message.contentType === Constant.REJECT_VIDEO_ONLINE) {
-    state.messages.push({
-      ...message,
-      toUsername: message.to,
-      content: '[对方拒绝]',
-      sender: wsStore.toUserInfo.sender || {
-        uuid: walletStore.account,
-        nickname: walletStore.username,
-        avatar: walletStore.avatar,
-      },
-    });
-    wsStore.indexs +=1;
-  }
+  // if (message.contentType === Constant.REJECT_AUDIO_ONLINE || message.contentType === Constant.REJECT_VIDEO_ONLINE) {
+  //   wsStore.pushMessage({
+  //     ...message,
+  //     toUsername: message.to,
+  //     content: '[对方拒绝]',
+  //     sender: wsStore.toUserInfo.sender || {
+  //       uuid: walletStore.account,
+  //       nickname: walletStore.username,
+  //       avatar: walletStore.avatar,
+  //     },
+  //   });
+  // }
   // 文本消息
   if (message.contentType === MsgType.MSG_TYPE.TEXT) {
-    state.messages.push(formatMessageExt({
+    wsStore.pushMessage(formatMessageExt({
       ...message,
       toUsername: message.to,
     }, msg));
-    wsStore.indexs +=1;
-    setupNotifications(1)
+    notifications(wsStore);
     return
   }
   // 音频消息
@@ -255,37 +300,36 @@ export const handleMessageHook = async (payload, state) => {
     });
     // 生成可播放的 ObjectURL
     const audioUrl = URL.createObjectURL(audioBlob);
-    state.messages.push(formatMessageExt({
+    wsStore.pushMessage(formatMessageExt({
       ...message,
       file: audioUrl,
       toUsername: message.to,
     }, msg));
-    wsStore.indexs +=1;
-    setupNotifications(1)
+    notifications(wsStore);
     return
   }
   // 图片
   if (message.contentType === MsgType.MSG_TYPE.IMAGE) {
     const blob = new Blob([message.file], { type: message.fileSuffix });
     const url = URL.createObjectURL(blob);
-    state.messages.push(formatMessageExt({
+    wsStore.pushMessage(formatMessageExt({
       ...message,
       file: url,
       toUsername: message.to,
     }, msg));
-    wsStore.indexs +=1;
-    setupNotifications(1)
+    notifications(wsStore);
     return
   }
 
 
+
   // 音频在线:被呼叫
   if (
     message.contentType === Constant.DIAL_AUDIO_ONLINE ||
     message.contentType === Constant.DIAL_VIDEO_ONLINE
   ) {
     console.log("收到播号")
-    // 接收请求者信息
+    // 接收请求者信息,更新当前会话
     wsStore.toUserInfo = {
       ...wsStore.toUserInfo,
       uuid: message.from,
@@ -352,7 +396,7 @@ export const handleMessageHook = async (payload, state) => {
     soundVoice.stop()
     const video = message.contentType == Constant.ACCEPT_VIDEO_ONLINE
     // 初始化通话p2p配置
-    startAudioOnline(video, state);
+    startAudioOnline(video, wsStore);
     return;
   }
 
@@ -433,7 +477,7 @@ export const handleMessageHook = async (payload, state) => {
         .then((answer) => {
           console.log('发送answer给呼叫者', answer)
           // 发送给呼叫者
-          state.sendMessage({
+          wsStore.sendMessage({
             content: JSON.stringify(answer),
             type: Constant.MESSAGE_TRANS_TYPE,
             messageType: message.contentType,