修复pull-message会重复响应的问题

This commit is contained in:
fan
2021-01-23 00:09:30 +08:00
parent 9a83013ffe
commit bde1314c8d
9 changed files with 968 additions and 32 deletions
+17 -12
View File
@@ -77,7 +77,7 @@ export default {
return {
drawerVisible: !this.hideDrawer,
currentContactId:null,
currentMessagesId:null,
currentMessages:[],
activeSidebar: DEFAULT_MENU_LASTMESSAGES,
contacts: [],
menus: [],
@@ -105,9 +105,6 @@ export default {
await this.$nextTick();
},
computed: {
currentMessages() {
return messages[this.currentMessagesId] || [];
},
currentContact() {
return this.contacts.find(item => item.id == this.currentContactId) || {};
},
@@ -216,6 +213,7 @@ export default {
);
},
_emitPullMessages(next) {
this._changeContactLock = true;
this.$emit(
"pull-messages",
this.currentContact,
@@ -223,7 +221,8 @@ export default {
this._addMessage(messages, this.currentContactId, 0);
CacheMessageLoaded.set(this.currentContactId, isEnd);
if (isEnd == true) this.$refs.messages.loaded();
this.currentMessagesId = this.currentContactId;
this.updateCurrentMessages();
this._changeContactLock = false;
next(isEnd);
}
);
@@ -521,6 +520,10 @@ export default {
: `[!${match}]`;
});
},
updateCurrentMessages(){
if(!messages[this.currentContactId]) messages[this.currentContactId] = []
this.currentMessages = messages[this.currentContactId];
},
/**
* 将当前聊天窗口滚动到底部
*/
@@ -531,28 +534,30 @@ export default {
* 改变聊天对象
* @param contactId 联系人 id
*/
changeContact(contactId, menuName) {
if (this.currentContactId == contactId) {
this.currentContactId = undefined;
}
async changeContact(contactId, menuName) {
if(this._changeContactLock || this.currentContactId == contactId) return false;
if (menuName) {
this.changeMenu(menuName);
}
this.currentContactId = contactId;
this.currentContactId = contactId;
this.$emit("change-contact", this.currentContact);
if (isFunction(this.currentContact.renderContainer)) {
return;
}
if (!CacheMessageLoaded.has(contactId)) {
if (CacheMessageLoaded.has(contactId)) {
this.$refs.messages.loaded();
}else{
this.$refs.messages.resetLoadState();
}
if (!messages[contactId]) {
this.updateCurrentMessages();
this._emitPullMessages(isEnd => this.messageViewToBottom());
} else {
setTimeout(() => {
this.currentMessagesId = this.currentContactId;
this.updateCurrentMessages();
this.messageViewToBottom();
}, 0);
}