无人机接入

This commit is contained in:
2025-12-26 00:19:22 +08:00
parent e76b5075b2
commit 624c55c4b1
8 changed files with 308 additions and 28 deletions

View File

@@ -70,6 +70,8 @@ const resize = (e) => {
}
.tab{
display: flex;
position: relative;
z-index: 10;
.tab-item{
background: linear-gradient( 180deg, rgba(46,164,240,0.26) 0%, #2EA4F0 100%);
box-shadow: inset 0px -1px 2px 0px rgba(83,203,255,0.22);

View File

@@ -20,13 +20,14 @@
<div style="width: 100%;height: 100%;" :class="[`video-window${item}`]">
<!-- 视频预览组件 -->
<HikPlayerComponent
v-if="haikang[item-1]?.codes"
v-if="deviceType === 'CCTV' && haikang[item-1]?.codes"
ref="videoPreview"
:id="item"
:cameraIndexCode="haikang[item-1]?.codes"
:layout="haikang[item-1]?.layout"
@close="closeVideo">
</HikPlayerComponent>
<FlvPlayerComponent v-if="deviceType === 'UAV' && haikang[item-1]?.codes" :id="'uav'+item" :url="haikang[item-1]?.codes"/>
</div>
</div>
</div>
@@ -37,6 +38,8 @@
<script setup>
import { nextTick, onUnmounted, ref } from 'vue'
import HikPlayerComponent from '@/components/Player/HikPlayer.vue'
import FlvPlayerComponent from '@/components/FlvPlayer/index.vue'
import { getVideoStream, doStartOrStopUavAlgorithm } from '@/api/uav'
const control = ref([
{ label: '1X1', value: 1 },
@@ -47,6 +50,12 @@ const control = ref([
const active = ref(4)
const haikang = ref([])
const videoPreview = ref(null)
const props = defineProps({
deviceType: {
type: String,
default: () => ''
}
})
// 根据选中的分屏数计算样式
const getStyle = () => {
@@ -82,13 +91,33 @@ const closeVideo = (data, item) => {
}
// 点击视频预览
const handleNodeClick = (node) => {
if(node.videoCode) {
if(props.deviceType === 'CCTV' && node.videoCode) {
let index = haikang.value.findIndex(i => !i)
console.log(index, haikang.value, 'value')
if(index !== -1) {
haikang.value[index] = { codes: node.videoCode }
}
}
if(props.deviceType === 'UAV' && node.droneSn) {
toggleFly(node)
}
}
const toggleFly = (data) => {
setTimeout(() => {
const params = {
status: 'stop',
sn: data.droneSn,
enable_orc: false
}
getVideoStream(params).then(res => {
if(res.success) {
let index = haikang.value.findIndex(i => !i)
if(index !== -1) {
haikang.value[index] = { codes: res.result.httpUrl }
}
}
})
}, 20000)
}
changeGridType(4)
defineExpose({

View File

@@ -3,7 +3,7 @@
<DialogComponent @mousedown="drag" class="wall-dialog" :style="{ resize: 'both', overflow: 'auto' }" :title="title" width="1800" :draggable="true" :modal="false" @close="close">
<div class="wall-container">
<TreeCom ref="Tree" @handle="handle"/>
<GridCom ref="Grid"/>
<GridCom ref="Grid" :videoType="type"/>
</div>
</DialogComponent>
</template>

View File

@@ -8,7 +8,7 @@
@node-click="handleNodeClick">
<template v-slot="{ node, data }">
<!-- <img src="@/assets/images/livePreview/icon-monitor.png" alt=""> -->
<span :class="(data.status === 'offline' && treeType === 'UAV') ? 'offline': ''">{{ node.label }}</span>
<span :class="(!data.sourceType && treeType === 'UAV') ? 'offline': ''">{{ node.label }}</span>
</template>
</el-tree>
</div>
@@ -17,7 +17,7 @@
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { videoCameraFindPage, findUavPage, findEnvPage, dsVideoList } from '@/api/device.js'
import { findVideoLevelList, findUavPage, findEnvPage, dsVideoList } from '@/api/device.js'
const emit = defineEmits([ 'handle' ])
@@ -27,11 +27,8 @@ const treeType = ref('')
const refresh = (type) => {
treeType.value = type
if(type === 'CCTV') {
const params = {
pageNo: 1,
pageSize: 9999
}
videoCameraFindPage(params).then(res => {
const params = {}
findVideoLevelList(params).then(res => {
if (res.success) {
const data = res.result.records
const groupedData = {}
@@ -93,14 +90,14 @@ const refresh = (type) => {
}
})
tableData.value = result
tableData.value = res.result.records
}
})
}
}
const handleNodeClick = (data, node) => {
if(data.status && data.status === 'offline') {
if(!data.sourceType) {
return false
}
if(!data.children || data.children.length === 0) {