Skip to content

Commit 476fd44

Browse files
committed
fix: 修复自己发送的消息撤回未更新
1 parent f208db9 commit 476fd44

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

src/stores/chat.ts

+9-14
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,7 @@ export const useChatStore = defineStore('chat', () => {
140140
const currentMsgReply = ref<Partial<MessageType>>({})
141141

142142
// 将消息列表转换为数组
143-
const chatMessageList = computed(() =>
144-
currentMessageMap.value ? Array.from(currentMessageMap.value.values()) : [],
145-
)
143+
const chatMessageList = computed(() => [...(currentMessageMap.value?.values() || [])])
146144

147145
const getMsgList = async (size = pageSize) => {
148146
currentMessageOptions.value && (currentMessageOptions.value.isLoading = true)
@@ -372,18 +370,15 @@ export const useChatStore = defineStore('chat', () => {
372370
const updateRecallStatus = (data: RevokedMsgType) => {
373371
const { msgId } = data
374372
const message = currentMessageMap.value?.get(msgId)
375-
if (message) {
373+
if (message && typeof data.recallUid === 'number') {
376374
message.message.type = MsgEnum.RECALL
377-
378-
if (typeof data.recallUid === 'number') {
379-
const cacheUser = cachedStore.userCachedList[data.recallUid]
380-
// 如果撤回者的 id 不等于消息发送人的 id, 或者你本人就是管理员,那么显示管理员撤回的。
381-
if (data.recallUid !== message.fromUser.uid) {
382-
message.message.body = `管理员"${cacheUser.name}"撤回了一条成员消息` // 后期根据本地用户数据修改
383-
} else {
384-
// 如果被撤回的消息是消息发送者撤回,正常显示
385-
message.message.body = `"${cacheUser.name}"撤回了一条消息` // 后期根据本地用户数据修改
386-
}
375+
const cacheUser = cachedStore.userCachedList[data.recallUid]
376+
// 如果撤回者的 id 不等于消息发送人的 id, 或者你本人就是管理员,那么显示管理员撤回的。
377+
if (data.recallUid !== message.fromUser.uid) {
378+
message.message.body = `管理员"${cacheUser.name}"撤回了一条成员消息` // 后期根据本地用户数据修改
379+
} else {
380+
// 如果被撤回的消息是消息发送者撤回,正常显示
381+
message.message.body = `"${cacheUser.name}"撤回了一条消息` // 后期根据本地用户数据修改
387382
}
388383
}
389384
// 更新与这条撤回消息有关的消息

src/views/Home/Chat/components/ChatList/MsgItem/index.vue

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script setup lang="ts">
2-
import { computed, nextTick, onMounted, ref, toRefs, type Ref, inject, watch, reactive } from 'vue'
2+
import { computed, nextTick, onMounted, ref, type Ref, inject, watch, reactive } from 'vue'
33
import { useUserStore } from '@/stores/user'
44
import { useChatStore, pageSize } from '@/stores/chat'
55
import { formatTimestamp } from '@/utils/computedTime'
@@ -40,7 +40,9 @@ const props = withDefaults(
4040
// 多根元素的时候,不加这个透传属性会报 warning
4141
defineOptions({ inheritAttrs: false })
4242
43-
const { message, fromUser } = toRefs(props.msg)
43+
// 只能对一级 props 进行 toRefs 结构,否则会丢失响应
44+
const message = computed(() => props.msg.message)
45+
const fromUser = computed(() => props.msg.fromUser)
4446
4547
const userStore = useUserStore()
4648
const chatStore = useChatStore()
@@ -140,8 +142,13 @@ onMounted(() => {
140142
}
141143
142144
const targetIsVisible = useElementVisibility(msgVisibleEl)
143-
// 自己的消息才监听未读数计算
144-
if (isCurrentUser.value && msgVisibleEl) {
145+
const msg = props.msg.message
146+
// 自己的消息, 且不是撤回/系统消息,才监听未读数计算
147+
if (
148+
isCurrentUser.value &&
149+
msgVisibleEl &&
150+
![MsgEnum.RECALL, MsgEnum.SYSTEM].includes(msg.type)
151+
) {
145152
// 做元素进入退出视口监听,在视口内的自己的消息就做
146153
// ~~5分钟内每10s中查询一次已读数~~
147154
watch(targetIsVisible, (visible) => {

0 commit comments

Comments
 (0)