From fb421cd0213dfd1d5174b28ea49bb08e990b0abf Mon Sep 17 00:00:00 2001 From: YiLin <482244139@qq.com> Date: Wed, 5 Aug 2026 14:51:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A5=BD=E5=8F=8B=EF=BC=8C=E7=BE=A4=E8=81=8A?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/Chat/Chat.vue | 85 +++++- pages/text/text.vue | 122 ++++++++- unpackage/dist/dev/app-plus/app-service.js | 292 ++++++++++++++++----- utils/friend-api.js | 8 +- 4 files changed, 426 insertions(+), 81 deletions(-) diff --git a/pages/Chat/Chat.vue b/pages/Chat/Chat.vue index c83a115..3d75f87 100644 --- a/pages/Chat/Chat.vue +++ b/pages/Chat/Chat.vue @@ -123,10 +123,10 @@ - - - 加载更多消息... - + + + 加载更多消息... + @@ -1694,6 +1694,17 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. const hasMoreAIMessages = ref(true) // AI 会话是否还有更多消息可加载 const currentPage = ref(1) // 当前页码(如果后端支持分页) const pageSize = 200; + + // 好友消息分页 + const isFriendLoadingMore = ref(false) // 好友会话是否正在加载更多 + const friendPageNumber = ref(1) // 好友消息当前页码(1-based) + const hasMoreFriendMessages = ref(true) // 好友会话是否还有更多消息 + + // 群聊消息分页 + const isGroupLoadingMore = ref(false) // 群聊会话是否正在加载更多 + const groupPageNumber = ref(1) // 群聊消息当前页码(1-based) + const hasMoreGroupMessages = ref(true) // 群聊会话是否还有更多消息 + const groupSize = 100; // 计算属性:自动根据 allmessages 和 currentPage 计算显示消息 const currentMessages = computed(() => { // return allmessages.value.slice(-pageInfoNumber); @@ -1725,7 +1736,10 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. } const takeFriendMessages = async () => { try { - allmessages.value = await getFriendMessages(currentSessionId.value) || []; + friendPageNumber.value = 1 + hasMoreFriendMessages.value = true + const rawMessages = await getFriendMessages(currentSessionId.value, pageSize, 0) || []; + allmessages.value = rawMessages // console.log("好友消息:", JSON.stringify(allmessages.value)); // 数据获取后执行滚动 scrollToBottom(); @@ -1740,7 +1754,10 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. } const takeGroupMessages = async () => { try { - allmessages.value = await getGroupMessages(currentSessionId.value) || []; + groupPageNumber.value = 1 + hasMoreGroupMessages.value = true + const rawMessages = await getGroupMessages(currentSessionId.value, pageSize, 0) || []; + allmessages.value = rawMessages console.log("群聊消息:", allmessages.value); // 获取群成员列表并获取头像 const memberList = await getGroupMemberList(currentSessionId.value) @@ -1778,10 +1795,14 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. // // currentMessages.value = allmessages.value.slice(-pageInfoNumber); // } - // 滚动到顶部时加载更多 AI 消息 + // 滚动到顶部时加载更多消息(根据 ChatType 分发) const onScrollToUpper = async () => { if (ChatType.value === 0) { await loadMoreAIMessages() + } else if (ChatType.value === 1) { + await loadMoreFriendMessages() + } else if (ChatType.value === 2) { + await loadMoreGroupMessages() } } @@ -1812,6 +1833,56 @@ import { openFile as openFileNative, downloadAndOpen } from '@/utils/fileOpener. } } + // 加载更多好友历史消息(上一页),并定位到原第一条消息 + const loadMoreFriendMessages = async () => { + if (isFriendLoadingMore.value || !hasMoreFriendMessages.value || !currentSessionId.value) return + isFriendLoadingMore.value = true + try { + const nextPage = friendPageNumber.value + 1 + const olderMessages = await getFriendMessages(currentSessionId.value, pageSize, nextPage) + + if (olderMessages && olderMessages.length > 0) { + friendPageNumber.value = nextPage + allmessages.value = [...olderMessages, ...allmessages.value] + // 定位滚动 + await nextTick() + scrollToView.value = 'msg-' + olderMessages.length + } else { + hasMoreFriendMessages.value = false + } + } catch (e) { + console.error('加载更多好友消息失败:', e) + uni.showToast({ title: '加载更多失败', icon: 'none' }) + } finally { + isFriendLoadingMore.value = false + } + } + + // 加载更多群聊历史消息(上一页),并定位到原第一条消息 + const loadMoreGroupMessages = async () => { + if (isGroupLoadingMore.value || !hasMoreGroupMessages.value || !currentSessionId.value) return + isGroupLoadingMore.value = true + try { + const nextPage = groupPageNumber.value + 1 + const olderMessages = await getGroupMessages(currentSessionId.value, pageSize, nextPage) + + if (olderMessages && olderMessages.length > 0) { + groupPageNumber.value = nextPage + allmessages.value = [...olderMessages, ...allmessages.value] + // 定位滚动 + await nextTick() + scrollToView.value = 'msg-' + olderMessages.length + } else { + hasMoreGroupMessages.value = false + } + } catch (e) { + console.error('加载更多群聊消息失败:', e) + uni.showToast({ title: '加载更多失败', icon: 'none' }) + } finally { + isGroupLoadingMore.value = false + } + } + // 监听滚动 const onScroll = (e) => {} // 滑动到底部 diff --git a/pages/text/text.vue b/pages/text/text.vue index 582560f..e54d8de 100644 --- a/pages/text/text.vue +++ b/pages/text/text.vue @@ -66,7 +66,11 @@ + :upper-threshold="50" :scroll-with-animation="true" @scroll="onScroll" @scrolltoupper="onScrollToUpper"> + + + 加载更多消息... +