♻️ refactor(im): 清理代码中的 TODO 注释并优化逻辑
parent
7c129c18c4
commit
bf79e07d5c
|
|
@ -64,7 +64,6 @@ defineEmits<{
|
|||
const avatarSize = computed(() => Math.ceil(props.height * 0.75))
|
||||
|
||||
/** 角色标签文案:普通成员不显示,其余取 im_group_member_role 字典 label */
|
||||
// TODO DONE @AI:排除成员,剩余通过字典去 get 下,这样逻辑更统一!
|
||||
const roleLabel = computed(() => {
|
||||
if (props.member.role == null || props.member.role === ImGroupMemberRole.NORMAL) {
|
||||
return ''
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
<template>
|
||||
<!--
|
||||
布局约定:DOM 顺序永远是「头像在前 / 气泡在后」,对方消息走默认 row(头像顶左),自己消息靠外层 flex-row-reverse 翻视觉(头像顶右、气泡在头像左侧),跟微信对齐
|
||||
-->
|
||||
<!-- 时间分隔线(TIP_TIME=20):居中灰色时间 -->
|
||||
<div
|
||||
v-if="isTipTime"
|
||||
|
|
@ -41,8 +38,7 @@
|
|||
:class="{ 'flex-row-reverse': message.selfSend }"
|
||||
@contextmenu.prevent="handleContextMenu"
|
||||
>
|
||||
<!-- 头像:DOM 顺序固定为「头像在前 / 气泡在后」,selfSend 走 flex-row-reverse 翻视觉;
|
||||
点头像弹 UserInfoCard 由 UserAvatar 内部承接 -->
|
||||
<!-- 头像:点击弹 UserInfoCard 由 UserAvatar 内部承接 -->
|
||||
<UserAvatar
|
||||
:id="message.selfSend ? userStore.getUser?.id : message.senderId"
|
||||
:name="senderRealNickname"
|
||||
|
|
@ -205,7 +201,7 @@
|
|||
</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 引用块:气泡下方与气泡同侧;selfSend 时竖线镜像到右侧 -->
|
||||
<!-- 引用块:气泡下方,selfSend 时竖线在右侧 -->
|
||||
<ReplyPreview
|
||||
v-if="quote"
|
||||
:quote="quote"
|
||||
|
|
@ -222,6 +218,7 @@
|
|||
import { computed, onBeforeUnmount, ref } from 'vue'
|
||||
import Icon from '@/components/Icon/src/Icon.vue'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
|
||||
import {
|
||||
ImMessageType,
|
||||
|
|
@ -650,8 +647,11 @@ async function handlePin() {
|
|||
return
|
||||
}
|
||||
try {
|
||||
// TODO @AI:这个会不会有问题 TS2554: Expected 1-2 arguments, but got 3
|
||||
await confirmDialog('将在当前群成员的聊天中置顶', '置顶消息', { confirmButtonText: '置顶' })
|
||||
await ElMessageBox.confirm('将在当前群成员的聊天中置顶', '置顶消息', {
|
||||
confirmButtonText: '置顶',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
await apiPinGroupMessage({ groupId: group.id, messageId: props.message.id })
|
||||
successMessage('已置顶')
|
||||
} catch {}
|
||||
|
|
|
|||
|
|
@ -635,7 +635,8 @@ export const useGroupStore = defineStore('imGroupStore', {
|
|||
|
||||
/** 群消息置顶:从 payload 直接拿完整消息对象 push 到 pinnedMessages */
|
||||
applyGroupMessagePinNotification(groupId: number, payload: GroupNotificationPayload) {
|
||||
if (!payload.message) {
|
||||
const message = payload.message
|
||||
if (!message) {
|
||||
return
|
||||
}
|
||||
const group = this.getGroup(groupId)
|
||||
|
|
@ -644,19 +645,18 @@ export const useGroupStore = defineStore('imGroupStore', {
|
|||
}
|
||||
// 幂等:已存在同 messageId 不重复 push
|
||||
const existing = group.pinnedMessages || []
|
||||
// TODO @AI:TS18048: payload.message is possibly undefined
|
||||
if (existing.some((m) => m.id === payload.message.id)) {
|
||||
if (existing.some((msg) => msg.id === message.id)) {
|
||||
return
|
||||
}
|
||||
// payload.message 字段名跟 Message 一致(仅 sendTime 需要从 ISO 串转毫秒戳,selfSend 按当前用户算)
|
||||
// message 字段名跟 Message 一致(仅 sendTime 需要从 ISO 串转毫秒戳,selfSend 按当前用户算)
|
||||
const newMessage: Message = {
|
||||
...payload.message,
|
||||
clientMessageId: payload.message.clientMessageId || '',
|
||||
sendTime: new Date(payload.message.sendTime).getTime(),
|
||||
targetId: payload.message.groupId,
|
||||
selfSend: payload.message.senderId === getCurrentUserId(),
|
||||
atUserIds: payload.message.atUserIds || [],
|
||||
receiverUserIds: payload.message.receiverUserIds || []
|
||||
...message,
|
||||
clientMessageId: message.clientMessageId || '',
|
||||
sendTime: new Date(message.sendTime).getTime(),
|
||||
targetId: message.groupId,
|
||||
selfSend: message.senderId === getCurrentUserId(),
|
||||
atUserIds: message.atUserIds || [],
|
||||
receiverUserIds: message.receiverUserIds || []
|
||||
}
|
||||
group.pinnedMessages = [...existing, newMessage]
|
||||
this.saveGroups()
|
||||
|
|
|
|||
Loading…
Reference in New Issue