From 744229a02ee0025563dfcddb81ce44f09637b499 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 1 May 2026 09:59:27 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(im):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=AF=AD=E9=9F=B3=E8=BE=93=E5=85=A5=E7=9A=84=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/input/EmojiPicker.vue | 16 +- .../components/input/MessageInput.vue | 21 +- .../components/input/VoiceRecorder.vue | 193 ++++++++++++++---- 3 files changed, 181 insertions(+), 49 deletions(-) diff --git a/src/views/im/home/pages/conversation/components/input/EmojiPicker.vue b/src/views/im/home/pages/conversation/components/input/EmojiPicker.vue index 07c412613..93ac70c10 100644 --- a/src/views/im/home/pages/conversation/components/input/EmojiPicker.vue +++ b/src/views/im/home/pages/conversation/components/input/EmojiPicker.vue @@ -9,7 +9,7 @@
@@ -99,3 +99,17 @@ onUnmounted(() => { }) + + diff --git a/src/views/im/home/pages/conversation/components/input/MessageInput.vue b/src/views/im/home/pages/conversation/components/input/MessageInput.vue index f2fdb50e0..36b2bb060 100644 --- a/src/views/im/home/pages/conversation/components/input/MessageInput.vue +++ b/src/views/im/home/pages/conversation/components/input/MessageInput.vue @@ -71,7 +71,7 @@ @@ -113,6 +113,13 @@ class="bottom-full left-3 mb-2" @select="insertText" /> + + +
@@ -127,9 +134,6 @@ @select="onMentionSelect" /> - - - @@ -508,8 +512,12 @@ function onInput() { // ==================== 表情 ==================== const emojiVisible = ref(false) +/** 切换表情面板;打开时互斥关掉语音面板 */ function toggleEmoji() { emojiVisible.value = !emojiVisible.value + if (emojiVisible.value) { + voiceVisible.value = false + } } // ==================== @ 成员选择(群聊) ==================== @@ -768,6 +776,11 @@ async function onFilePicked(e: Event) { // ==================== 语音 ==================== const voiceVisible = ref(false) +/** 打开语音录制面板;互斥关掉表情面板 */ +function openVoice() { + voiceVisible.value = true + emojiVisible.value = false +} /** VoiceRecorder 录完后回传 blob,包成 webm 文件上传,发送 VOICE 消息 */ async function onVoiceSend(payload: { blob: Blob; duration: number }) { const file = new File([payload.blob], `voice-${Date.now()}.webm`, { type: payload.blob.type }) diff --git a/src/views/im/home/pages/conversation/components/input/VoiceRecorder.vue b/src/views/im/home/pages/conversation/components/input/VoiceRecorder.vue index 1bbb91541..537186ab0 100644 --- a/src/views/im/home/pages/conversation/components/input/VoiceRecorder.vue +++ b/src/views/im/home/pages/conversation/components/input/VoiceRecorder.vue @@ -1,41 +1,68 @@