From 5d08b79904f36c34d31dab97544c7d96b6129c12 Mon Sep 17 00:00:00 2001 From: ZLY Date: Thu, 5 Feb 2026 16:34:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(flowEditor):=20=E6=B7=BB=E5=8A=A0=E9=BA=A6?= =?UTF-8?q?=E5=85=8B=E9=A3=8E=E8=8A=82=E7=82=B9=E8=AF=AD=E9=9F=B3=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/apps.ts | 8 ++++- src/api/interface/index.ts | 7 ++++ .../node/microphoneNode/MicrophoneNode.tsx | 2 +- .../node/style/baseOther.module.less | 9 +++++ .../components/nodeContentMicrophone.tsx | 36 +++++++++++++++++-- .../sideBar/config/localNodeData.ts | 27 ++++++++++++++ 6 files changed, 85 insertions(+), 4 deletions(-) diff --git a/src/api/apps.ts b/src/api/apps.ts index 0c89d85..59353f9 100644 --- a/src/api/apps.ts +++ b/src/api/apps.ts @@ -7,7 +7,8 @@ import { paramsT, StepRunEventParams, ExecuteCurrentEventParams, - ReconnectRunParams + ReconnectRunParams, + voiceTriggerParams } from '@/api/interface/index'; // 公共路径 @@ -143,4 +144,9 @@ export function executeCurrentEvent(params: ExecuteCurrentEventParams) { // 流程运行时-重连运行 export function reconnectRun(params: ReconnectRunParams) { return axios.post(`${runPrefix}/apps/reconnect`, params); +} + +// 语音输入 +export function voiceTrigger(data: voiceTriggerParams) { + return axios.post(`${runPrefix}/apps/voiceTrigger`, data); } \ No newline at end of file diff --git a/src/api/interface/index.ts b/src/api/interface/index.ts index 6fc4ffd..e8f530d 100644 --- a/src/api/interface/index.ts +++ b/src/api/interface/index.ts @@ -92,6 +92,13 @@ export interface flowType { type?: string; } +export interface voiceTriggerParams { + appId: string; + appInstanceId: string; + nodeId: string; + msg: string; +} + // aichat export interface RecommendResponse { code: number; diff --git a/src/components/FlowEditor/node/microphoneNode/MicrophoneNode.tsx b/src/components/FlowEditor/node/microphoneNode/MicrophoneNode.tsx index 6afe236..ab29d16 100644 --- a/src/components/FlowEditor/node/microphoneNode/MicrophoneNode.tsx +++ b/src/components/FlowEditor/node/microphoneNode/MicrophoneNode.tsx @@ -35,7 +35,7 @@ const MicrophoneNode = ({ data, id }: { data: any; id: string }) => { {title} - + ); }; diff --git a/src/components/FlowEditor/node/style/baseOther.module.less b/src/components/FlowEditor/node/style/baseOther.module.less index 41a63e6..f5466a8 100644 --- a/src/components/FlowEditor/node/style/baseOther.module.less +++ b/src/components/FlowEditor/node/style/baseOther.module.less @@ -105,6 +105,15 @@ min-height: 10px; } + .node-content-box { + padding: 10px; + margin: -1px auto; + background-color: #fff; + border-top: 1px solid #ffffff; + border-left: 1px solid #cccccc; + border-right: 1px solid #cccccc; + } + .node-footer { background-color: #ffffff; color: #000000; diff --git a/src/pages/flowEditor/components/nodeContentMicrophone.tsx b/src/pages/flowEditor/components/nodeContentMicrophone.tsx index b8a7f9c..5afe306 100644 --- a/src/pages/flowEditor/components/nodeContentMicrophone.tsx +++ b/src/pages/flowEditor/components/nodeContentMicrophone.tsx @@ -1,9 +1,11 @@ import React, { useEffect, useState } from 'react'; +import { useSelector } from 'react-redux'; import styles from '@/components/FlowEditor/node/style/baseOther.module.less'; import { Handle, Position } from '@xyflow/react'; import { formatDataType } from '@/utils/common'; import { Button } from '@arco-design/web-react'; import { audioService } from '@/components/audio-recognize/audio/main'; +import { voiceTrigger } from '@/api/apps'; interface NodeContentData { parameters?: { @@ -187,6 +189,8 @@ const NodeContentMicrophone = ({ data }: { data: NodeContentData }) => { const [isRecording, setIsRecording] = useState(false); const [resultText, setResultText] = useState(''); const { connect, stop } = audioService(setResultText); + const { appRuntimeData, currentAppData } = useSelector((state: any) => state.ideContainer); + const apiIns = data.parameters?.apiIns || []; const apiOuts = data.parameters?.apiOuts || []; @@ -217,8 +221,14 @@ const NodeContentMicrophone = ({ data }: { data: NodeContentData }) => { const handleComplete = () => { console.log('用户结束语音转文字'); stop(); - // TODO 调接口 等待后端出接口 - // voiceTrigger(params); + const params = { + nodeId: data.nodeId, + appId: currentAppData.id, + appInstanceId: appRuntimeData[currentAppData.id].runId, + msg: resultText || '你好' + }; + if (!params.msg || !params.nodeId) return; + voiceTrigger(params); }; useEffect(() => { @@ -287,6 +297,28 @@ const NodeContentMicrophone = ({ data }: { data: NodeContentData }) => { )} + +
+