♻️ refactor(im): 清理代码中的 TODO 注释并优化逻辑
parent
7c129c18c4
commit
bf79e07d5c
|
|
@ -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 ''
|
||||||
|
|
|
||||||
|
|
@ -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 {}
|
||||||
|
|
|
||||||
|
|
@ -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 @AI:TS18048: 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()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue