From 94e0dd4f5d84f43eaf96c7e57ea9c4c184330353 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Sun, 10 Nov 2024 17:56:58 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E3=80=91=E5=95=86=E5=9F=8E=EF=BC=9A=E5=AE=A2=E6=9C=8D=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=94=B9=E4=B8=BA=E6=B8=B8=E6=A0=87=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=8C=E6=B6=88=E6=81=AF=20JSON=20=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/chat/components/messageList.vue | 51 ++++++++++++++++++----- pages/chat/components/messageListItem.vue | 10 ++--- pages/chat/index.vue | 9 ++-- sheep/api/promotion/kefu.js | 4 +- sheep/util/index.js | 13 ++++++ 5 files changed, 65 insertions(+), 22 deletions(-) diff --git a/pages/chat/components/messageList.vue b/pages/chat/components/messageList.vue index 95a19e9e..e014a068 100644 --- a/pages/chat/components/messageList.vue +++ b/pages/chat/components/messageList.vue @@ -34,10 +34,12 @@ import KeFuApi from '@/sheep/api/promotion/kefu'; import { isEmpty } from '@/sheep/helper/utils'; import sheep from '@/sheep'; - + import { formatDate } from '@/sheep/util'; + const sys_navBar = sheep.$platform.navbar; const messageList = ref([]); // 消息列表 const showNewMessageTip = ref(false); // 显示有新消息提示 + const refreshMessage = ref(false); // 更新消息列表 const backToTopStyle = reactive({ 'width': '100px', 'background-color': '#fff', @@ -48,8 +50,9 @@ 'alignItems': 'center', }); // 返回顶部样式 const queryParams = reactive({ - pageNo: 1, - pageSize: 10, + pageNo: 1, // 只用于触底计算 + pageSize: 20, + createTime: undefined, }); const pagingRef = ref(null); // 虚拟列表 const queryList = async (pageNo, pageSize) => { @@ -61,21 +64,47 @@ }; // 获得消息分页列表 const getMessageList = async () => { - const { data } = await KeFuApi.getKefuMessagePage(queryParams); - if (isEmpty(data.list)) { + const { data } = await KeFuApi.getKefuMessageList(queryParams); + if (isEmpty(data)) { + pagingRef.value.completeByNoMore([], true); + return; + } + if (queryParams.pageNo > 1 && refreshMessage.value) { + const newMessageList = []; + for (const message of data) { + if (messageList.value.some((val) => val.id === message.id)) { + continue; + } + newMessageList.push(message); + } + // 新消息追加到开头 + messageList.value = [...newMessageList, ...messageList.value]; + pagingRef.value.updateCache(); // 更新缓存 + refreshMessage.value = false; // 更新好后重置状态 return; } - pagingRef.value.completeByTotal(data.list, data.total); + + // 设置最后一次历史查询的最后一条消息的 createTime + queryParams.createTime = formatDate(data.at(-1).createTime); + pagingRef.value.completeByNoMore(data, false); }; /** 刷新消息列表 */ - const refreshMessageList = (message = undefined) => { - if (message !== undefined) { - showNewMessageTip.value = true; + const refreshMessageList = async (message = undefined) => { + if (typeof message !== 'undefined') { // 追加数据 pagingRef.value.addChatRecordData([message], false); - return; + } else { + queryParams.createTime = undefined; + refreshMessage.value = true; + await getMessageList(); + } + + // 若已是第一页则不做处理 + if (queryParams.pageNo > 1) { + showNewMessageTip.value = true; + } else { + onScrollToUpper(); } - pagingRef.value.reload(); }; /** 滚动到最新消息 */ const onBackToTopClick = (event) => { diff --git a/pages/chat/components/messageListItem.vue b/pages/chat/components/messageListItem.vue index 06a718de..a0120902 100644 --- a/pages/chat/components/messageListItem.vue +++ b/pages/chat/components/messageListItem.vue @@ -46,7 +46,7 @@