Browse Source

Merge branch 'im-dev' into single-im-chat

wkw 1 month ago
parent
commit
b213fcff4e
2 changed files with 45 additions and 48 deletions
  1. 3 1
      src/stores/modules/systemStore.js
  2. 42 47
      src/stores/modules/webSocketStore.js

+ 3 - 1
src/stores/modules/systemStore.js

@@ -16,7 +16,9 @@ export const useSystemStore = defineStore("useSystemStore", {
     ImsessionList:[],
     needRefreshIm:false,
     // FirendList:[],
-    userUuid:''
+    userUuid:'',
+    messageList: {},//消息缓存
+    // FirendList:[]
   }),
   persist: true,
   getters: {

+ 42 - 47
src/stores/modules/webSocketStore.js

@@ -24,7 +24,6 @@ const WS_CONFIG = {
   MESSAGE_QUEUE_FLUSH_INTERVAL: 5000,
 };
 
-let messageList = {};//消息缓存
 
 export const useWebSocketStore = defineStore("webSocketStore", {
   state: () => ({
@@ -452,31 +451,36 @@ export const useWebSocketStore = defineStore("webSocketStore", {
 
     // 新消息入栈本地
     pushMessage(message, sessionId = null) {
+      const systemStore = useSystemStore();
       if(!sessionId){
         sessionId = message.from;
       } 
-      if (!messageList[sessionId]) {
-        messageList[sessionId] = [];
+      if (!systemStore.messageList[sessionId]) {
+        systemStore.messageList[sessionId] = [];
+        if (sessionId == message.from){
+          this.getMessages({ uuid: message.from, friendUsername: message.to, messageType: message.messageType },true);
+        }
       }
-      messageList[sessionId].push(message);
+      systemStore.messageList[sessionId].push(message);
       // 检测当前消息
       if (this.toUserInfo.uuid === sessionId) { 
         this.messages.push(message);
         this.indexs +=1;
       }
-      console.log('pushMessage', messageList, this.messages)
+      console.log('pushMessage', systemStore.messageList, this.messages)
       // 更新会话最新消息
       this.updateSessionNewMessage(message, sessionId)
     },
     // 更新本地真实消息id
     modifyMessageId(message, msg, sessionId = null) { 
+      const systemStore = useSystemStore();
       if(!sessionId){
         sessionId = message.from;
       }
-      if (!messageList[sessionId]) {
-        messageList[sessionId] = [];
+      if (!systemStore.messageList[sessionId]) {
+        systemStore.messageList[sessionId] = [];
       }
-      messageList[sessionId] = messageList[sessionId].map(item => {
+      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 + '') return {...item, content: "", url: ""};
         return item;
@@ -489,17 +493,18 @@ export const useWebSocketStore = defineStore("webSocketStore", {
           return item;
         });
       }
-      // console.log("修改消息", message, sessionId, messageList, this.toUserInfo.uuid, this.messages);
+      // console.log("修改消息", message, sessionId, systemStore.messageList, this.toUserInfo.uuid, this.messages);
     },
     // 更新本地消息
     modifyMessage(message, msgId, sessionId = null) { 
+      const systemStore = useSystemStore();
       if(!sessionId){
         sessionId = message.from;
       } 
-      if (!messageList[sessionId]) {
-        messageList[sessionId] = [];
+      if (!systemStore.messageList[sessionId]) {
+        systemStore.messageList[sessionId] = [];
       }
-      messageList[sessionId] = messageList[sessionId].map(item => {
+      systemStore.messageList[sessionId] = systemStore.messageList[sessionId].map(item => {
         if(typeof msgId === 'function'){
           let msg = {};
           if(msg = msgId(item, sessionId)){
@@ -526,22 +531,23 @@ export const useWebSocketStore = defineStore("webSocketStore", {
     },
     // 删除本地消息
     deleteMessage(message, msgId, sessionId = null) { 
+      const systemStore = useSystemStore();
       if(!sessionId){
         sessionId = message.from;
       } 
-      if (!messageList[sessionId]) {
-        messageList[sessionId] = [];
+      if (!systemStore.messageList[sessionId]) {
+        systemStore.messageList[sessionId] = [];
       }
       // 删除所有消息
       if (msgId === true || msgId === 'all') {
-        messageList[sessionId] = [];
+        systemStore.messageList[sessionId] = [];
         if (this.toUserInfo.uuid === sessionId) { 
           this.messages = [];
         }
         return;
       }
-      // console.log("删除消息", message, sessionId, messageList, this.messages);
-      messageList[sessionId] = messageList[sessionId].filter(item => {
+      // console.log("删除消息", message, sessionId, systemStore.messageList, this.messages);
+      systemStore.messageList[sessionId] = systemStore.messageList[sessionId].filter(item => {
         if (item.id + '' === msgId + '') return false;
         return true;
       });
@@ -572,17 +578,24 @@ export const useWebSocketStore = defineStore("webSocketStore", {
     },
     // 获取会话消息
     getSessionMessages(sessionId) { 
-      if (!messageList[sessionId]) {
-        messageList[sessionId] = [];
+      const systemStore = useSystemStore();
+      if (!systemStore.messageList[sessionId]) {
+        systemStore.messageList[sessionId] = [];
       }
-      return [...messageList[sessionId]];
+      return [...systemStore.messageList[sessionId]];
     },
     // 设置当前会话消息
-    setSessionMessages(sessionId, messages) { 
-      if (!messageList[sessionId]) {
-        messageList[sessionId] = [];
+    setSessionMessages(sessionId, messages,all=false) { 
+      const systemStore = useSystemStore();
+      let data = Array.isArray(messages) ? messages : (typeof messages === 'object' ? [messages] : []);
+      if (!systemStore.messageList[sessionId]) {
+        systemStore.messageList[sessionId] = [];
+      }
+      if(all){
+        systemStore.messageList[sessionId] =  data.filter(val=>!systemStore.messageList[sessionId].find(v=>v.id == val.id))
+        return;
       }
-      messageList[sessionId] = Array.isArray(messages)?messages:(typeof messages === 'object'?[messages]:[]);
+      systemStore.messageList[sessionId] = data;
     },
     // 更换会话
     changeSessionMessage(sessionId) { 
@@ -591,24 +604,12 @@ export const useWebSocketStore = defineStore("webSocketStore", {
     },
 
     // 获取历史消息
-    async getMessages(params) {
+    async getMessages(params,all=false) {
       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];
-      //   return;
-      // }
-
-      // this.sessionId = this.toUserInfo.uuid;
-      // this.messages = this.getSessionMessages(this.sessionId);
       this.loading = true  // 开始加载
-      this.changeSessionMessage(this.toUserInfo.uuid);
-      if (this.messages.length > 0) {
+      this.changeSessionMessage(params.uuid);
+      if (this.messages.length > 0 && !all) {
         this.loading = false;
         return;
       }
@@ -619,13 +620,7 @@ 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;
-          // });
-          this.setSessionMessages(this.sessionId, (res.data || []));
+          this.setSessionMessages(this.sessionId, (res.data || []), all);
           this.changeSessionMessage(this.sessionId);
           // return this.messages;
         }else{
@@ -955,7 +950,7 @@ export const useWebSocketStore = defineStore("webSocketStore", {
     // 清除数据
     deleteData(){
       const systemStore = useSystemStore();
-      messageList = {};
+      systemStore.messageList = {};
       this.messages = [];
       this.groupMembersList = {};
       this.toUserInfo = {};