|
@@ -2,11 +2,7 @@
|
|
|
<message-component>
|
|
|
<div ref="messageIcon" v-bind="$attrs" class="message-icon">
|
|
|
<span v-show="unReadMessages?.newCount" class="un-read-num">
|
|
|
- {{
|
|
|
- Math.min(unReadMessages?.newCount || 0, 99) > 99
|
|
|
- ? Math.min(unReadMessages?.newCount || 0, 99) + '+'
|
|
|
- : Math.min(unReadMessages?.newCount || 0, 99)
|
|
|
- }}
|
|
|
+ {{ (unReadMessages?.newCount || 0) > 99 ? unReadMessages?.newCount + '+' : unReadMessages?.newCount }}
|
|
|
</span>
|
|
|
<svg-icon name="message"></svg-icon>
|
|
|
</div>
|
|
@@ -58,12 +54,12 @@
|
|
|
|
|
|
<script setup lang="ts" name="Message">
|
|
|
/** 头部消息组件 */
|
|
|
-import { defineComponent, withDefaults, ref, useSlots, watch, inject } from 'vue'
|
|
|
+import { defineComponent, withDefaults, ref, useSlots, watch, inject, ShallowRef } from 'vue'
|
|
|
import { ElPopover } from 'element-plus'
|
|
|
import dayjs from 'dayjs'
|
|
|
import useVW from '@/hooks/useVW'
|
|
|
import useVModel from '@/hooks/useVModel'
|
|
|
-import useMessageLoop from '@/hooks/useMessageLoop'
|
|
|
+import useMessageLoop, { lastMsgs, setLastMsgs } from '@/hooks/useMessageLoop'
|
|
|
import useMainStore from '@/store/main'
|
|
|
import MessageWindow from '@/components/shared/message/MessageWindow.vue'
|
|
|
import ConfirmButton from '@/components/common/ConfirmButton.vue'
|
|
@@ -98,6 +94,39 @@ const setReplyUserId = inject<(replyUserId: number | null) => void>('setReplyUse
|
|
|
const messageIcon = ref<HTMLDivElement>()
|
|
|
|
|
|
const unReadMessages = useMessageLoop()
|
|
|
+watch(
|
|
|
+ () => (unReadMessages as ShallowRef).value,
|
|
|
+ (val) => {
|
|
|
+ console.log(val)
|
|
|
+ if (!visibleMessageWindow.value) {
|
|
|
+ let newMsgs = val.messages
|
|
|
+ if (!newMsgs.length) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!lastMsgs.messages.length) {
|
|
|
+ messageWindowType.value = 'view'
|
|
|
+ visibleMessageWindow.value = true
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let recentMsgTime = Math.max.apply(
|
|
|
+ Math,
|
|
|
+ lastMsgs.messages.map((item) => {
|
|
|
+ return new Date(item.sendTime).getTime()
|
|
|
+ })
|
|
|
+ )
|
|
|
+ let newMsgTime = Math.max.apply(
|
|
|
+ Math,
|
|
|
+ newMsgs.map((item: any) => {
|
|
|
+ return new Date(item.sendTime).getTime()
|
|
|
+ })
|
|
|
+ )
|
|
|
+ if (newMsgTime > recentMsgTime) {
|
|
|
+ messageWindowType.value = 'view'
|
|
|
+ visibleMessageWindow.value = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+)
|
|
|
|
|
|
const messageWindowType = useVModel(props, 'type')
|
|
|
|
|
@@ -150,8 +179,8 @@ const onSendMessage = () => {
|
|
|
width: 24px;
|
|
|
height: 24px;
|
|
|
line-height: 24px;
|
|
|
- right: -12px;
|
|
|
- top: -12px;
|
|
|
+ right: -15px;
|
|
|
+ top: -15px;
|
|
|
text-align: center;
|
|
|
color: $color--white;
|
|
|
font-size: 10px;
|