修复pull-message会重复响应的问题
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user