From 65d5aacac9be7be897c202e84099c09c9f1a793b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 7 May 2026 13:07:56 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(im):=20=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E7=BE=A4=E5=90=8D=E7=89=87=20v0.1=EF=BC=9A=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E8=AF=84=E5=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../im/home/components/card/CardBubble.vue | 67 ++++++++++++++ .../im/home/components/card/CardLineLabel.vue | 28 ++++++ .../components/user/RecommendCardDialog.vue | 82 +++++++---------- .../im/home/components/user/UserInfo.vue | 5 +- .../conversation/ConversationGroupSide.vue | 22 +++++ .../components/message/MessageHistory.vue | 18 ++-- .../components/message/ReplyPreview.vue | 10 +- src/views/im/manager/group/request/index.vue | 5 +- .../manager/message/MessageContentPreview.vue | 28 ++++-- src/views/im/utils/conversation.ts | 92 ++++++++++++------- src/views/im/utils/user.ts | 28 ++++++ 11 files changed, 277 insertions(+), 108 deletions(-) create mode 100644 src/views/im/home/components/card/CardBubble.vue create mode 100644 src/views/im/home/components/card/CardLineLabel.vue diff --git a/src/views/im/home/components/card/CardBubble.vue b/src/views/im/home/components/card/CardBubble.vue new file mode 100644 index 000000000..ead70f839 --- /dev/null +++ b/src/views/im/home/components/card/CardBubble.vue @@ -0,0 +1,67 @@ + + + diff --git a/src/views/im/home/components/card/CardLineLabel.vue b/src/views/im/home/components/card/CardLineLabel.vue new file mode 100644 index 000000000..eb265f791 --- /dev/null +++ b/src/views/im/home/components/card/CardLineLabel.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/views/im/home/components/user/RecommendCardDialog.vue b/src/views/im/home/components/user/RecommendCardDialog.vue index af781161f..233cb3411 100644 --- a/src/views/im/home/components/user/RecommendCardDialog.vue +++ b/src/views/im/home/components/user/RecommendCardDialog.vue @@ -1,6 +1,6 @@ @@ -195,6 +195,7 @@ import RecommendCardDialog from './RecommendCardDialog.vue' import { getSimpleUser, type UserVO } from '@/api/system/user' import { useFriendStore } from '../../store/friendStore' import { ImFriendAddSource } from '../../../utils/constants' +import { toUserCardTarget } from '../../../utils/message' import { getGenderColor, getGenderIcon } from '../../../utils/user' import { DICT_TYPE, getDictLabel } from '@/utils/dict' import { formatDate } from '@/utils/formatTime' @@ -353,6 +354,8 @@ const presetUserForAdd = ref(null) /** 把他推荐给朋友:弹 RecommendCardDialog 选目标会话 */ const recommendVisible = ref(false) // 推荐名片弹窗显隐:「把他推荐给朋友」入口控制 +/** 推荐名片源对象:用户名片(targetType = PRIVATE),从 full 派生 */ +const recommendTarget = computed(() => toUserCardTarget(full.value)) function handleRecommend() { if (!props.user?.id) { return diff --git a/src/views/im/home/pages/conversation/components/conversation/ConversationGroupSide.vue b/src/views/im/home/pages/conversation/components/conversation/ConversationGroupSide.vue index c992485de..e1f8f14fe 100644 --- a/src/views/im/home/pages/conversation/components/conversation/ConversationGroupSide.vue +++ b/src/views/im/home/pages/conversation/components/conversation/ConversationGroupSide.vue @@ -253,6 +253,19 @@ class="im-conversation-group-side__chevron" /> + +
+ 分享群名片 + +
@@ -395,6 +408,9 @@ + + + @@ -427,6 +443,8 @@ import GroupMemberSelector, { type GroupMemberFlag } from '../../../../components/group/GroupMemberSelector.vue' import GroupRequestListDialog from '../../../../components/group/GroupRequestListDialog.vue' +import RecommendCardDialog from '../../../../components/user/RecommendCardDialog.vue' +import { toGroupCardTarget } from '@/views/im/utils/message' import type { Conversation, FriendLite, GroupLite } from '../../../../types' import type { GroupMemberLite } from '../../../../components/group/GroupMember.vue' @@ -471,6 +489,10 @@ const removeVisible = ref(false) const adminVisible = ref(false) const transferOwnerVisible = ref(false) const requestListVisible = ref(false) +/** 分享群名片弹窗显隐:「分享群名片」入口控制 */ +const recommendCardVisible = ref(false) +/** 群名片源对象:targetType = GROUP,含成员数快照 */ +const recommendCardTarget = computed(() => toGroupCardTarget(props.group)) const showAllMembers = ref(false) const namePopoverVisible = ref(false) const noticePopoverVisible = ref(false) diff --git a/src/views/im/home/pages/conversation/components/message/MessageHistory.vue b/src/views/im/home/pages/conversation/components/message/MessageHistory.vue index e3b7f8caf..cafc18519 100644 --- a/src/views/im/home/pages/conversation/components/message/MessageHistory.vue +++ b/src/views/im/home/pages/conversation/components/message/MessageHistory.vue @@ -252,14 +252,12 @@ [视频] - -
+ - - 个人名片:{{ cardOf(message)?.nickname || '' }} -
+ :card="cardOf(message)" + class="text-sm text-[var(--el-text-color-secondary)]" + /> (message.content)?.nickname ?? ''}` + case ImMessageType.CARD: { + const card = parseMessage(message.content) + return `[${getCardLabelInfo(card).label}] ${card?.name ?? ''}` + } case ImMessageType.FACE: return buildFacePreviewText(faceOf(message)) case ImMessageType.RECALL: diff --git a/src/views/im/home/pages/conversation/components/message/ReplyPreview.vue b/src/views/im/home/pages/conversation/components/message/ReplyPreview.vue index 7f76c6e91..463590bf1 100644 --- a/src/views/im/home/pages/conversation/components/message/ReplyPreview.vue +++ b/src/views/im/home/pages/conversation/components/message/ReplyPreview.vue @@ -57,13 +57,8 @@ - - + +