♻️ refactor(im): 清理代码中的 TODO 注释并优化逻辑

im
YunaiV 2026-05-03 13:27:31 +08:00
parent 7c129c18c4
commit bf79e07d5c
3 changed files with 19 additions and 20 deletions

View File

@ -64,7 +64,6 @@ defineEmits<{
const avatarSize = computed(() => Math.ceil(props.height * 0.75)) const avatarSize = computed(() => Math.ceil(props.height * 0.75))
/** 角色标签文案:普通成员不显示,其余取 im_group_member_role 字典 label */ /** 角色标签文案:普通成员不显示,其余取 im_group_member_role 字典 label */
// TODO DONE @AI get
const roleLabel = computed(() => { const roleLabel = computed(() => {
if (props.member.role == null || props.member.role === ImGroupMemberRole.NORMAL) { if (props.member.role == null || props.member.role === ImGroupMemberRole.NORMAL) {
return '' return ''

View File

@ -1,7 +1,4 @@
<template> <template>
<!--
布局约定DOM 顺序永远是头像在前 / 气泡在后对方消息走默认 row头像顶左自己消息靠外层 flex-row-reverse 翻视觉头像顶右气泡在头像左侧跟微信对齐
-->
<!-- 时间分隔线TIP_TIME=20居中灰色时间 --> <!-- 时间分隔线TIP_TIME=20居中灰色时间 -->
<div <div
v-if="isTipTime" v-if="isTipTime"
@ -41,8 +38,7 @@
:class="{ 'flex-row-reverse': message.selfSend }" :class="{ 'flex-row-reverse': message.selfSend }"
@contextmenu.prevent="handleContextMenu" @contextmenu.prevent="handleContextMenu"
> >
<!-- 头像DOM 顺序固定为头像在前 / 气泡在后selfSend flex-row-reverse 翻视觉 <!-- 头像点击弹 UserInfoCard UserAvatar 内部承接 -->
点头像弹 UserInfoCard UserAvatar 内部承接 -->
<UserAvatar <UserAvatar
:id="message.selfSend ? userStore.getUser?.id : message.senderId" :id="message.selfSend ? userStore.getUser?.id : message.senderId"
:name="senderRealNickname" :name="senderRealNickname"
@ -205,7 +201,7 @@
</el-tag> </el-tag>
</div> </div>
</div> </div>
<!-- 引用块气泡下方与气泡同侧selfSend 时竖线镜像到右侧 --> <!-- 引用块气泡下方selfSend 时竖线在右侧 -->
<ReplyPreview <ReplyPreview
v-if="quote" v-if="quote"
:quote="quote" :quote="quote"
@ -222,6 +218,7 @@
import { computed, onBeforeUnmount, ref } from 'vue' import { computed, onBeforeUnmount, ref } from 'vue'
import Icon from '@/components/Icon/src/Icon.vue' import Icon from '@/components/Icon/src/Icon.vue'
import { useMessage } from '@/hooks/web/useMessage' import { useMessage } from '@/hooks/web/useMessage'
import { ElMessageBox } from 'element-plus'
import { import {
ImMessageType, ImMessageType,
@ -650,8 +647,11 @@ async function handlePin() {
return return
} }
try { try {
// TODO @AI TS2554: Expected 1-2 arguments, but got 3 await ElMessageBox.confirm('将在当前群成员的聊天中置顶', '置顶消息', {
await confirmDialog('将在当前群成员的聊天中置顶', '置顶消息', { confirmButtonText: '置顶' }) confirmButtonText: '置顶',
cancelButtonText: '取消',
type: 'warning'
})
await apiPinGroupMessage({ groupId: group.id, messageId: props.message.id }) await apiPinGroupMessage({ groupId: group.id, messageId: props.message.id })
successMessage('已置顶') successMessage('已置顶')
} catch {} } catch {}

View File

@ -635,7 +635,8 @@ export const useGroupStore = defineStore('imGroupStore', {
/** 群消息置顶:从 payload 直接拿完整消息对象 push 到 pinnedMessages */ /** 群消息置顶:从 payload 直接拿完整消息对象 push 到 pinnedMessages */
applyGroupMessagePinNotification(groupId: number, payload: GroupNotificationPayload) { applyGroupMessagePinNotification(groupId: number, payload: GroupNotificationPayload) {
if (!payload.message) { const message = payload.message
if (!message) {
return return
} }
const group = this.getGroup(groupId) const group = this.getGroup(groupId)
@ -644,19 +645,18 @@ export const useGroupStore = defineStore('imGroupStore', {
} }
// 幂等:已存在同 messageId 不重复 push // 幂等:已存在同 messageId 不重复 push
const existing = group.pinnedMessages || [] const existing = group.pinnedMessages || []
// TODO @AITS18048: payload.message is possibly undefined if (existing.some((msg) => msg.id === message.id)) {
if (existing.some((m) => m.id === payload.message.id)) {
return return
} }
// payload.message 字段名跟 Message 一致(仅 sendTime 需要从 ISO 串转毫秒戳selfSend 按当前用户算) // message 字段名跟 Message 一致(仅 sendTime 需要从 ISO 串转毫秒戳selfSend 按当前用户算)
const newMessage: Message = { const newMessage: Message = {
...payload.message, ...message,
clientMessageId: payload.message.clientMessageId || '', clientMessageId: message.clientMessageId || '',
sendTime: new Date(payload.message.sendTime).getTime(), sendTime: new Date(message.sendTime).getTime(),
targetId: payload.message.groupId, targetId: message.groupId,
selfSend: payload.message.senderId === getCurrentUserId(), selfSend: message.senderId === getCurrentUserId(),
atUserIds: payload.message.atUserIds || [], atUserIds: message.atUserIds || [],
receiverUserIds: payload.message.receiverUserIds || [] receiverUserIds: message.receiverUserIds || []
} }
group.pinnedMessages = [...existing, newMessage] group.pinnedMessages = [...existing, newMessage]
this.saveGroups() this.saveGroups()