Browse Source

修复bug

wkw 1 month ago
parent
commit
e694b3f049
3 changed files with 39 additions and 35 deletions
  1. 20 18
      src/stores/modules/webSocketStore.js
  2. 4 4
      src/views/im/chat/index.vue
  3. 15 13
      src/views/im/hook/messagesHook.js

+ 20 - 18
src/stores/modules/webSocketStore.js

@@ -476,6 +476,7 @@ export const useWebSocketStore = defineStore("webSocketStore", {
     },
     // 更新本地真实消息id
     modifyMessageId(message, msg, sessionId = null) { 
+      // console.log(msg, message, sessionId)
       const systemStore = useSystemStore();
       if(!sessionId){
         sessionId = message.from;
@@ -485,8 +486,9 @@ export const useWebSocketStore = defineStore("webSocketStore", {
       }
       systemStore.messageList[sessionId] = [...systemStore.messageList[sessionId]].map(item => {
         // 消息发送成功确认
-        if (!item.id && item.msgId + '' === msg?.msgId + '') return {...item, id: msg.id, msgId: undefined, err: !msg.id?true:undefined};
+        if (!item.id && msg.msgId && item.msgId + '' === msg.msgId + '') return {...item, id: msg.id, msgId: undefined, err: !msg.id?true:undefined};
         // 阅后即焚
+        // console.log(item.id, msg?.id)
         if (item.id + '' === msg?.id + '') return {...item, isTemp: true, content: "", url: ""};
         return item;
       });
@@ -494,7 +496,7 @@ export const useWebSocketStore = defineStore("webSocketStore", {
       if (this.toUserInfo.uuid === sessionId) { 
         this.messages = [...this.messages].map(item => {
           // 消息发送成功确认
-          if (!item.id && item.msgId + '' === msg?.msgId + '') return { ...item, id: msg.id, msgId: undefined, err: !msg.id?true:undefined};
+          if (!item.id && msg.msgId && item.msgId + '' === msg?.msgId + '') return { ...item, id: msg.id, msgId: undefined, err: !msg.id?true:undefined};
           // 阅后即焚
           if (item.id + '' === msg?.id + '') return { ...item, isTemp: true, content: "", url: ""};
           return item;
@@ -515,7 +517,7 @@ export const useWebSocketStore = defineStore("webSocketStore", {
         if(typeof msgId === 'function'){
           let msg = {};
           if(msg = msgId(item, sessionId)){
-            return { ...item, ...message,...msg};
+            return { ...item, ...msg};
           }
         }
         else if (item.id + '' === msgId + '') return {...item, ...message};
@@ -530,7 +532,7 @@ export const useWebSocketStore = defineStore("webSocketStore", {
               return {...item,...msg};
             }
           }
-          else if (item.id + '' === msgId + '') return {...item, ...message, content: "", url: ""};
+          else if (item.id + '' === msgId + '') return {...item, ...message};
           return item;
         });
       }
@@ -664,21 +666,21 @@ export const useWebSocketStore = defineStore("webSocketStore", {
 
       const time = new Date(ts).toLocaleString().replaceAll("/", "-");
       // 消息类型映射
-      // 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]: '[对方拒绝]',
-      // };
+      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] || '[语音视频]');
-      let lastMsg = msg ? msg.content : message.content;
+      let lastMsg = message.contentType === MsgType.MSG_TYPE.TEXT || message.contentType === MsgType.MSG_TYPE.NOTICE ? (msg?msg.content : message.content) : (mapSet[message.contentType] || '[语音视频]');
+      // let lastMsg = msg ? msg.content : message.content;
       // 阅后即焚消息
       if(message.isTemp){
         lastMsg = '[阅后即焚]';

+ 4 - 4
src/views/im/chat/index.vue

@@ -43,7 +43,7 @@
               <div class="list-cont">
                 <div>{{ item.sender?item.sender.nickname: (item.nickname || item.fromUsername || "匿名用户") }}</div>
 
-                <div v-if="!item.isTemp || item.from == walletStore.account" style="position: relative;"> 
+                <div v-if="!item.isTemp " style="position: relative;"> 
                   <!-- 文本消息 -->
                   <div class="content" v-if="item.contentType === MsgType.MSG_TYPE.TEXT" @click="onLongPress(item)">
                     <span v-if="item.err" style="color: red;font-size: small;">{{item.messageType == MsgType.MESSAGE_TYPE_USER?'对方已不是您的好友':'您已不在群里'}}</span>
@@ -55,9 +55,9 @@
                     class="img-message"
                     v-else-if="item.contentType === MsgType.MSG_TYPE.IMAGE"
                   >
-                    <van-image
+                    <van-image fit="cover"
                       :src="item?.localUrl || IM_PATH + item.url"
-                      style="max-width: 120px; border-radius: 8px"
+                      style="width: 120px;height: 150px; border-radius: 8px"
                       @click="previewImage(item)"
                     />
                   </div>
@@ -596,7 +596,7 @@ const destroyMessage = (message) => {
   if (message.messageType ==  MsgType.MESSAGE_TYPE_GROUP) {
     const msg = {isTemp: true, content: '', contentType: message.contentType, messageType: message.messageType};
     // 更新消息
-    wsStore.modifyMessage(msg, message.id, wsStore.toUserInfo.uuid);
+    wsStore.modifyMessageId(msg, message, wsStore.toUserInfo.uuid);
     // 更新会话列表
     wsStore.updateSessionNewMessage(msg, wsStore.toUserInfo.uuid);
     return;

+ 15 - 13
src/views/im/hook/messagesHook.js

@@ -90,14 +90,14 @@ export const setMessageHook = (message, wsStore) => {
   
   // 语音和视频挂断/拒接消息处理
   if (Constant.MSG_AUDIO_GROUP.includes(message.contentType)) {
-    let sender = wsStore.toUserInfo.sender || {
+    let sender = wsStore.toUserAudioInfo.sender || {
       uuid: walletStore.account,
       nickname: walletStore.username,
       avatar: walletStore.avatar,
     }
     wsStore.pushMessage({
       ...message,
-      align: sender.uuid != wsStore.toUserInfo.uuid ? 'right' : 'left',
+      align: sender.uuid == message.from ? 'right' : 'left',
       fromAvatar: message.avatar,
       toUuid: message.to,
       fromUuid: message.from,
@@ -107,16 +107,18 @@ export const setMessageHook = (message, wsStore) => {
   }
   // 文本消息
   if (message.contentType == MsgType.MSG_TYPE.TEXT) {
+    msg.isTemp=false;
     wsStore.pushMessage(formatMessageExt({
       ...message,
       align: 'right',
       fromAvatar: message.avatar,
       toUuid:message.to,
-      fromUuid:message.from
+      fromUuid:message.from,
     }, msg), message.to);
   }
   // 音频消息
   if (message.contentType === MsgType.MSG_TYPE.AUDIO) {
+    msg.isTemp = false;
     const blob = new Blob([message.file], { type: message.fileSuffix });
     const url = URL.createObjectURL(blob);
     wsStore.pushMessage(formatMessageExt({
@@ -192,7 +194,7 @@ export const handleMessageHook = async (payload, wsStore) => {
   // 处理消息回执, 更新消息id
   if (message.messageType === MsgType.MESSAGE_RECEIPT) { 
     // 检测是否在群内或是好友
-    wsStore.modifyMessageId(message, msg)
+    wsStore.modifyMessageId(message, { id: msg.id, uniqueId: msg.uniqueId, msgId: msg.msgId }, message.from)
     return;
   }
   
@@ -202,7 +204,7 @@ export const handleMessageHook = async (payload, wsStore) => {
     wsStore.systemReceiptMessage(message, msg)
     // 更新消息
     if (msg && msg.isTemp) {
-      wsStore.modifyMessageId({isTemp: true}, msg)
+      wsStore.modifyMessageId({isTemp: true}, msg,message.from)
     } else {
       wsStore.deleteMessage(message, msg.id);
     }
@@ -277,7 +279,7 @@ export const handleMessageHook = async (payload, wsStore) => {
   if (Constant.MSG_AUDIO_GROUP.includes(message.contentType)) {
     // 消息送达回执发送
     wsStore.systemReceiptMessage(message, msg)
-    let sender = wsStore.toUserInfo.sender || {
+    let sender = wsStore.toUserAudioInfo.sender || {
       uuid: walletStore.account,
       nickname: walletStore.username,
       avatar: walletStore.avatar,
@@ -285,9 +287,9 @@ export const handleMessageHook = async (payload, wsStore) => {
     // 语音消息
     wsStore.pushMessage({
       ...message,
-      align: sender.uuid != wsStore.toUserInfo.uuid?'right':'left',
-      toUuid: wsStore.toUserInfo.type == 'user' ? message.to : message.from,
-      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : message.to,
+      align: sender.uuid != message.from?'right':'left',
+      toUuid: wsStore.toUserAudioInfo.type == 'user' ? message.to : message.from,
+      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : msg.fromUuid,
       // fromUuids: msg?.fromUuid,
       content: message.contentType === Constant.REJECT_AUDIO_ONLINE || message.contentType === Constant.REJECT_VIDEO_ONLINE ? '[对方拒绝]' : '[通话结束]',
       sender,
@@ -302,7 +304,7 @@ export const handleMessageHook = async (payload, wsStore) => {
     wsStore.pushMessage(formatMessageExt({
       ...message,
       toUuid: wsStore.toUserInfo.type == 'user' ? message.to : message.from,
-      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : message.to,
+      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : msg.fromUuid,
       // fromUuids: msg?.fromUuid,
       align: 'left',
       fromAvatar: message.avatar,
@@ -323,7 +325,7 @@ export const handleMessageHook = async (payload, wsStore) => {
       ...message,
       file: audioUrl,
       toUuid: wsStore.toUserInfo.type == 'user' ? message.to : message.from,
-      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : message.to,
+      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : msg.fromUuid,
       // fromUuids: msg?.fromUuid,
       align: 'left',
       fromAvatar: message.avatar,
@@ -341,7 +343,7 @@ export const handleMessageHook = async (payload, wsStore) => {
       ...message,
       file: url,
       toUuid: wsStore.toUserInfo.type == 'user' ? message.to : message.from,
-      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : message.to,
+      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : msg.fromUuid,
       // fromUuids: msg?.fromUuid,
       align: 'left',
       fromAvatar: message.avatar,
@@ -359,7 +361,7 @@ export const handleMessageHook = async (payload, wsStore) => {
       ...message,
       file: url,
       toUuid: wsStore.toUserInfo.type == 'user' ? message.to : message.from,
-      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : message.to,
+      fromUuid: wsStore.toUserInfo.type == 'user' ? message.from : msg.fromUuid,
       // fromUuids: msg?.fromUuid,
       align: 'left',
       fromAvatar: message.avatar,