|
|
|
@ -9,10 +9,10 @@ |
|
|
|
<view v-for="(msgInfo, idx) in chat.messages" :key="idx"> |
|
|
|
<chat-message-item :ref="'message'+msgInfo.id" v-if="idx >= showMinIdx" |
|
|
|
:headImage="headImage(msgInfo)" @call="onRtCall(msgInfo)" :showName="showName(msgInfo)" |
|
|
|
@recall="onRecallMessage" @delete="onDeleteMessage" @copy="onCopyMessage" |
|
|
|
@longPressHead="onLongPressHead(msgInfo)" @download="onDownloadFile" |
|
|
|
@audioStateChange="onAudioStateChange" :id="'chat-item-' + idx" :msgInfo="msgInfo" |
|
|
|
:groupMembers="groupMembers"> |
|
|
|
@resend="onResendMessage" @recall="onRecallMessage" @delete="onDeleteMessage" |
|
|
|
@copy="onCopyMessage" @longPressHead="onLongPressHead(msgInfo)" |
|
|
|
@download="onDownloadFile" @audioStateChange="onAudioStateChange" |
|
|
|
:id="'chat-item-' + idx" :msgInfo="msgInfo" :groupMembers="groupMembers"> |
|
|
|
</chat-message-item> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
@ -338,10 +338,7 @@ export default { |
|
|
|
tmpMessage = JSON.parse(JSON.stringify(tmpMessage)); |
|
|
|
tmpMessage.status = this.$enums.MESSAGE_STATUS.FAILED; |
|
|
|
this.chatStore.insertMessage(tmpMessage, chat); |
|
|
|
}).finally(() => { |
|
|
|
// 滚动到底部 |
|
|
|
this.scrollToBottom(); |
|
|
|
}); |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
@ -451,8 +448,6 @@ export default { |
|
|
|
// 借助file对象保存 |
|
|
|
file.msgInfo = msgInfo; |
|
|
|
file.chat = this.chat; |
|
|
|
// 滚到最低部 |
|
|
|
this.scrollToBottom(); |
|
|
|
// 更新图片宽高 |
|
|
|
let chat = this.chat; |
|
|
|
this.getImageSize(file).then(size => { |
|
|
|
@ -511,8 +506,6 @@ export default { |
|
|
|
// 借助file对象保存 |
|
|
|
file.msgInfo = msgInfo; |
|
|
|
file.chat = this.chat; |
|
|
|
// 滚到最低部 |
|
|
|
this.scrollToBottom(); |
|
|
|
return true; |
|
|
|
}, |
|
|
|
onUploadFileSuccess(file, res) { |
|
|
|
@ -536,6 +529,37 @@ export default { |
|
|
|
msgInfo.status = this.$enums.MESSAGE_STATUS.FAILED; |
|
|
|
this.chatStore.insertMessage(msgInfo, file.chat); |
|
|
|
}, |
|
|
|
onResendMessage(msgInfo) { |
|
|
|
if (msgInfo.type != this.$enums.MESSAGE_TYPE.TEXT) { |
|
|
|
uni.showToast({ |
|
|
|
title: "该消息不支持自动重新发送,建议手动重新发送", |
|
|
|
icon: "none" |
|
|
|
}) |
|
|
|
return; |
|
|
|
} |
|
|
|
// 防止发送期间用户切换会话导致串扰 |
|
|
|
const chat = this.chat; |
|
|
|
// 删除旧消息 |
|
|
|
this.chatStore.deleteMessage(msgInfo, chat); |
|
|
|
// 重新发送 |
|
|
|
msgInfo.temId = this.generateId(); |
|
|
|
let tmpMessage = this.buildTmpMessage(msgInfo); |
|
|
|
this.chatStore.insertMessage(tmpMessage, chat); |
|
|
|
this.moveChatToTop(); |
|
|
|
this.sendMessageRequest(msgInfo).then(m => { |
|
|
|
// 更新消息 |
|
|
|
tmpMessage = JSON.parse(JSON.stringify(tmpMessage)); |
|
|
|
tmpMessage.id = m.id; |
|
|
|
tmpMessage.status = m.status; |
|
|
|
tmpMessage.content = m.content; |
|
|
|
this.chatStore.insertMessage(tmpMessage, chat); |
|
|
|
}).catch(() => { |
|
|
|
// 更新消息 |
|
|
|
tmpMessage = JSON.parse(JSON.stringify(tmpMessage)); |
|
|
|
tmpMessage.status = this.$enums.MESSAGE_STATUS.FAILED; |
|
|
|
this.chatStore.insertMessage(tmpMessage, chat); |
|
|
|
}) |
|
|
|
}, |
|
|
|
onDeleteMessage(msgInfo) { |
|
|
|
uni.showModal({ |
|
|
|
title: '删除消息', |
|
|
|
@ -996,7 +1020,7 @@ export default { |
|
|
|
if (newSize > oldSize && oldSize > 0) { |
|
|
|
let lastMessage = this.chat.messages[newSize - 1]; |
|
|
|
if (this.$msgType.isNormal(lastMessage.type)) { |
|
|
|
if (this.isInBottom) { |
|
|
|
if (this.isInBottom || lastMessage.selfSend) { |
|
|
|
// 收到消息,则滚动至底部 |
|
|
|
this.scrollToBottom(); |
|
|
|
} else { |
|
|
|
|