|
@@ -2,6 +2,15 @@
|
|
|
import { formatDate } from '@/utils/formatTime'
|
|
|
/* 默认头像 */
|
|
|
import defaultAvatar from '@/assets/imgs/avatar.gif'
|
|
|
+import { useUserStore } from '@/store/modules/user'
|
|
|
+import avatarImg from '@/assets/imgs/avatar.gif'
|
|
|
+import paseLink from '@/utils/paseLink.ts'
|
|
|
+import fileSizeFormat from '@/utils/fileSizeFormat'
|
|
|
+import { messageType } from '@/constant/im'
|
|
|
+const { ALL_MESSAGE_TYPE, CUSTOM_TYPE } = messageType
|
|
|
+// 当前用户信息
|
|
|
+const userStore = useUserStore()
|
|
|
+const avatar = computed(() => userStore.user.avatar ?? avatarImg)
|
|
|
/* props */
|
|
|
const props = defineProps({
|
|
|
messageData: {
|
|
@@ -16,25 +25,14 @@ const props = defineProps({
|
|
|
})
|
|
|
const { nowPickInfo } = toRefs(props)
|
|
|
const { messageData } = toRefs(props)
|
|
|
-//消息类型
|
|
|
-const ALL_MESSAGE_TYPE = {
|
|
|
- TEXT: 'txt',
|
|
|
- IMAGE: 'img',
|
|
|
- AUDIO: 'audio',
|
|
|
- LOCAL: 'loc',
|
|
|
- VIDEO: 'video',
|
|
|
- FILE: 'file',
|
|
|
- CUSTOM: 'custom',
|
|
|
- CMD: 'cmd',
|
|
|
- INFORM: 'inform' //这个类型不在环信消息类型内,属于自己定义的一种系统通知类的消息。
|
|
|
-}
|
|
|
/* 处理时间显示间隔 */
|
|
|
const handleMsgTimeShow = (time, index) => {
|
|
|
console.log('>>>>>时间显示', time, index)
|
|
|
const msgList = Array.from(messageData.value)
|
|
|
if (index !== 0) {
|
|
|
const lastTime = msgList[index - 1].time
|
|
|
- return time - lastTime > 50000 ? formatDate(time, 'MM/DD/HH:mm') : false
|
|
|
+ console.log('>>>>>时间间隔', time - lastTime, time, lastTime)
|
|
|
+ return time - lastTime > 50000 ? formatDate(time, 'MM/DD/HH:mm') : ''
|
|
|
} else {
|
|
|
return formatDate(time, 'MM/DD/HH:mm')
|
|
|
}
|
|
@@ -43,9 +41,15 @@ const handleMsgTimeShow = (time, index) => {
|
|
|
const isMyself = (msgBody) => {
|
|
|
return msgBody.from === '1'
|
|
|
}
|
|
|
+/* 文本中是否包含link */
|
|
|
+const isLink = computed(() => {
|
|
|
+ return (msg) => {
|
|
|
+ return paseLink(msg).isLink
|
|
|
+ }
|
|
|
+})
|
|
|
/* 获取自己的用户信息 */
|
|
|
const loginUserInfo = {
|
|
|
- avatarurl: 'https://avatars.githubusercontent.com/u/1?v=4'
|
|
|
+ avatarurl: avatar.value
|
|
|
}
|
|
|
/* 获取他人的用户信息 */
|
|
|
const otherUserInfo = (from) => {
|
|
@@ -98,14 +102,14 @@ const startplayAudio = (msgBody) => {
|
|
|
>
|
|
|
<!-- 普通消息气泡 -->
|
|
|
<div
|
|
|
- v-if="!msgBody.isRecall && msgBody.type !== ALL_MESSAGE_TYPE.INFORM"
|
|
|
+ v-if="!msgBody.isRecall && msgBody.type !== ALL_MESSAGE_TYPE.OA_NOTIFICATION"
|
|
|
class="message_box_item"
|
|
|
:style="{
|
|
|
flexDirection: isMyself(msgBody) ? 'row-reverse' : 'row'
|
|
|
}"
|
|
|
>
|
|
|
<div class="message_item_time">
|
|
|
- {{ handleMsgTimeShow(msgBody.time, index) || '' }}
|
|
|
+ {{ handleMsgTimeShow(msgBody.time, index) }}
|
|
|
</div>
|
|
|
<el-avatar
|
|
|
class="message_item_avator"
|
|
@@ -136,12 +140,6 @@ const startplayAudio = (msgBody) => {
|
|
|
>
|
|
|
<template v-if="!isLink(msgBody.msg)">
|
|
|
{{ msgBody.msg }}
|
|
|
- <!-- 已编辑 -->
|
|
|
- <sup
|
|
|
- style="font-size: 7px; color: #707784"
|
|
|
- v-show="msgBody?.modifiedInfo?.operationCount"
|
|
|
- >(已编辑)</sup
|
|
|
- >
|
|
|
</template>
|
|
|
<template v-else> <span v-html="paseLink(msgBody.msg).msg"> </span></template>
|
|
|
</p>
|
|
@@ -219,62 +217,10 @@ const startplayAudio = (msgBody) => {
|
|
|
</div>
|
|
|
</template>
|
|
|
</div>
|
|
|
- <!-- 右键点击弹起更多功能栏 -->
|
|
|
- <template #dropdown>
|
|
|
- <el-dropdown-menu>
|
|
|
- <el-dropdown-item
|
|
|
- v-if="msgBody.type === ALL_MESSAGE_TYPE.TEXT && isSupported"
|
|
|
- @click="copyTextMessages(msgBody.msg)"
|
|
|
- >
|
|
|
- 复制
|
|
|
- </el-dropdown-item>
|
|
|
- <el-dropdown-item v-if="isMyself(msgBody)" @click="recallMessage(msgBody)">
|
|
|
- 撤回
|
|
|
- </el-dropdown-item>
|
|
|
- <el-dropdown-item
|
|
|
- v-if="msgBody.type === ALL_MESSAGE_TYPE.TEXT && isMyself(msgBody)"
|
|
|
- @click="showModifyMsgModal(msgBody)"
|
|
|
- >
|
|
|
- 编辑
|
|
|
- </el-dropdown-item>
|
|
|
- <el-dropdown-item @click="onMsgQuote(msgBody)"> 引用 </el-dropdown-item>
|
|
|
- <el-dropdown-item @click="deleteMessage(msgBody)"> 删除 </el-dropdown-item>
|
|
|
- <el-dropdown-item v-if="!isMyself(msgBody)" @click="informOnMessage(msgBody)">
|
|
|
- 举报
|
|
|
- </el-dropdown-item>
|
|
|
- </el-dropdown-menu>
|
|
|
- </template>
|
|
|
</el-dropdown>
|
|
|
- <!-- 引用消息展示框 -->
|
|
|
- <div
|
|
|
- class="message_quote_box"
|
|
|
- v-if="msgBody?.ext?.msgQuote"
|
|
|
- @click="clickQuoteMessage(msgBody.ext.msgQuote)"
|
|
|
- >
|
|
|
- <p>
|
|
|
- {{ msgBody?.ext?.msgQuote?.msgSender }}:{{ msgBody?.ext?.msgQuote?.msgPreview }}
|
|
|
- </p>
|
|
|
- </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- 撤回消息通知通知 -->
|
|
|
- <div v-if="msgBody.isRecall" class="recall_style">
|
|
|
- {{ isMyself(msgBody) ? '你' : `${msgBody.from}` }}撤回了一条消息<span
|
|
|
- class="reEdit"
|
|
|
- v-show="isMyself(msgBody) && msgBody.type === ALL_MESSAGE_TYPE.TEXT"
|
|
|
- @click="reEdit(msgBody.msg)"
|
|
|
- >重新编辑</span
|
|
|
- >
|
|
|
- </div>
|
|
|
- <!-- 灰色系统通知 -->
|
|
|
- <div v-if="msgBody.type === ALL_MESSAGE_TYPE.INFORM" class="inform_style">
|
|
|
- <p>
|
|
|
- {{ msgBody.msg }}
|
|
|
- </p>
|
|
|
- </div>
|
|
|
</div>
|
|
|
- <ReportMessage ref="reportMessage" />
|
|
|
- <ModifyMessage ref="modifyMessageRef" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|