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 }) => { )} + +
+