From 96046c5830c65a3f628bc1d49e98447960dd9d65 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 23 Oct 2025 10:58:17 +0800
Subject: [PATCH] feat: 喊话90%

---
 src/subPackages/droneConsole/index.vue |  105 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 80 insertions(+), 25 deletions(-)

diff --git a/src/subPackages/droneConsole/index.vue b/src/subPackages/droneConsole/index.vue
index c744c6f..a39ab4e 100644
--- a/src/subPackages/droneConsole/index.vue
+++ b/src/subPackages/droneConsole/index.vue
@@ -1,5 +1,6 @@
 <template>
   <WebViewPlus :src="`${viewUrl}`" @webMessage="onPostMessage"/>
+  <up-toast ref="uNotifyRef"></up-toast>
 </template>
 <script setup>
 import {onHide, onLoad, onShow} from "@dcloudio/uni-app";
@@ -7,19 +8,21 @@
 import {getWebViewUrl} from "@/utils/index.js";
 import Recorder from "js-audio-recorder";
 import dayjs from "dayjs";
-import {startVoice, uploadSpeak} from "@/api/drone.js";
-import {showToast} from "@dcloudio/uni-h5";
+import {useUserStore} from "@/store/index.js";
 
 const wayLineJodInfoId = ref(null)
 const startState = ref('0')
 let recorder
 const soundVideoName = ref('') // 喊话名称
 soundVideoName.value = `${dayjs().format('YYYYMMDDHHmmss')}实时喊话`
+const droneHornState = ref('0')
+const uNotifyRef = ref(null)
 
-const viewUrl = computed(()=>{
+const viewUrl = computed(() => {
   return getWebViewUrl('/DroneConsole', {
     wayLineJodInfoId: wayLineJodInfoId.value,
-    startState: startState.value
+    startState: startState.value,
+    droneHornState: droneHornState.value
   })
 })
 
@@ -33,50 +36,102 @@
     })
     nextTick(() => {
       recorder.start().then(() => {
-        recorder.onprocess = duration => {}
+        recorder.onprocess = duration => {
+        }
       })
     })
-  }else if (data.type === 'stopRecord') {
+  } else if (data.type === 'stopRecord') {
     startState.value = '2'
     recorder.stop()
-  }else if(data.type === 'trialListening'){
+  } else if (data.type === 'trialListening') {
     recorder.play()
-  }else if (data.type === 'resetRecording'){
+  } else if (data.type === 'resetRecording') {
     startState.value = '0'
     recorder?.destroy().then(() => {
       recorder = null // 释放资源
     })
-  }else if(data.type === 'pushToDrone'){
+  } else if (data.type === 'pushToDrone') {
     pushToDrone(data)
-  }else if(data.type === 'saveSound'){
+  } else if (data.type === 'saveSound') {
     saveSound(data)
   }
 }
 
+function uploadUtil(options) {
+  const {formData, file, url} = options
+  return new Promise((resolve, reject) => {
+    let accessToken = useUserStore()?.$state?.userInfo?.access_token;
+    const file = new File([recorder.getWAVBlob()], '.wav')
+    uni.uploadFile({
+      url: `https://wrj.shuixiongit.com/api${url}`,
+      name: 'file',
+      header: {'Blade-Auth': 'bearer ' + accessToken},
+      file,
+      formData,
+      success: (res) => {
+        const resData = JSON.parse(res.data)
+        if (resData.code === 200){
+          resolve(res)
+        }else{
+          showToast(resData.message)
+          reject(res)
+        }
+      },
+      fail: (err) => {
+        reject(err)
+      }
+    });
+  })
+}
+
+function showToast(message) {
+  uNotifyRef.value.show({
+    type: 'default',
+    message,
+    // top: 10,
+    // color: '#fff',
+    // bgColor: '#000',
+    // message,
+    // duration: 1000 * 3,
+    // fontSize: 20,
+    // safeAreaInsetTop: true
+  });
+}
+
+
 // 保存喊话至广播列表内
 function saveSound(data) {
-  const wavFile = new File([recorder.getWAVBlob()], '.wav')
-  let formData = new FormData()
-  formData.append('file', wavFile)
-  formData.append('fileName', data.soundName)
-  formData.append('sn', data.dockSn)
-  uploadSpeak(formData).then(res => {
+  const file = new File([recorder.getWAVBlob()], '.wav')
+  uploadUtil({
+    file,
+    formData: {
+      fileName: data.soundName,
+      sn: data.dockSn
+    },
+    url: '/drone-device-core/speak/api/v1/uploadSpeak'
+  }).then(res => {
     showToast('保存成功')
   })
 }
 
 // 无人机开始喊话
 function pushToDrone(data) {
-  let formData = new FormData()
   const wavBlob = recorder.getWAVBlob()
-  const wavform = new File([wavBlob], new Date().getTime() + '.wav')
-  formData.append('file', wavform)
-  formData.append('sn', data.dockSn)
-  formData.append('psdk_index', 2)
-  formData.append('name', data.soundName)
-  formData.append('volumn', 100)
-  startVoice(formData).then(res => {
-    showToast('喊话成功')
+  const file = new File([wavBlob], new Date().getTime() + '.wav')
+  uploadUtil({
+    file,
+    formData: {
+      name: data.soundName,
+      sn: data.dockSn,
+      psdk_index: 2,
+      volumn: 100,
+    },
+    url: '/drone-device-core/speak/api/v1/startVoice'
+  }).then(res => {
+    droneHornState.value = '1'
+    showToast('播放成功')
+  }).catch(() => {
+    droneHornState.value = '0'
   })
 }
 

--
Gitblit v1.9.3