From 422fed2719f4bf3e5f093085f2b1112333f0c13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Sat, 25 Oct 2025 19:11:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=9F=B3=E9=A2=91=E8=BD=AC?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=9B=B8=E5=85=B3API=E5=92=8C=E7=BB=84=E4=BB=B6=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E4=BC=98=E5=8C=96=E6=B6=88=E6=81=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=B5=81=E7=A8=8B=EF=BC=8C=E6=8F=90=E5=8D=87=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BD=93=E9=AA=8C=E5=92=8C=E4=BB=A3=E7=A0=81=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/MessageRecord/api.ts | 17 ++++++++ .../components/ClickMeau/index.tsx | 40 ++++++++----------- .../components/MessageRecord/index.tsx | 15 ++++++- .../src/store/module/websocket/msgManage.ts | 9 ----- 4 files changed, 47 insertions(+), 34 deletions(-) diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/api.ts b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/api.ts index 3e92af4a..cb50d14b 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/api.ts +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/api.ts @@ -13,3 +13,20 @@ export const fetchReCallApi = async (params: FetchMomentParams) => { const { sendCommand } = useWebSocketStore.getState(); sendCommand("CmdRecallMessage", params); }; + +// 音频转文字请求参数接口 +export interface VoiceToTextParams { + friendMessageId: number; + chatroomMessageId: number; + seq: number; +} + +// 音频转文字 +export const fetchVoiceToTextApi = async (params: VoiceToTextParams) => { + const { sendCommand } = useWebSocketStore.getState(); + sendCommand("CmdVoiceToText", { + friendMessageId: params.friendMessageId, + chatroomMessageId: params.chatroomMessageId, + seq: params.seq, + }); +}; diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/ClickMeau/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/ClickMeau/index.tsx index b930e1b7..5f7ace49 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/ClickMeau/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/components/ClickMeau/index.tsx @@ -6,6 +6,7 @@ import { RollbackOutlined, ExportOutlined, LinkOutlined, + SoundOutlined, } from "@ant-design/icons"; import dayjs from "dayjs"; import { ChatRecord } from "@/pages/pc/ckbox/data"; @@ -113,31 +114,12 @@ const ClickMenu: React.FC = ({ }; // 检查是否为文本消息 const isTextMessage = (): boolean => { - // msgType === 1 是纯文本消息 - if (messageData.msgType === 1) return true; + return messageData.msgType === 1; + }; - // 尝试解析 content,如果是 JSON 且只包含 text/content 字段,也认为是文本 - try { - const parsed = JSON.parse(messageData.content || ""); - // 如果包含图片、视频、语音等字段,则不是纯文本 - if ( - parsed.previewImage || - parsed.tencentUrl || - parsed.voiceUrl || - parsed.voice || - parsed.videoUrl || - parsed.video || - parsed.fileUrl || - parsed.file - ) { - return false; - } - // 包含 text 或 content 字段,认为是文本 - return !!(parsed.text || parsed.content); - } catch (error) { - // 不是 JSON,如果 msgType 不确定,按文本处理 - return true; - } + // 检查是否为音频消息 + const isAudioMessage = (): boolean => { + return messageData.msgType === 34; }; const menuItems = [ @@ -156,6 +138,16 @@ const ClickMenu: React.FC = ({ }, ] : []), + // 只在音频消息时显示转文字选项 + ...(isAudioMessage() + ? [ + { + key: "voiceToText", + icon: , + label: "转换文字", + }, + ] + : []), { key: "multipleForwarding", icon: , diff --git a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx index de065ea2..5ac5eaf8 100644 --- a/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx +++ b/Touchkebao/src/pages/pc/ckbox/weChat/components/ChatWindow/components/MessageRecord/index.tsx @@ -14,7 +14,7 @@ import styles from "./com.module.scss"; import { useWeChatStore } from "@/store/module/weChat/weChat"; import { useContactStore } from "@/store/module/weChat/contacts"; import { useCkChatStore } from "@/store/module/ckchat/ckchat"; -import { fetchReCallApi } from "./api"; +import { fetchReCallApi, fetchVoiceToTextApi } from "./api"; import TransmitModal from "./components/TransmitModal"; interface MessageRecordProps { @@ -709,6 +709,15 @@ const MessageRecord: React.FC = ({ contract }) => { }); }; + const handVoiceToText = messageData => { + // 音频转文字的处理逻辑 + fetchVoiceToTextApi({ + friendMessageId: messageData?.wechatFriendId ? messageData.id : 0, + chatroomMessageId: messageData?.wechatFriendId ? 0 : messageData.id, + seq: +new Date(), + }); + }; + const handQuote = (messageData: ChatRecord) => { const isGroupUser = !!currentContract?.chatroomId; const isSend = !!messageData.isSend; @@ -751,6 +760,10 @@ const MessageRecord: React.FC = ({ contract }) => { // 撤回逻辑 handRecall(contextMenu.messageData); break; + case "voiceToText": + // 音频转文字逻辑 + handVoiceToText(contextMenu.messageData); + break; default: break; } diff --git a/Touchkebao/src/store/module/websocket/msgManage.ts b/Touchkebao/src/store/module/websocket/msgManage.ts index 81a79ffb..ce206546 100644 --- a/Touchkebao/src/store/module/websocket/msgManage.ts +++ b/Touchkebao/src/store/module/websocket/msgManage.ts @@ -153,7 +153,6 @@ const messageHandlers: Record = { const msg = findMessageById( message.friendMessageId || message.chatroomMessageId, ); - console.log("CmdVoiceToTextResult", msg); const content = JSON.parse(msg.content); if (msg) { updateMessage(msg.id, { @@ -163,14 +162,6 @@ const messageHandlers: Record = { }), }); } - // { - // "friendMessageId":753361041, - // "chatroomMessageId":0, - // "text":"以后我会好好对待你。", - // "seq":76698, - // "cmdType":"CmdVoiceToTextResult" - // } - console.log("CmdVoiceToTextResult", message); }, // 可以继续添加更多处理器...