聊天数据分页加载

This commit is contained in:
2026-09-21 17:24:59 +08:00
parent 2ac985bbe6
commit b1181964f0
+20 -4
View File
@@ -150,6 +150,7 @@
ref="messageList" ref="messageList"
class="message-list" class="message-list"
:class="activeMenu === 'settings' ? '' : 'active'" :class="activeMenu === 'settings' ? '' : 'active'"
@scroll="handleMessageScroll"
> >
<div <div
v-for="message in contactMessages" v-for="message in contactMessages"
@@ -316,7 +317,7 @@ export default {
// 选择联系人 // 选择联系人
selectContact(contact) { selectContact(contact) {
this.currentContact = contact; this.currentContact = contact;
this.getContactMessageList(contact.contactName, 10); this.getContactMessageList(contact.contactName, 10, 0);
// 查看联系人后清除未读数量 // 查看联系人后清除未读数量
contact.unread = 0; contact.unread = 0;
@@ -334,16 +335,16 @@ export default {
}, },
// 获取当前联系人的消息列表 // 获取当前联系人的消息列表
getContactMessageList(contactName, limit) { getContactMessageList(contactName, limit, offset) {
// 获取当前联系人的消息列表 // 获取当前联系人的消息列表
getContactMessages({ getContactMessages({
contactName: contactName, contactName: contactName,
limit: limit, limit: limit,
offset: offset
}) })
.then((response) => { .then((response) => {
const contactMessages = []; const contactMessages = [];
const messages = response.data.messages || []; const messages = response.data.messages || [];
// 把联系人的消息按联系人 id 分组存储
messages.forEach((item) => { messages.forEach((item) => {
contactMessages.push({ contactMessages.push({
...item, ...item,
@@ -352,7 +353,8 @@ export default {
time: item.time || item.createdAt, time: item.time || item.createdAt,
}); });
}); });
this.contactMessages = contactMessages.reverse(); // 将新获取的消息放到现有消息的最前面,用于按时间顺序倒序展示
this.contactMessages = contactMessages.reverse().concat(this.contactMessages);
console.log("contactMessages", contactMessages); console.log("contactMessages", contactMessages);
}) })
.catch((error) => { .catch((error) => {
@@ -456,6 +458,20 @@ export default {
messageList.scrollTop = messageList.scrollHeight; messageList.scrollTop = messageList.scrollHeight;
} }
}, },
// 处理聊天框滚动事件
handleMessageScroll() {
const el = this.$refs.messageList;
// 滚动到顶部
if (el.scrollTop === 0) {
console.log("滚动到顶部,加载更多消息");
this.getContactMessageList(this.currentContact.contactName, 10, this.contactMessages.length);
// 滚动条往下移动 500px,利于继续往上滚动
el.scrollTop = 500;
}
}
}, },
}; };
</script> </script>