|
@@ -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 = {};
|