UNPKG

press-ui

Version:

简单、易用的跨端组件库,兼容 Vue2 和 Vue3,同时支持 uni-app和普通 Vue 项目

132 lines (105 loc) 3.13 kB
import { MESSAGE_TYPE_MAP } from './config'; import { formatTime, isJsonStr } from './helper'; const INSERT_TIME_DURATION = 1 * 60 * 60; function formatMessageContent(message, userInfo) { if (!isJsonStr(message)) { return { text: message }; } let info = {}; try { info = JSON.parse(message); } catch (e) { return { text: message }; } return { title: info.title || '', text: info.content || '', link: info.jumpUrl || '', picUrl: info.picUrl || '', phone: userInfo?.cardInfo?.phone || '', wechat: userInfo?.cardInfo?.wx_account || '', qq: userInfo?.cardInfo?.qq_account || '', }; } function addTimeMsg(list, lastTime) { if (!list.length) return; let recentTime = list[list.length - 1].timeStamp; if (lastTime) { recentTime = lastTime; } // 倒序插入,如果从前往后插,index会变 for (let i = list.length - 1;i >= 0;i--) { const item = list[i]; if (recentTime > item.timeStamp + INSERT_TIME_DURATION) { const nextTime = list[i + 1].timeStamp; list.splice(i + 1, 0, { msgType: MESSAGE_TYPE_MAP.TIME, id: `id-time-${i + 1}-${nextTime}`, timeStamp: nextTime, content: { text: formatTime(nextTime), }, }); recentTime = item.timeStamp; } } // 在第一个之前插入时间tag // 如果传入lastTime,说明是接收信息,则只有在这条消息超过 INSERT_TIME_DURATION 后才再次插入tag if (!lastTime || list?.[0]?.timeStamp > lastTime + INSERT_TIME_DURATION) { list.splice(0, 0, { msgType: MESSAGE_TYPE_MAP.TIME, id: `id-time-0-${list[0].id}`, timeStamp: list[0].timeStamp, content: { text: formatTime(list[0].timeStamp), }, }); } } function deleteRevokedMessages(list) { return list = list.filter(item => !item.isRevoked); } export function baseFormatMessageDetailList( list, myInfo, oppositeInfo, lastTimeStampTag, ) { let mList = list; mList = deleteRevokedMessages(mList); mList = mList.map((item) => { const { time, from, to, payload, isPeerRead, ID: id, isCustomFail, isRevoked } = item; const { text } = payload || {}; const isMine = from === myInfo.uid; const uid = isMine ? myInfo.uid : oppositeInfo.uid; let parsedText = {}; if (text && isJsonStr(text)) { try { parsedText = JSON.parse(text); } catch (e) { parsedText = {}; } } return { id: `id-${id}`, time: formatTime(time), timeStamp: time, msgType: MESSAGE_TYPE_MAP.MESSAGE_TEXT, parsedText, from, to, isPeerRead, isCustomFail, avatar: isMine ? myInfo.avatar : oppositeInfo.avatar, nick: isMine ? myInfo.nick : oppositeInfo.nick, uid, isMine, isOwner: isMine ? myInfo.isOwner : oppositeInfo.isOwner, laddergrade: isMine ? myInfo.laddergrade : oppositeInfo.laddergrade, content: formatMessageContent(text, isMine ? myInfo : oppositeInfo), isRevoked, }; }); addTimeMsg(mList, lastTimeStampTag); return mList; }