增加喊话功能
This commit is contained in:
parent
bc65a8ceae
commit
86a82f12d4
|
|
@ -39,3 +39,11 @@ export const stopDeviceCameraZoomApi = (data) => {
|
||||||
export const stopDeviceCameraApi = (data) => {
|
export const stopDeviceCameraApi = (data) => {
|
||||||
return service.post('/ptz/stop/turn', data)
|
return service.post('/ptz/stop/turn', data)
|
||||||
}
|
}
|
||||||
|
// 开启喊话
|
||||||
|
export const openDeviceMKApi = (data) => {
|
||||||
|
return service.post('/icvs/audio/startCall?token=' + data.token, data)
|
||||||
|
}
|
||||||
|
// 关闭喊话
|
||||||
|
export const stopDeviceMKApi = (data) => {
|
||||||
|
return service.post('/icvs/audio/stopTalk?token=' + data.token, data)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -185,36 +185,36 @@
|
||||||
<n-grid-item :span="3">
|
<n-grid-item :span="3">
|
||||||
<div>
|
<div>
|
||||||
<n-radio
|
<n-radio
|
||||||
value="关"
|
value="关闭"
|
||||||
name="basic-demo"
|
name="basic-demo"
|
||||||
@change="handleChange1"
|
@change="handleChange1"
|
||||||
:checked="checkedValue === '关'"
|
:checked="checkedValue === '关闭'"
|
||||||
>
|
>
|
||||||
关
|
关闭
|
||||||
</n-radio>
|
</n-radio>
|
||||||
</div>
|
</div>
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
<n-grid-item :span="3">
|
<n-grid-item :span="3">
|
||||||
<div>
|
<div>
|
||||||
<n-radio
|
<n-radio
|
||||||
value="闪烁"
|
value="开启"
|
||||||
name="basic-demo"
|
name="basic-demo"
|
||||||
@change="handleChange2"
|
@change="handleChange2"
|
||||||
:checked="checkedValue === '闪烁'"
|
:checked="checkedValue === '开启'"
|
||||||
>
|
>
|
||||||
闪烁
|
开启
|
||||||
</n-radio>
|
</n-radio>
|
||||||
</div>
|
</div>
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
<n-grid-item :span="3">
|
<n-grid-item :span="3">
|
||||||
<div class="row-4-item">
|
<div class="row-4-item">
|
||||||
<n-radio
|
<n-radio
|
||||||
value="运动时闪烁"
|
value="自动"
|
||||||
name="basic-demo"
|
name="basic-demo"
|
||||||
@change="handleChange3"
|
@change="handleChange3"
|
||||||
:checked="checkedValue === '运动时闪烁'"
|
:checked="checkedValue === '自动'"
|
||||||
>
|
>
|
||||||
运动时闪烁
|
自动
|
||||||
</n-radio>
|
</n-radio>
|
||||||
</div>
|
</div>
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
|
|
@ -320,7 +320,18 @@
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
<n-grid-item :span="3">
|
<n-grid-item :span="3">
|
||||||
<div class="row-6-item-1">
|
<div class="row-6-item-1">
|
||||||
<img src="@/assets/home-imgs/control-3-mk.png" alt="" />
|
<!-- 开启麦克风 -->
|
||||||
|
<img
|
||||||
|
alt=""
|
||||||
|
v-if="!isOpenMK"
|
||||||
|
@click="onHandleOpenOrCloseMK(1)"
|
||||||
|
src="@/assets/home-imgs/control-3-mk.png"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- 关闭麦克风 -->
|
||||||
|
<span v-else style="cursor: pointer" @click="onHandleOpenOrCloseMK(2)"
|
||||||
|
>结束喊话</span
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
</n-grid>
|
</n-grid>
|
||||||
|
|
@ -386,6 +397,7 @@ import {
|
||||||
BatteryFullSharp,
|
BatteryFullSharp,
|
||||||
BatteryChargingSharp,
|
BatteryChargingSharp,
|
||||||
} from '@vicons/ionicons5'
|
} from '@vicons/ionicons5'
|
||||||
|
import { openDeviceMKApi, stopDeviceMKApi } from '@/utils/initLogin'
|
||||||
import { useMessage, useDialog, NRadio, NRadioGroup, NInputNumber, NSpace } from 'naive-ui'
|
import { useMessage, useDialog, NRadio, NRadioGroup, NInputNumber, NSpace } from 'naive-ui'
|
||||||
import { debounce } from 'lodash'
|
import { debounce } from 'lodash'
|
||||||
|
|
||||||
|
|
@ -404,7 +416,7 @@ const isDragging = ref(false)
|
||||||
const currentTop = ref(0)
|
const currentTop = ref(0)
|
||||||
const startY = ref(0)
|
const startY = ref(0)
|
||||||
const startTop = ref(0)
|
const startTop = ref(0)
|
||||||
const checkedValue = ref('')
|
const checkedValue = ref('关闭')
|
||||||
const selectValue = ref('')
|
const selectValue = ref('')
|
||||||
const deviceToken = ref('')
|
const deviceToken = ref('')
|
||||||
const deviceInfo = ref({})
|
const deviceInfo = ref({})
|
||||||
|
|
@ -603,16 +615,41 @@ onMounted(() => {
|
||||||
})
|
})
|
||||||
|
|
||||||
const handleChange1 = (e) => {
|
const handleChange1 = (e) => {
|
||||||
console.log(e)
|
|
||||||
checkedValue.value = e.target.value
|
checkedValue.value = e.target.value
|
||||||
|
handleChangeLight(checkedValue.value)
|
||||||
}
|
}
|
||||||
const handleChange2 = (e) => {
|
const handleChange2 = (e) => {
|
||||||
console.log(e)
|
|
||||||
checkedValue.value = e.target.value
|
checkedValue.value = e.target.value
|
||||||
|
handleChangeLight(checkedValue.value)
|
||||||
}
|
}
|
||||||
const handleChange3 = (e) => {
|
const handleChange3 = (e) => {
|
||||||
checkedValue.value = e.target.value
|
checkedValue.value = e.target.value
|
||||||
|
handleChangeLight(checkedValue.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 警灯闪烁
|
||||||
|
|
||||||
|
const handleChangeLight = async (value) => {
|
||||||
|
const lightMap = {
|
||||||
|
关闭: 'OFF',
|
||||||
|
开启: 'ON',
|
||||||
|
自动: 'AUTO',
|
||||||
|
}
|
||||||
|
|
||||||
|
const { data: res } = await handleRobotActionApi({
|
||||||
|
puId: robotData.robotInfo?.puId,
|
||||||
|
type: '19',
|
||||||
|
value: lightMap[value],
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res.code == 200) {
|
||||||
|
message.success('操作成功')
|
||||||
|
} else {
|
||||||
|
message.error('操作失败')
|
||||||
|
checkedValue.value = '关闭'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const handleChange4 = (e) => {
|
const handleChange4 = (e) => {
|
||||||
checkedValue.value = e.target.value
|
checkedValue.value = e.target.value
|
||||||
}
|
}
|
||||||
|
|
@ -775,6 +812,55 @@ const handleChangeVolume = debounce(async (value) => {
|
||||||
}
|
}
|
||||||
}, 1000)
|
}, 1000)
|
||||||
|
|
||||||
|
const isOpenMK = ref(false)
|
||||||
|
const onHandleOpenOrCloseMK = async (type) => {
|
||||||
|
if (type === 1) {
|
||||||
|
// 先判断当前设备有没有开启MK
|
||||||
|
try {
|
||||||
|
// 请求麦克风权限并检查状态
|
||||||
|
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
|
||||||
|
|
||||||
|
// 检查麦克风是否真的在接收声音(可选)
|
||||||
|
const audioTracks = stream.getAudioTracks()
|
||||||
|
if (audioTracks.length > 0) {
|
||||||
|
audioTracks.forEach((track) => track.stop())
|
||||||
|
|
||||||
|
// 调用麦克风开启接口
|
||||||
|
const { data: res } = await openDeviceMKApi({
|
||||||
|
token: deviceToken.value,
|
||||||
|
puId: robotData.robotInfo?.puId,
|
||||||
|
idx: 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res.code == 200) {
|
||||||
|
message.success('麦克风开启成功')
|
||||||
|
isOpenMK.value = true
|
||||||
|
} else {
|
||||||
|
message.error('麦克风开启失败')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
message.error('未检测到音频输入设备')
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
message.error('麦克风访问被拒绝或不可用,请检查麦克风权限')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 调用麦克风开启接口
|
||||||
|
const { data: res } = await stopDeviceMKApi({
|
||||||
|
token: deviceToken.value,
|
||||||
|
puid: deviceInfo.value?.puId,
|
||||||
|
idx: 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res.code == 200) {
|
||||||
|
message.success('麦克风已关闭')
|
||||||
|
isOpenMK.value = false
|
||||||
|
} else {
|
||||||
|
message.error('麦克风关闭失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
const token = await getRobotTokenFn() // 获取设备token
|
const token = await getRobotTokenFn() // 获取设备token
|
||||||
const device = await getRobotDeviceListFn() // 获取设备信息
|
const device = await getRobotDeviceListFn() // 获取设备信息
|
||||||
|
|
|
||||||
|
|
@ -185,36 +185,36 @@
|
||||||
<n-grid-item :span="3">
|
<n-grid-item :span="3">
|
||||||
<div>
|
<div>
|
||||||
<n-radio
|
<n-radio
|
||||||
value="关"
|
value="关闭"
|
||||||
name="basic-demo"
|
name="basic-demo"
|
||||||
@change="handleChange1"
|
@change="handleChange1"
|
||||||
:checked="checkedValue === '关'"
|
:checked="checkedValue === '关闭'"
|
||||||
>
|
>
|
||||||
关
|
关闭
|
||||||
</n-radio>
|
</n-radio>
|
||||||
</div>
|
</div>
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
<n-grid-item :span="3">
|
<n-grid-item :span="3">
|
||||||
<div>
|
<div>
|
||||||
<n-radio
|
<n-radio
|
||||||
value="闪烁"
|
value="开启"
|
||||||
name="basic-demo"
|
name="basic-demo"
|
||||||
@change="handleChange2"
|
@change="handleChange2"
|
||||||
:checked="checkedValue === '闪烁'"
|
:checked="checkedValue === '开启'"
|
||||||
>
|
>
|
||||||
闪烁
|
开启
|
||||||
</n-radio>
|
</n-radio>
|
||||||
</div>
|
</div>
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
<n-grid-item :span="3">
|
<n-grid-item :span="3">
|
||||||
<div class="row-4-item">
|
<div class="row-4-item">
|
||||||
<n-radio
|
<n-radio
|
||||||
value="运动时闪烁"
|
value="自动"
|
||||||
name="basic-demo"
|
name="basic-demo"
|
||||||
@change="handleChange3"
|
@change="handleChange3"
|
||||||
:checked="checkedValue === '运动时闪烁'"
|
:checked="checkedValue === '自动'"
|
||||||
>
|
>
|
||||||
运动时闪烁
|
自动
|
||||||
</n-radio>
|
</n-radio>
|
||||||
</div>
|
</div>
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
|
|
@ -320,7 +320,15 @@
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
<n-grid-item :span="3">
|
<n-grid-item :span="3">
|
||||||
<div class="row-6-item-1">
|
<div class="row-6-item-1">
|
||||||
<img src="@/assets/home-imgs/control-3-mk.png" alt="" />
|
<img
|
||||||
|
alt=""
|
||||||
|
v-if="!isOpenMK"
|
||||||
|
@click="onHandleOpenOrCloseMK(1)"
|
||||||
|
src="@/assets/home-imgs/control-3-mk.png"
|
||||||
|
/>
|
||||||
|
<span v-else style="cursor: pointer" @click="onHandleOpenOrCloseMK(2)">
|
||||||
|
结束喊话
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</n-grid-item>
|
</n-grid-item>
|
||||||
</n-grid>
|
</n-grid>
|
||||||
|
|
@ -386,6 +394,7 @@ import {
|
||||||
BatteryFullSharp,
|
BatteryFullSharp,
|
||||||
BatteryChargingSharp,
|
BatteryChargingSharp,
|
||||||
} from '@vicons/ionicons5'
|
} from '@vicons/ionicons5'
|
||||||
|
import { openDeviceMKApi, stopDeviceMKApi } from '@/utils/initLogin'
|
||||||
import { useMessage, useDialog, NRadio, NRadioGroup, NInputNumber, NSpace } from 'naive-ui'
|
import { useMessage, useDialog, NRadio, NRadioGroup, NInputNumber, NSpace } from 'naive-ui'
|
||||||
import { debounce } from 'lodash'
|
import { debounce } from 'lodash'
|
||||||
|
|
||||||
|
|
@ -404,7 +413,7 @@ const isDragging = ref(false)
|
||||||
const currentTop = ref(0)
|
const currentTop = ref(0)
|
||||||
const startY = ref(0)
|
const startY = ref(0)
|
||||||
const startTop = ref(0)
|
const startTop = ref(0)
|
||||||
const checkedValue = ref('')
|
const checkedValue = ref('关闭')
|
||||||
const selectValue = ref('')
|
const selectValue = ref('')
|
||||||
const deviceToken = ref('')
|
const deviceToken = ref('')
|
||||||
const deviceInfo = ref({})
|
const deviceInfo = ref({})
|
||||||
|
|
@ -627,15 +636,39 @@ onMounted(() => {
|
||||||
})
|
})
|
||||||
|
|
||||||
const handleChange1 = (e) => {
|
const handleChange1 = (e) => {
|
||||||
console.log(e)
|
|
||||||
checkedValue.value = e.target.value
|
checkedValue.value = e.target.value
|
||||||
|
handleChangeLight(checkedValue.value)
|
||||||
}
|
}
|
||||||
const handleChange2 = (e) => {
|
const handleChange2 = (e) => {
|
||||||
console.log(e)
|
|
||||||
checkedValue.value = e.target.value
|
checkedValue.value = e.target.value
|
||||||
|
handleChangeLight(checkedValue.value)
|
||||||
}
|
}
|
||||||
const handleChange3 = (e) => {
|
const handleChange3 = (e) => {
|
||||||
checkedValue.value = e.target.value
|
checkedValue.value = e.target.value
|
||||||
|
handleChangeLight(checkedValue.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 警灯闪烁
|
||||||
|
|
||||||
|
const handleChangeLight = async (value) => {
|
||||||
|
const lightMap = {
|
||||||
|
关闭: 'OFF',
|
||||||
|
开启: 'ON',
|
||||||
|
自动: 'AUTO',
|
||||||
|
}
|
||||||
|
|
||||||
|
const { data: res } = await handleRobotActionApi({
|
||||||
|
puId: robotData.robotInfo?.puId,
|
||||||
|
type: '19',
|
||||||
|
value: lightMap[value],
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res.code == 200) {
|
||||||
|
message.success('操作成功')
|
||||||
|
} else {
|
||||||
|
message.error('操作失败')
|
||||||
|
checkedValue.value = '关闭'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const handleChange4 = (e) => {
|
const handleChange4 = (e) => {
|
||||||
checkedValue.value = e.target.value
|
checkedValue.value = e.target.value
|
||||||
|
|
@ -711,6 +744,55 @@ const handleChangeZoomCamera = async (motion) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const isOpenMK = ref(false)
|
||||||
|
const onHandleOpenOrCloseMK = async (type) => {
|
||||||
|
if (type === 1) {
|
||||||
|
// 先判断当前设备有没有开启MK
|
||||||
|
try {
|
||||||
|
// 请求麦克风权限并检查状态
|
||||||
|
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
|
||||||
|
|
||||||
|
// 检查麦克风是否真的在接收声音(可选)
|
||||||
|
const audioTracks = stream.getAudioTracks()
|
||||||
|
if (audioTracks.length > 0) {
|
||||||
|
audioTracks.forEach((track) => track.stop())
|
||||||
|
|
||||||
|
// 调用麦克风开启接口
|
||||||
|
const { data: res } = await openDeviceMKApi({
|
||||||
|
token: deviceToken.value,
|
||||||
|
puId: robotData.robotInfo?.puId,
|
||||||
|
idx: 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res.code == 200) {
|
||||||
|
message.success('麦克风开启成功')
|
||||||
|
isOpenMK.value = true
|
||||||
|
} else {
|
||||||
|
message.error('麦克风开启失败')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
message.error('未检测到音频输入设备')
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
message.error('麦克风访问被拒绝或不可用,请检查麦克风权限')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 调用麦克风开启接口
|
||||||
|
const { data: res } = await stopDeviceMKApi({
|
||||||
|
token: deviceToken.value,
|
||||||
|
puid: deviceInfo.value?.puId,
|
||||||
|
idx: 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (res.code == 200) {
|
||||||
|
message.success('麦克风已关闭')
|
||||||
|
isOpenMK.value = false
|
||||||
|
} else {
|
||||||
|
message.error('麦克风关闭失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 操控机器人
|
// 操控机器人
|
||||||
const handleChangeRobot = debounce(async (type) => {
|
const handleChangeRobot = debounce(async (type) => {
|
||||||
const isInspection = await handleInspection()
|
const isInspection = await handleInspection()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue