From ff2930fb251f3db29d2c75ea339ba70ed5224e54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kaizheng=28=E9=83=91=E5=87=AF=29?= Date: Tue, 18 Feb 2025 10:03:59 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20=E4=BA=A4=E6=98=93=E5=9C=88?= =?UTF-8?q?=E4=BA=92=E5=8A=A8=E6=B6=88=E6=81=AF=E5=B1=95=E7=A4=BA=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/Circle/hooks/useChatData.js | 42 ++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/views/Circle/hooks/useChatData.js b/src/views/Circle/hooks/useChatData.js index ba566ad..928fc3e 100644 --- a/src/views/Circle/hooks/useChatData.js +++ b/src/views/Circle/hooks/useChatData.js @@ -6,6 +6,7 @@ import MouseWheel from "@better-scroll/mouse-wheel"; import useDisableScroll from "@/hooks/useDisableScroll"; import useReadMessage from "./useReadMessage"; import store from "@/store/index"; +import dayjs from "dayjs"; BScroll.use(PullDown); BScroll.use(MouseWheel); @@ -22,6 +23,41 @@ export default function useChatData({ id, className, type, stompClient }) { const { setStorageTeacherMsg } = useReadMessage(); + const msgTimeList = []; + const msgTimeObj = {}; + const disposeMsg = (msgData, isHis) => { + // isHis true历史消息 false最新消息 + let msgArr = Array.isArray(msgData) ? msgData : [msgData]; + msgArr.forEach((item) => { + msgIdsObj.value[item.id] = item; + let chatTime = dayjs(item.createTime).format("MM-DD HH:mm"); + item.show = + item.status === 2 || + (item.userType === 2 && item.userId === store.state.userInfo.userId); + if (isHis) { + // 将全部评论按1分钟为维度进行汇总 + if (!msgTimeList.includes(chatTime) && item.show) { + msgTimeList.push(chatTime); + item.chatTime = chatTime; + msgTimeObj[chatTime] = item; + } else if (msgTimeList.includes(chatTime) && item.show) { + item.chatTime = chatTime; + delete msgTimeObj[chatTime].chatTime; + msgTimeObj[chatTime] = item; + } + } else { + // 将全部评论按1s为维度进行汇总 + if (!msgTimeList.includes(chatTime) && item.show) { + msgTimeList.push(chatTime); + item.chatTime = chatTime; + msgTimeObj[chatTime] = item; + } else { + delete item.chatTime; + } + } + }); + }; + const getLiveHisMsg = async () => { loading.value = true; if (isPullingDown.value) return; @@ -34,13 +70,11 @@ export default function useChatData({ id, className, type, stompClient }) { type, // 查询类型:1全部;2投顾;3用户;4精选;5私聊 }); if (ret.code === 0) { + disposeMsg(ret.data.list, true); let list = ret.data.list.reverse() || []; hasNext.value = ret.data.hasNext; preHisHeight = msgListRef.value.clientHeight; msgList.value = list.concat(msgList.value); - list.forEach((msg) => { - msgIdsObj.value[msg.id] = msg; - }); if (!hasNext.value) { bs.value && bs.value.closePullDown(); } @@ -69,8 +103,8 @@ export default function useChatData({ id, className, type, stompClient }) { // WebSocket推送的消息 const pushNewMsg = (msg) => { + disposeMsg(msg); msgList.value.push(msg); - msgIdsObj.value[msg.id] = msg; nextTick(() => { let isBottom = bs.value.maxScrollY + 20 >= bs.value.y; bs.value && bs.value.refresh();