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