From 9173d3676312b1ac9c83dfafcb9f7f67433f95f9 Mon Sep 17 00:00:00 2001 From: liqi Date: Fri, 5 Dec 2025 17:00:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E6=BC=8F=E6=B4=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/chat/GroupInfoPanel.vue | 51 ++- src/components/common/Avatar.vue | 54 ++- src/views/chat/ChatView.vue | 457 ++++++++++++++++++++++++- 3 files changed, 539 insertions(+), 23 deletions(-) diff --git a/src/components/chat/GroupInfoPanel.vue b/src/components/chat/GroupInfoPanel.vue index bba77c0..7421503 100644 --- a/src/components/chat/GroupInfoPanel.vue +++ b/src/components/chat/GroupInfoPanel.vue @@ -224,6 +224,16 @@ @confirm="handleDissolve" @cancel="showDissolveConfirm = false" /> + + + @@ -237,6 +247,8 @@ import * as groupApi from '@/api/modules/room' import * as contactApi from '@/api/modules/contact' import Avatar from '@/components/common/Avatar.vue' import ConfirmModal from '@/components/common/ConfirmModal.vue' +import UserInfoCard from '@/components/common/UserInfoCard.vue' +import SelectContactsModal from '@/components/chat/SelectContactsModal.vue' interface Props { show: boolean @@ -267,6 +279,8 @@ const showRemoveMemberConfirm = ref(false) const showQuitConfirm = ref(false) const showDissolveConfirm = ref(false) const pendingMember = ref(null) +const selectedMember = ref(null) +const showUserInfoCard = ref(false) // 当前用户角色 const currentUserRole = computed(() => { @@ -336,7 +350,42 @@ function canManageMember(member: GroupMember): boolean { // 处理成员点击 function handleMemberClick(member: GroupMember) { - // 可以扩展为显示成员详情 + selectedMember.value = member + showUserInfoCard.value = true +} + +// 处理发送消息 +function handleSendMessageToMember() { + if (!selectedMember.value) return + const contact: Contact = { + id: selectedMember.value.user_id, + user_id: selectedMember.value.user_id, + contact_user_id: selectedMember.value.user_id, + room_id: '', + room_type: 'p2p', + is_group: false, + remark_name: selectedMember.value.user?.name || selectedMember.value.nickname || '未知', + is_top: false, + is_muted: false, + user: selectedMember.value.user, + } + chatStore.setCurrentTarget(contact) + showUserInfoCard.value = false + emit('close') +} + +// 处理语音通话 +function handleAudioCallToMember() { + if (!selectedMember.value) return + // 这里可以调用 WebRTC 相关功能 + showUserInfoCard.value = false +} + +// 处理视频通话 +function handleVideoCallToMember() { + if (!selectedMember.value) return + // 这里可以调用 WebRTC 相关功能 + showUserInfoCard.value = false } // 移除成员 diff --git a/src/components/common/Avatar.vue b/src/components/common/Avatar.vue index 591d3b7..68866b4 100644 --- a/src/components/common/Avatar.vue +++ b/src/components/common/Avatar.vue @@ -1,23 +1,30 @@