增加喊话功能
This commit is contained in:
parent
bc65a8ceae
commit
86a82f12d4
|
|
@ -39,3 +39,11 @@ export const stopDeviceCameraZoomApi = (data) => {
|
|||
export const stopDeviceCameraApi = (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">
|
||||
<div>
|
||||
<n-radio
|
||||
value="关"
|
||||
value="关闭"
|
||||
name="basic-demo"
|
||||
@change="handleChange1"
|
||||
:checked="checkedValue === '关'"
|
||||
:checked="checkedValue === '关闭'"
|
||||
>
|
||||
关
|
||||
关闭
|
||||
</n-radio>
|
||||
</div>
|
||||
</n-grid-item>
|
||||
<n-grid-item :span="3">
|
||||
<div>
|
||||
<n-radio
|
||||
value="闪烁"
|
||||
value="开启"
|
||||
name="basic-demo"
|
||||
@change="handleChange2"
|
||||
:checked="checkedValue === '闪烁'"
|
||||
:checked="checkedValue === '开启'"
|
||||
>
|
||||
闪烁
|
||||
开启
|
||||
</n-radio>
|
||||
</div>
|
||||
</n-grid-item>
|
||||
<n-grid-item :span="3">
|
||||
<div class="row-4-item">
|
||||
<n-radio
|
||||
value="运动时闪烁"
|
||||
value="自动"
|
||||
name="basic-demo"
|
||||
@change="handleChange3"
|
||||
:checked="checkedValue === '运动时闪烁'"
|
||||
:checked="checkedValue === '自动'"
|
||||
>
|
||||
运动时闪烁
|
||||
自动
|
||||
</n-radio>
|
||||
</div>
|
||||
</n-grid-item>
|
||||
|
|
@ -320,7 +320,18 @@
|
|||
</n-grid-item>
|
||||
<n-grid-item :span="3">
|
||||
<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>
|
||||
</n-grid-item>
|
||||
</n-grid>
|
||||
|
|
@ -386,6 +397,7 @@ import {
|
|||
BatteryFullSharp,
|
||||
BatteryChargingSharp,
|
||||
} from '@vicons/ionicons5'
|
||||
import { openDeviceMKApi, stopDeviceMKApi } from '@/utils/initLogin'
|
||||
import { useMessage, useDialog, NRadio, NRadioGroup, NInputNumber, NSpace } from 'naive-ui'
|
||||
import { debounce } from 'lodash'
|
||||
|
||||
|
|
@ -404,7 +416,7 @@ const isDragging = ref(false)
|
|||
const currentTop = ref(0)
|
||||
const startY = ref(0)
|
||||
const startTop = ref(0)
|
||||
const checkedValue = ref('')
|
||||
const checkedValue = ref('关闭')
|
||||
const selectValue = ref('')
|
||||
const deviceToken = ref('')
|
||||
const deviceInfo = ref({})
|
||||
|
|
@ -603,16 +615,41 @@ onMounted(() => {
|
|||
})
|
||||
|
||||
const handleChange1 = (e) => {
|
||||
console.log(e)
|
||||
checkedValue.value = e.target.value
|
||||
handleChangeLight(checkedValue.value)
|
||||
}
|
||||
const handleChange2 = (e) => {
|
||||
console.log(e)
|
||||
checkedValue.value = e.target.value
|
||||
handleChangeLight(checkedValue.value)
|
||||
}
|
||||
const handleChange3 = (e) => {
|
||||
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) => {
|
||||
checkedValue.value = e.target.value
|
||||
}
|
||||
|
|
@ -775,6 +812,55 @@ const handleChangeVolume = debounce(async (value) => {
|
|||
}
|
||||
}, 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 () => {
|
||||
const token = await getRobotTokenFn() // 获取设备token
|
||||
const device = await getRobotDeviceListFn() // 获取设备信息
|
||||
|
|
|
|||
|
|
@ -185,36 +185,36 @@
|
|||
<n-grid-item :span="3">
|
||||
<div>
|
||||
<n-radio
|
||||
value="关"
|
||||
value="关闭"
|
||||
name="basic-demo"
|
||||
@change="handleChange1"
|
||||
:checked="checkedValue === '关'"
|
||||
:checked="checkedValue === '关闭'"
|
||||
>
|
||||
关
|
||||
关闭
|
||||
</n-radio>
|
||||
</div>
|
||||
</n-grid-item>
|
||||
<n-grid-item :span="3">
|
||||
<div>
|
||||
<n-radio
|
||||
value="闪烁"
|
||||
value="开启"
|
||||
name="basic-demo"
|
||||
@change="handleChange2"
|
||||
:checked="checkedValue === '闪烁'"
|
||||
:checked="checkedValue === '开启'"
|
||||
>
|
||||
闪烁
|
||||
开启
|
||||
</n-radio>
|
||||
</div>
|
||||
</n-grid-item>
|
||||
<n-grid-item :span="3">
|
||||
<div class="row-4-item">
|
||||
<n-radio
|
||||
value="运动时闪烁"
|
||||
value="自动"
|
||||
name="basic-demo"
|
||||
@change="handleChange3"
|
||||
:checked="checkedValue === '运动时闪烁'"
|
||||
:checked="checkedValue === '自动'"
|
||||
>
|
||||
运动时闪烁
|
||||
自动
|
||||
</n-radio>
|
||||
</div>
|
||||
</n-grid-item>
|
||||
|
|
@ -320,7 +320,15 @@
|
|||
</n-grid-item>
|
||||
<n-grid-item :span="3">
|
||||
<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>
|
||||
</n-grid-item>
|
||||
</n-grid>
|
||||
|
|
@ -386,6 +394,7 @@ import {
|
|||
BatteryFullSharp,
|
||||
BatteryChargingSharp,
|
||||
} from '@vicons/ionicons5'
|
||||
import { openDeviceMKApi, stopDeviceMKApi } from '@/utils/initLogin'
|
||||
import { useMessage, useDialog, NRadio, NRadioGroup, NInputNumber, NSpace } from 'naive-ui'
|
||||
import { debounce } from 'lodash'
|
||||
|
||||
|
|
@ -404,7 +413,7 @@ const isDragging = ref(false)
|
|||
const currentTop = ref(0)
|
||||
const startY = ref(0)
|
||||
const startTop = ref(0)
|
||||
const checkedValue = ref('')
|
||||
const checkedValue = ref('关闭')
|
||||
const selectValue = ref('')
|
||||
const deviceToken = ref('')
|
||||
const deviceInfo = ref({})
|
||||
|
|
@ -627,15 +636,39 @@ onMounted(() => {
|
|||
})
|
||||
|
||||
const handleChange1 = (e) => {
|
||||
console.log(e)
|
||||
checkedValue.value = e.target.value
|
||||
handleChangeLight(checkedValue.value)
|
||||
}
|
||||
const handleChange2 = (e) => {
|
||||
console.log(e)
|
||||
checkedValue.value = e.target.value
|
||||
handleChangeLight(checkedValue.value)
|
||||
}
|
||||
const handleChange3 = (e) => {
|
||||
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) => {
|
||||
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 isInspection = await handleInspection()
|
||||
|
|
|
|||
Loading…
Reference in New Issue