|
|
|
|
@ -199,7 +199,7 @@
|
|
|
|
|
<el-rate :model-value="scope.row.rate || 3" disabled/>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="处理方式" show-overflow-tooltip>
|
|
|
|
|
<el-table-column label="处理方式" show-overflow-tooltip width="200" fixed="right">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button type="primary" @click.stop="openHandleObstacleDialog(scope)" link>处置</el-button>
|
|
|
|
|
<el-popconfirm
|
|
|
|
|
@ -232,32 +232,31 @@
|
|
|
|
|
highlight-current-row
|
|
|
|
|
:data="tableData2.slice((currentPage2 - 1) * pageSize2, currentPage2 * pageSize2)"
|
|
|
|
|
style="width: 100%"
|
|
|
|
|
@row-click="table1Current"
|
|
|
|
|
>
|
|
|
|
|
<el-table-column type="selection" width="55"/>
|
|
|
|
|
<!-- <el-table-column type="selection" width="55"/>-->
|
|
|
|
|
<el-table-column label="序号" type="index" width="60"/>
|
|
|
|
|
<el-table-column prop="Lon" label="目标经度" width="100"/>
|
|
|
|
|
<el-table-column prop="Lat" label="目标纬度" width="100"/>
|
|
|
|
|
<el-table-column prop="rate" label="强度信息" width="100"/>
|
|
|
|
|
<el-table-column prop="name" label="名称" width="100"/>
|
|
|
|
|
<el-table-column prop="lon" label="目标经度" width="100"/>
|
|
|
|
|
<el-table-column prop="lat" label="目标纬度" width="100"/>
|
|
|
|
|
<el-table-column prop="strength" label="强度信息" width="100"/>
|
|
|
|
|
<el-table-column v-if="false" label="强度信息" width="160">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-rate :model-value="scope.row.rate || 3" disabled/>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="处理方式" show-overflow-tooltip>
|
|
|
|
|
<el-table-column label="处理方式" show-overflow-tooltip width="160" fixed="right">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button type="primary" @click.stop="openHandleObstacleDialog(scope)" link>处置</el-button>
|
|
|
|
|
<el-button type="primary" link @click.stop="openShildDialog1(scope)">修改</el-button>
|
|
|
|
|
<el-popconfirm
|
|
|
|
|
class="box-item"
|
|
|
|
|
title="确定删除这个点位吗?"
|
|
|
|
|
placement="top"
|
|
|
|
|
@confirm="delPoint(scope)"
|
|
|
|
|
@confirm="delShildItem(scope)"
|
|
|
|
|
>
|
|
|
|
|
<template #reference>
|
|
|
|
|
<el-button type="primary" @click.stop link>删除</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-popconfirm>
|
|
|
|
|
<el-button type="primary" link>固定物</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
@ -267,7 +266,8 @@
|
|
|
|
|
:pager-count="4"
|
|
|
|
|
:page-sizes="[10,20,50,100, 200, 300, 400]"
|
|
|
|
|
layout="total, sizes, prev, pager, next, jumper"
|
|
|
|
|
:total="tableData2.length"
|
|
|
|
|
:total="total2"
|
|
|
|
|
@change="getShildTableList"
|
|
|
|
|
/>
|
|
|
|
|
</el-card>
|
|
|
|
|
</div>
|
|
|
|
|
@ -638,9 +638,11 @@
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
<el-dialog v-model="imgDialog">
|
|
|
|
|
<img width="100%" :src="dialogImageUrl" alt="Preview Image"/>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
<el-dialog v-model="shildDialog">
|
|
|
|
|
<el-form :model="shildForm">
|
|
|
|
|
<el-form-item label="固定物名称" label-width="120px">
|
|
|
|
|
@ -656,7 +658,7 @@
|
|
|
|
|
<template #footer>
|
|
|
|
|
<div class="dialog-footer">
|
|
|
|
|
<el-button @click="shildDialog = false">关闭</el-button>
|
|
|
|
|
<el-button type="primary" @click="shildDialog = false">
|
|
|
|
|
<el-button type="primary" @click="addShildItem">
|
|
|
|
|
确定
|
|
|
|
|
</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
@ -674,25 +676,29 @@
|
|
|
|
|
</template>
|
|
|
|
|
<script setup lang="jsx">
|
|
|
|
|
import Ruler from "@/components/ruler.vue";
|
|
|
|
|
import {defineComponent, nextTick, onMounted, ref} from "vue";
|
|
|
|
|
import {onMounted, ref, watch} from "vue";
|
|
|
|
|
import {
|
|
|
|
|
addShildData,
|
|
|
|
|
DeleteCData,
|
|
|
|
|
delShildData,
|
|
|
|
|
getAllAirPort,
|
|
|
|
|
GetAllCData,
|
|
|
|
|
getArea,
|
|
|
|
|
getParasPos,
|
|
|
|
|
getParasSignalpro,
|
|
|
|
|
getShildList,
|
|
|
|
|
InserDealObstacleModel,
|
|
|
|
|
InsertCListData,
|
|
|
|
|
RestartWork,
|
|
|
|
|
setParasPos,
|
|
|
|
|
setParasSignalpro,
|
|
|
|
|
getShildList,
|
|
|
|
|
addShildData,
|
|
|
|
|
delShildData,
|
|
|
|
|
ShutDownWork,
|
|
|
|
|
StartWork,
|
|
|
|
|
StopWork,
|
|
|
|
|
RestartWork,
|
|
|
|
|
ShutDownWork,
|
|
|
|
|
getAllAirPort,
|
|
|
|
|
getArea,
|
|
|
|
|
GetAllCData,
|
|
|
|
|
InsertCListData,
|
|
|
|
|
UpdateCData,
|
|
|
|
|
DeleteCData, UpdateImage, GetFodScopeData, UpdateFodScopeData
|
|
|
|
|
UpdateFodScopeData,
|
|
|
|
|
UpdateImage,
|
|
|
|
|
updateShildData
|
|
|
|
|
} from "@/api/api";
|
|
|
|
|
import {useRouter} from "vue-router";
|
|
|
|
|
import {ElMessage} from "element-plus";
|
|
|
|
|
@ -781,8 +787,7 @@ const areaData = ref({
|
|
|
|
|
angle: 0
|
|
|
|
|
})
|
|
|
|
|
// 障碍物点位
|
|
|
|
|
const dots = ref([
|
|
|
|
|
])
|
|
|
|
|
const dots = ref([])
|
|
|
|
|
// 当前的目标障碍物
|
|
|
|
|
const dotIndex = ref(-1)
|
|
|
|
|
// 跳转到管理界面
|
|
|
|
|
@ -861,7 +866,8 @@ const updateRunwayNum = (e) => {
|
|
|
|
|
// 启动雷达
|
|
|
|
|
const StartWorkBtn = () => {
|
|
|
|
|
StartWork()
|
|
|
|
|
rulerRef.value.setDot([], true)
|
|
|
|
|
// rulerRef.value.setDot([], true)
|
|
|
|
|
setDot([], true)
|
|
|
|
|
tableData1.value = []
|
|
|
|
|
}
|
|
|
|
|
// 停止雷达
|
|
|
|
|
@ -884,11 +890,18 @@ const form4 = ref({})
|
|
|
|
|
const form5 = ref({})
|
|
|
|
|
const form6 = ref({})
|
|
|
|
|
|
|
|
|
|
// 障碍物
|
|
|
|
|
// 固定物
|
|
|
|
|
// 固定物列表
|
|
|
|
|
const tableData2 = ref([])
|
|
|
|
|
// 当前页
|
|
|
|
|
const currentPage2 = ref(1)
|
|
|
|
|
// 每页数量
|
|
|
|
|
const pageSize2 = ref(10)
|
|
|
|
|
const total2 = ref(0)
|
|
|
|
|
const shildDialog = ref(false)
|
|
|
|
|
const shildForm = ref({})
|
|
|
|
|
// 打开固定物模态框
|
|
|
|
|
const openShildDialog = (e) => {
|
|
|
|
|
console.log(e.row)
|
|
|
|
|
shildDialog.value = true
|
|
|
|
|
shildForm.value = {
|
|
|
|
|
lon: e.row.Lon,
|
|
|
|
|
@ -896,47 +909,67 @@ const openShildDialog = (e) => {
|
|
|
|
|
strength: e.row.rate,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 设置障碍物-固定物
|
|
|
|
|
const openShildDialog1 = (e) => {
|
|
|
|
|
shildDialog.value = true
|
|
|
|
|
shildForm.value = e.row
|
|
|
|
|
}
|
|
|
|
|
// 设置固定物
|
|
|
|
|
const addShildItem = () => {
|
|
|
|
|
addShildData(shildForm.value).then(e => {
|
|
|
|
|
shildDialog.value = false
|
|
|
|
|
shildForm.value = {}
|
|
|
|
|
getShildTableList()
|
|
|
|
|
})
|
|
|
|
|
console.log(shildForm.value)
|
|
|
|
|
if (shildForm.value.id) {
|
|
|
|
|
updateShildData(shildForm.value).then(e => {
|
|
|
|
|
shildDialog.value = false
|
|
|
|
|
shildForm.value = {}
|
|
|
|
|
getShildTableList()
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
addShildData(shildForm.value).then(e => {
|
|
|
|
|
shildDialog.value = false
|
|
|
|
|
shildForm.value = {}
|
|
|
|
|
getShildTableList()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 删除已处理的障碍物
|
|
|
|
|
// 删除固定物
|
|
|
|
|
const delShildItem = (e) => {
|
|
|
|
|
delShildData(e).then(e => {
|
|
|
|
|
delShildData(e.row).then(e => {
|
|
|
|
|
getShildTableList()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
// 获取已处理的障碍物列表
|
|
|
|
|
// 获取固定物列表
|
|
|
|
|
const getShildTableList = () => {
|
|
|
|
|
getShildList({
|
|
|
|
|
pageIndex: 1,
|
|
|
|
|
pageSize: 10,
|
|
|
|
|
name: 'string'
|
|
|
|
|
pageIndex: currentPage2.value,
|
|
|
|
|
pageSize: pageSize2.value,
|
|
|
|
|
}).then((e) => {
|
|
|
|
|
tableData2.value = e.data
|
|
|
|
|
total2.value = e.totalCount
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const tableData1 = ref(Array(1000).fill(0).map((_, k) => {
|
|
|
|
|
return {
|
|
|
|
|
Lon: 111.11111111,
|
|
|
|
|
Lat: 111.11111111,
|
|
|
|
|
time: '2020-20-20 10:10:10',
|
|
|
|
|
rate: k,
|
|
|
|
|
}
|
|
|
|
|
}))
|
|
|
|
|
// 处置
|
|
|
|
|
const uploadFiles = async (e) => {
|
|
|
|
|
console.log(e)
|
|
|
|
|
const res = await UpdateImage({files: [e.file]})
|
|
|
|
|
console.log(res)
|
|
|
|
|
}
|
|
|
|
|
// 障碍物列表
|
|
|
|
|
const tableData1 = ref([])
|
|
|
|
|
// 上传图片
|
|
|
|
|
const uploadRef = ref(null)
|
|
|
|
|
const uploadFiles = async (e) => {
|
|
|
|
|
const res = await UpdateImage({files: [e.file]})
|
|
|
|
|
}
|
|
|
|
|
// 图片放大
|
|
|
|
|
const handlePictureCardPreview = (file) => {
|
|
|
|
|
dialogImageUrl.value = file.url
|
|
|
|
|
imgDialog.value = true
|
|
|
|
|
}
|
|
|
|
|
// 图片下载
|
|
|
|
|
const handleDownload = (file) => {
|
|
|
|
|
console.log(file)
|
|
|
|
|
}
|
|
|
|
|
// 图片删除
|
|
|
|
|
const handleRemove = (file) => {
|
|
|
|
|
console.log(file)
|
|
|
|
|
dialog1Form.value.fileList = dialog1Form.value.fileList.filter(e => e.url !== file.url)
|
|
|
|
|
}
|
|
|
|
|
// 拍照
|
|
|
|
|
const cameraInput = ref(null)
|
|
|
|
|
const openCamera = () => {
|
|
|
|
|
cameraInput.value?.click()
|
|
|
|
|
@ -945,44 +978,20 @@ const handleCameraChange = (e) => {
|
|
|
|
|
const file = e.target.files[0]
|
|
|
|
|
if (!file) return
|
|
|
|
|
const url = URL.createObjectURL(file)
|
|
|
|
|
|
|
|
|
|
UpdateImage({files: [file]})
|
|
|
|
|
dialog1Form.fileList.value.push({
|
|
|
|
|
name: file.name,
|
|
|
|
|
url,
|
|
|
|
|
raw: file
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 重置 input
|
|
|
|
|
e.target.value = ''
|
|
|
|
|
}
|
|
|
|
|
// 处置模态框
|
|
|
|
|
const dialog1 = ref(false)
|
|
|
|
|
const dialog1Form = ref({})
|
|
|
|
|
const dialogImageUrl = ref('')
|
|
|
|
|
const imgDialog = ref(false)
|
|
|
|
|
const openHandleObstacleDialog = (e) => {
|
|
|
|
|
dialog1.value = true
|
|
|
|
|
dialog1Form.value = {
|
|
|
|
|
index: e.$index,
|
|
|
|
|
time: e.row.time,
|
|
|
|
|
fileList: [{url: 'https://dummyimage.com/640x360'}, {url: 'https://placehold.co/600x400/png'}]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const handleObstacle = () => {
|
|
|
|
|
dialog1.value = false
|
|
|
|
|
tableData1.value.splice((currentPage1.value - 1) * pageSize1.value + dialog1Form.value.index, 1);
|
|
|
|
|
}
|
|
|
|
|
const handlePictureCardPreview = (file) => {
|
|
|
|
|
dialogImageUrl.value = file.url
|
|
|
|
|
imgDialog.value = true
|
|
|
|
|
}
|
|
|
|
|
const handleDownload = (file) => {
|
|
|
|
|
console.log(file)
|
|
|
|
|
}
|
|
|
|
|
const handleRemove = (file) => {
|
|
|
|
|
console.log(file)
|
|
|
|
|
dialog1Form.value.fileList = dialog1Form.value.fileList.filter(e => e.url !== file.url)
|
|
|
|
|
}
|
|
|
|
|
// 删除
|
|
|
|
|
const delPoint = (e) => {
|
|
|
|
|
tableData1.value.splice((currentPage1.value - 1) * pageSize1.value + e.$index, 1);
|
|
|
|
|
@ -991,32 +1000,37 @@ const delPoint = (e) => {
|
|
|
|
|
const currentPage1 = ref(1)
|
|
|
|
|
// 每页数量
|
|
|
|
|
const pageSize1 = ref(10)
|
|
|
|
|
// 固定物列表
|
|
|
|
|
const tableData2 = ref([
|
|
|
|
|
{
|
|
|
|
|
"id": 2,
|
|
|
|
|
"name": "测试",
|
|
|
|
|
"lon": 12.2299995,
|
|
|
|
|
"lat": 323.329987,
|
|
|
|
|
"deviation": 12,
|
|
|
|
|
"shielding": 20
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": 1,
|
|
|
|
|
"name": "测试",
|
|
|
|
|
"lon": 12.2299995,
|
|
|
|
|
"lat": 323.329987,
|
|
|
|
|
"deviation": 12,
|
|
|
|
|
"shielding": 20
|
|
|
|
|
|
|
|
|
|
// 打开处置模态框
|
|
|
|
|
const openHandleObstacleDialog = (e) => {
|
|
|
|
|
console.log(e.row)
|
|
|
|
|
dialog1.value = true
|
|
|
|
|
dialog1Form.value = {
|
|
|
|
|
index: e.$index,
|
|
|
|
|
time: e.row.time,
|
|
|
|
|
longitude: e.row.Lon,
|
|
|
|
|
latitude: e.row.Lat,
|
|
|
|
|
strength: e.row.rate,
|
|
|
|
|
fileList: [{url: 'https://dummyimage.com/640x360'}, {url: 'https://placehold.co/600x400/png'}]
|
|
|
|
|
}
|
|
|
|
|
])
|
|
|
|
|
// 当前页
|
|
|
|
|
const currentPage2 = ref(1)
|
|
|
|
|
// 每页数量
|
|
|
|
|
const pageSize2 = ref(10)
|
|
|
|
|
}
|
|
|
|
|
// 确定处理
|
|
|
|
|
const handleObstacle = () => {
|
|
|
|
|
InserDealObstacleModel({
|
|
|
|
|
longitude: dialog1Form.value.longitude,
|
|
|
|
|
latitude: dialog1Form.value.latitude,
|
|
|
|
|
strength: dialog1Form.value.strength,
|
|
|
|
|
files: dialog1Form.value.fileList.map(e => e.url),
|
|
|
|
|
findTime: dialog1Form.value.time,
|
|
|
|
|
}).then(e => {
|
|
|
|
|
dialog1.value = false
|
|
|
|
|
tableData1.value.splice((currentPage1.value - 1) * pageSize1.value + dialog1Form.value.index, 1);
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const date1 = ref([])
|
|
|
|
|
const currentPosition = ref({})
|
|
|
|
|
|
|
|
|
|
const DEG_TO_RAD = Math.PI / 180;
|
|
|
|
|
|
|
|
|
|
function lonLatToXY(lon, lat, lat0) {
|
|
|
|
|
@ -1108,24 +1122,11 @@ const getPoint = (k) => {
|
|
|
|
|
regionLabeling.value[k].lon = currentPosition.value.lon || 0
|
|
|
|
|
regionLabeling.value[k].lat = currentPosition.value.lat || 0
|
|
|
|
|
}
|
|
|
|
|
const setDot = (e) => {
|
|
|
|
|
const setDot = (e, re) => {
|
|
|
|
|
let fodInfo = e.DarDatas.filter(v => v.Lon !== 0 && v.Lat !== 0)
|
|
|
|
|
dots.value = [...dots.value, ...fodInfo.map((v, k) => {
|
|
|
|
|
|
|
|
|
|
const rectInfo = calcRectangleFromPoints(areaPoints.value);
|
|
|
|
|
const point = {
|
|
|
|
|
lon: v.Lon,
|
|
|
|
|
lat: v.Lat,
|
|
|
|
|
rotate: 0
|
|
|
|
|
};
|
|
|
|
|
const local = correctDeviation(getLocalPositionRelativeToP4(point, areaPoints.value, rectInfo))
|
|
|
|
|
|
|
|
|
|
return local
|
|
|
|
|
}).filter(v => v)]
|
|
|
|
|
tableData1.value = [...tableData1.value, ...fodInfo.map((v, k) => {
|
|
|
|
|
return {...v, index: tableData1.value.length + k}
|
|
|
|
|
})]
|
|
|
|
|
// rulerRef.value.setDot(dots, false)
|
|
|
|
|
}
|
|
|
|
|
const table1Current = (e, v) => {
|
|
|
|
|
if (dotIndex.value === e.index) {
|
|
|
|
|
@ -1259,501 +1260,30 @@ const testFun = () => {
|
|
|
|
|
fx *= -1
|
|
|
|
|
}, 1000 * 80)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const getDotsData = () => {
|
|
|
|
|
dots.value = [...tableData1.value.map((v, k) => {
|
|
|
|
|
const rectInfo = calcRectangleFromPoints(areaPoints.value);
|
|
|
|
|
const point = {
|
|
|
|
|
lon: v.Lon,
|
|
|
|
|
lat: v.Lat,
|
|
|
|
|
rotate: 0
|
|
|
|
|
};
|
|
|
|
|
return correctDeviation(getLocalPositionRelativeToP4(point, areaPoints.value, rectInfo))
|
|
|
|
|
}).filter(v => v)]
|
|
|
|
|
}
|
|
|
|
|
watch(() => [tableData1.value, areaPoints.value], (oldVal, newVal) => {
|
|
|
|
|
getDotsData()
|
|
|
|
|
}, {deep: true})
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
getTableData()
|
|
|
|
|
getSocket()
|
|
|
|
|
getOption()
|
|
|
|
|
getShildTableList()
|
|
|
|
|
// testFun()
|
|
|
|
|
testFun()
|
|
|
|
|
getDotsData()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const RIGHT = defineComponent({
|
|
|
|
|
name: 'RIGHT',
|
|
|
|
|
setup() {
|
|
|
|
|
return () => (
|
|
|
|
|
<div class="right">
|
|
|
|
|
{itemsId.value === 1 && (
|
|
|
|
|
<div class="tabsItem">
|
|
|
|
|
<ElCard shadow="always">
|
|
|
|
|
<ElForm inline model={form1.value} class="demo-form-inline">
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElSelect
|
|
|
|
|
modelValue={form1.value.region}
|
|
|
|
|
placeholder="请选择机场名称"
|
|
|
|
|
style={{width: "200px"}}
|
|
|
|
|
clearable
|
|
|
|
|
onUpdate:modelValue={val => selectUpdate(val)}
|
|
|
|
|
>
|
|
|
|
|
{
|
|
|
|
|
options1.value.map(i => {
|
|
|
|
|
return <ElOption label={i.name} value={i.id}/>
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</ElSelect>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElSelect
|
|
|
|
|
modelValue={form1.value.region1}
|
|
|
|
|
placeholder="请选择区域名称"
|
|
|
|
|
style={{width: "200px"}}
|
|
|
|
|
clearable
|
|
|
|
|
onUpdate:modelValue={val => (form1.value.region1 = val)}
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
options2.value.map(i => {
|
|
|
|
|
return <ElOption label={i.name} value={i.id}/>
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</ElSelect>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElButton type="primary" onClick={getAreaData}>获取区域</ElButton>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
</ElForm>
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<ElCard shadow="always" style={{marginTop: "12px"}}>
|
|
|
|
|
<ElButton
|
|
|
|
|
type="primary"
|
|
|
|
|
disabled={radarWorkState.value === 1}
|
|
|
|
|
onClick={StartWorkBtn}
|
|
|
|
|
>
|
|
|
|
|
启动雷达
|
|
|
|
|
</ElButton>
|
|
|
|
|
<ElButton
|
|
|
|
|
type="danger"
|
|
|
|
|
disabled={radarWorkState.value === 0}
|
|
|
|
|
onClick={StopWorkBtn}
|
|
|
|
|
>
|
|
|
|
|
关闭雷达
|
|
|
|
|
</ElButton>
|
|
|
|
|
<ElButton type="warning" onClick={RestartWorkBtn}>重启雷达</ElButton>
|
|
|
|
|
<ElButton type="info" onClick={ShutDownWorkBtn}>关闭雷达</ElButton>
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<ElCard shadow="always" style={{marginTop: "12px"}}>
|
|
|
|
|
{radarWorkState.value === 1 && (
|
|
|
|
|
<div style={{
|
|
|
|
|
width: 'calc(50% - 50px)',
|
|
|
|
|
position: 'relative',
|
|
|
|
|
borderRadius: '5px',
|
|
|
|
|
backgroundColor: '#01CE69',
|
|
|
|
|
height: '44px',
|
|
|
|
|
display: 'inline-block',
|
|
|
|
|
padding: '0 20px',
|
|
|
|
|
marginRight: '20px'
|
|
|
|
|
}}>
|
|
|
|
|
<span style={{
|
|
|
|
|
position: 'absolute',
|
|
|
|
|
top: '50%',
|
|
|
|
|
transform: 'translateY(-50%)',
|
|
|
|
|
left: '20%',
|
|
|
|
|
color: '#fff',
|
|
|
|
|
letterSpacing: '2px'
|
|
|
|
|
}}>雷达通讯状态</span>
|
|
|
|
|
<ElIcon size="20px" style={{
|
|
|
|
|
position: 'absolute',
|
|
|
|
|
top: '50%',
|
|
|
|
|
transform: 'translateY(-50%)',
|
|
|
|
|
right: '40px'
|
|
|
|
|
}}>
|
|
|
|
|
<SuccessFilled color="#fff"/>
|
|
|
|
|
</ElIcon>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
{radarWorkState.value === 0 && (
|
|
|
|
|
<div style={{
|
|
|
|
|
width: 'calc(50% - 50px)',
|
|
|
|
|
position: 'relative',
|
|
|
|
|
borderRadius: '5px',
|
|
|
|
|
backgroundColor: '#E8370D',
|
|
|
|
|
height: '44px',
|
|
|
|
|
display: 'inline-block',
|
|
|
|
|
padding: '0 20px'
|
|
|
|
|
}}>
|
|
|
|
|
<span style={{
|
|
|
|
|
position: 'absolute',
|
|
|
|
|
top: '50%',
|
|
|
|
|
transform: 'translateY(-50%)',
|
|
|
|
|
left: '20%',
|
|
|
|
|
color: '#fff',
|
|
|
|
|
letterSpacing: '2px'
|
|
|
|
|
}}>雷达通讯状态</span>
|
|
|
|
|
<ElIcon size="20px" style={{
|
|
|
|
|
position: 'absolute',
|
|
|
|
|
top: '50%',
|
|
|
|
|
transform: 'translateY(-50%)',
|
|
|
|
|
right: '40px'
|
|
|
|
|
}}>
|
|
|
|
|
<WarningFilled color="#fff"/>
|
|
|
|
|
</ElIcon>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<ElCard shadow="always" style={{marginTop: "12px"}}>
|
|
|
|
|
<ElForm inline model={form2.value} class="demo-form-inline">
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElDatePicker
|
|
|
|
|
modelValue={form2.value.date}
|
|
|
|
|
type="date"
|
|
|
|
|
placeholder="选择时间"
|
|
|
|
|
clearable
|
|
|
|
|
onUpdate:modelValue={val => (form2.value.date = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElButton onClick={onSubmit}>停止检测</ElButton>
|
|
|
|
|
<ElButton type="primary" onClick={onSubmit}>批量操作</ElButton>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
</ElForm>
|
|
|
|
|
|
|
|
|
|
<ElTable
|
|
|
|
|
highlightCurrentRow
|
|
|
|
|
onRowClick={table1Current}
|
|
|
|
|
data={tableData1.value}
|
|
|
|
|
style={{width: "100%"}}
|
|
|
|
|
>
|
|
|
|
|
<ElTableColumn type="selection" width={55}/>
|
|
|
|
|
<ElTableColumn label="序号" type="index" width={60}/>
|
|
|
|
|
<ElTableColumn prop="Lon" label="目标经度" width={120}/>
|
|
|
|
|
<ElTableColumn prop="Lat" label="目标纬度" width={120}/>
|
|
|
|
|
<ElTableColumn label="告警等级" width={160}>
|
|
|
|
|
{{
|
|
|
|
|
default: scope => <ElRate modelValue={scope.row.rate || 3} disabled/>
|
|
|
|
|
}}
|
|
|
|
|
</ElTableColumn>
|
|
|
|
|
<ElTableColumn label="处理状态" showOverflowTooltip>
|
|
|
|
|
{{
|
|
|
|
|
default: scope => (
|
|
|
|
|
<>
|
|
|
|
|
<ElButton type="primary" link>已处理</ElButton>
|
|
|
|
|
<ElButton type="primary" link onClick={() => addShildItem()}>不处理</ElButton>
|
|
|
|
|
<ElButton type="primary" link>未发现</ElButton>
|
|
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
}}
|
|
|
|
|
</ElTableColumn>
|
|
|
|
|
</ElTable>
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<ElCard shadow="always" style={{marginTop: "12px"}}>
|
|
|
|
|
<ElTable data={tableData2.value} style={{width: "100%"}}>
|
|
|
|
|
<ElTableColumn label="序号" type="index" width={60}/>
|
|
|
|
|
<ElTableColumn prop="name" label="目标名称" width={120}/>
|
|
|
|
|
<ElTableColumn prop="lon" label="目标经度" width={120}/>
|
|
|
|
|
<ElTableColumn prop="lat" label="目标纬度" width={120}/>
|
|
|
|
|
<ElTableColumn prop="deviation" label="deviation" width={120}/>
|
|
|
|
|
<ElTableColumn prop="shielding" label="shielding" width={120}/>
|
|
|
|
|
<ElTableColumn label="操作" showOverflowTooltip>
|
|
|
|
|
{{
|
|
|
|
|
default: scope => (
|
|
|
|
|
<ElButton type="primary" link onClick={() => delShildItem(scope.row)}>删除</ElButton>
|
|
|
|
|
)
|
|
|
|
|
}}
|
|
|
|
|
</ElTableColumn>
|
|
|
|
|
</ElTable>
|
|
|
|
|
</ElCard>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
{itemsId.value === 2 && (
|
|
|
|
|
<div class="tabsItem">
|
|
|
|
|
<ElCard shadow="always">
|
|
|
|
|
<ElForm inline model={form5.value} class="demo-form-inline">
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={form5.value.region}
|
|
|
|
|
placeholder="请输入机场名称"
|
|
|
|
|
style={{width: "200px"}}
|
|
|
|
|
onUpdate:modelValue={val => (form5.value.region = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={form5.value.region1}
|
|
|
|
|
placeholder="请输入区域名称"
|
|
|
|
|
style={{width: "200px"}}
|
|
|
|
|
onUpdate:modelValue={val => (form5.value.region1 = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElButton type="primary" onClick={onSubmit}>添加</ElButton>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
</ElForm>
|
|
|
|
|
|
|
|
|
|
<ElForm inline model={form6.value} class="demo-form-inline" style={{marginTop: "12px"}}>
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElSelect
|
|
|
|
|
modelValue={form6.value.region}
|
|
|
|
|
placeholder="请选择机场名称"
|
|
|
|
|
style={{width: "200px"}}
|
|
|
|
|
clearable
|
|
|
|
|
onUpdate:modelValue={val => select2Update(val)}
|
|
|
|
|
>
|
|
|
|
|
{
|
|
|
|
|
options1.value.map(i => {
|
|
|
|
|
return <ElOption label={i.name} value={i.id}/>
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</ElSelect>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElSelect
|
|
|
|
|
modelValue={form6.value.region1}
|
|
|
|
|
placeholder="请选择区域名称"
|
|
|
|
|
style={{width: "200px"}}
|
|
|
|
|
clearable
|
|
|
|
|
onUpdate:modelValue={val => select3Update(val)}
|
|
|
|
|
>
|
|
|
|
|
{
|
|
|
|
|
options2.value.map(i => {
|
|
|
|
|
return <ElOption label={i.name} value={i.id}/>
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</ElSelect>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElButton type="primary" onClick={getArea2}>确定</ElButton>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
</ElForm>
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<ElCard shadow="always" style={{marginTop: "12px"}}>
|
|
|
|
|
{regionLabeling.value.map((i, k) => (
|
|
|
|
|
<div style={{marginBottom: "12px"}} key={k}>
|
|
|
|
|
<ElInput disabled onUpdate:modelValue={val => (regionLabeling.value[k].name = val)}
|
|
|
|
|
modelValue={i.name}
|
|
|
|
|
placeholder="点位名称" style={{width: "100px"}}/>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={i.lon} placeholder="经度"
|
|
|
|
|
style={{width: "150px", marginLeft: "20px"}}
|
|
|
|
|
onUpdate:modelValue={val => (regionLabeling.value[k].lon = val)}
|
|
|
|
|
/>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={i.lat} placeholder="纬度"
|
|
|
|
|
style={{width: "150px", marginLeft: "20px"}}
|
|
|
|
|
onUpdate:modelValue={val => (regionLabeling.value[k].lat = val)}
|
|
|
|
|
/>
|
|
|
|
|
<ElButton type="primary" onClick={() => getPoint(k)}
|
|
|
|
|
style={{marginLeft: "20px"}}>获取</ElButton>
|
|
|
|
|
<ElButton type="danger"
|
|
|
|
|
onClick={() => DeleteCData({id: parseFloat(i.id)}).then(() => getArea2())}
|
|
|
|
|
style={{marginLeft: "20px"}}>删除</ElButton>
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
|
|
|
|
|
<ElButton type="primary" onClick={() => {
|
|
|
|
|
InsertCListData([{
|
|
|
|
|
name: `点位${regionLabeling.value.length + 1}`,
|
|
|
|
|
lon: '1',
|
|
|
|
|
lat: '1',
|
|
|
|
|
fodAreaId: form6.value.region1,
|
|
|
|
|
fodAirId: form6.value.region
|
|
|
|
|
}]).then(() => {
|
|
|
|
|
getArea2()
|
|
|
|
|
})
|
|
|
|
|
}}
|
|
|
|
|
style={{textAlign: "center"}}>添加</ElButton>
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<div style={{textAlign: "center", marginTop: "12px"}}>
|
|
|
|
|
<ElButton type="primary" onClick={saveAreaPoint} style={{marginLeft: "20px"}}>提交</ElButton>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
{itemsId.value === 3 && (
|
|
|
|
|
<div class="tabsItem">
|
|
|
|
|
<div>成像设置</div>
|
|
|
|
|
|
|
|
|
|
<ElForm model={parasSignalproForm.value} inline labelWidth="auto" labelPosition="top">
|
|
|
|
|
{["imaging_rangemin", "imaging_rangemax", "imaging_rangeres", "imaging_azimuthlength", "imaging_azimuthres"].map((key, idx) => (
|
|
|
|
|
<ElFormItem style={{width: "calc(33% - 32px)"}} label={key} key={idx}>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={(parasSignalproForm.value.imaging || {})[key]}
|
|
|
|
|
onUpdate:modelValue={val => ((parasSignalproForm.value.imaging ||= {})[key] = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
))}
|
|
|
|
|
</ElForm>
|
|
|
|
|
|
|
|
|
|
<div>检测设置</div>
|
|
|
|
|
<ElForm model={parasSignalproForm.value} inline labelWidth="auto" labelPosition="top">
|
|
|
|
|
{["alpha", "decstartr", "decwidth", "sk_r", "sk_a", "lk_r", "lk_a"].map((key, idx) => (
|
|
|
|
|
<ElFormItem style={{width: "calc(33% - 32px)"}} label={key} key={idx}>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={(parasSignalproForm.value.dectection || {})[key]}
|
|
|
|
|
onUpdate:modelValue={val => ((parasSignalproForm.value.dectection ||= {})[key] = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
))}
|
|
|
|
|
|
|
|
|
|
<ElFormItem style={{width: "100%"}}>
|
|
|
|
|
<div style={{textAlign: "center", width: "100%"}}>
|
|
|
|
|
<ElButton type="primary" onClick={saveParasSignalproForm}>保存</ElButton>
|
|
|
|
|
</div>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
</ElForm>
|
|
|
|
|
|
|
|
|
|
<div>路线设置</div>
|
|
|
|
|
<ElForm model={parasPosForm.value} inline labelWidth="auto" labelPosition="top">
|
|
|
|
|
<ElFormItem style={{width: "calc(33% - 32px)"}} label="路线数量">
|
|
|
|
|
<ElInputNumber
|
|
|
|
|
modelValue={(parasPosForm.value.runwaynum || {}).startpos_num}
|
|
|
|
|
precision={0}
|
|
|
|
|
step={1}
|
|
|
|
|
min={0}
|
|
|
|
|
onUpdate:modelValue={val => {
|
|
|
|
|
parasPosForm.value.runwaynum.startpos_num = val;
|
|
|
|
|
updateRunwayNum(val);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
{Array.from({length: (parasPosForm.value.runwaynum || {}).startpos_num || 0}).map((_, k) => (
|
|
|
|
|
<div key={k} style="width: 100%">
|
|
|
|
|
<div>路线{k + 1}设置</div>
|
|
|
|
|
{["startpos_lon_a", "startpos_lat_a", "startpos_alt_a", "startpos_lon_b", "startpos_lat_b", "startpos_alt_b", "startpos_ori"].map((field, idx) => (
|
|
|
|
|
<ElFormItem style={{width: "calc(33% - 32px)", display: "inline-block"}} label={field}
|
|
|
|
|
key={idx}>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={(parasPosForm.value.runwayedges[k] || {})[field]}
|
|
|
|
|
onUpdate:modelValue={val => (((parasPosForm.value.runwayedges[k] ||= {})[field] = val))}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
))}
|
|
|
|
|
|
|
|
|
|
<ElFormItem style={{width: "100%"}}>
|
|
|
|
|
<div style={{textAlign: "center", width: "100%"}}>
|
|
|
|
|
<ElButton type="primary" onClick={saveParasPosForm}>保存</ElButton>
|
|
|
|
|
</div>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
</ElForm>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
{itemsId.value === 4 && (
|
|
|
|
|
<div class="tabsItem">
|
|
|
|
|
<ElCard shadow="always">
|
|
|
|
|
<ElDatePicker
|
|
|
|
|
style={{width: "calc(100% - 20px)"}}
|
|
|
|
|
modelValue={date1.value}
|
|
|
|
|
type="datetimerange"
|
|
|
|
|
rangeSeparator="到"
|
|
|
|
|
startPlaceholder="选择开始时间"
|
|
|
|
|
endPlaceholder="选择结束时间"
|
|
|
|
|
onUpdate:modelValue={val => (date1.value = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<ElCard shadow="always" style={{marginTop: "12px"}}>
|
|
|
|
|
<ElForm inline model={form3.value} class="demo-form-inline">
|
|
|
|
|
{["region", "region1", "region2"].map((key, idx) => (
|
|
|
|
|
<ElFormItem key={idx}>
|
|
|
|
|
{key === "region2" ? (
|
|
|
|
|
<ElSelect
|
|
|
|
|
modelValue={form3.value[key]}
|
|
|
|
|
placeholder="请选择固定目标"
|
|
|
|
|
style={{width: "170px"}}
|
|
|
|
|
clearable
|
|
|
|
|
onUpdate:modelValue={val => (form3.value[key] = val)}
|
|
|
|
|
>
|
|
|
|
|
<ElOption label="目标1" value="shanghai"/>
|
|
|
|
|
<ElOption label="目标2" value="beijing"/>
|
|
|
|
|
</ElSelect>
|
|
|
|
|
) : (
|
|
|
|
|
<ElSelect
|
|
|
|
|
modelValue={form3.value[key]}
|
|
|
|
|
placeholder={`请选择${key === "region" ? "机场" : "区域"}`}
|
|
|
|
|
style={{width: "170px"}}
|
|
|
|
|
clearable
|
|
|
|
|
onUpdate:modelValue={val => (form3.value[key] = val)}
|
|
|
|
|
>
|
|
|
|
|
<ElOption label="机场1" value="shanghai"/>
|
|
|
|
|
<ElOption label="机场2" value="beijing"/>
|
|
|
|
|
<ElOption label="区域1" value="shanghai"/>
|
|
|
|
|
<ElOption label="区域2" value="beijing"/>
|
|
|
|
|
</ElSelect>
|
|
|
|
|
)}
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
))}
|
|
|
|
|
</ElForm>
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<ElCard shadow="always" style={{marginTop: "12px"}}>
|
|
|
|
|
<ElForm inline model={form4.value} class="demo-form-inline">
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={form4.value.input1}
|
|
|
|
|
placeholder="请输入检测序号"
|
|
|
|
|
style={{width: "170px"}}
|
|
|
|
|
onUpdate:modelValue={val => (form4.value.input1 = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElDatePicker
|
|
|
|
|
modelValue={form4.value.date1}
|
|
|
|
|
type="date"
|
|
|
|
|
placeholder="选择检测时间"
|
|
|
|
|
clearable
|
|
|
|
|
style={{width: "170px"}}
|
|
|
|
|
onUpdate:modelValue={val => (form4.value.date1 = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
|
|
|
|
|
<ElFormItem>
|
|
|
|
|
<ElInput
|
|
|
|
|
modelValue={form4.value.input2}
|
|
|
|
|
placeholder="请输入检测人员"
|
|
|
|
|
style={{width: "170px"}}
|
|
|
|
|
onUpdate:modelValue={val => (form4.value.input2 = val)}
|
|
|
|
|
/>
|
|
|
|
|
</ElFormItem>
|
|
|
|
|
</ElForm>
|
|
|
|
|
</ElCard>
|
|
|
|
|
|
|
|
|
|
<ElCard shadow="always" style={{marginTop: "12px"}}>
|
|
|
|
|
<ElTable data={tableData2.value} style={{width: "100%"}}>
|
|
|
|
|
<ElTableColumn label="序号" type="index" width={60}/>
|
|
|
|
|
<ElTableColumn prop="coordinate" label="目标坐标" width={120}/>
|
|
|
|
|
<ElTableColumn label="告警等级" width={160}>
|
|
|
|
|
{{default: scope => <ElRate modelValue={scope.row.rate} disabled/>}}
|
|
|
|
|
</ElTableColumn>
|
|
|
|
|
<ElTableColumn label="处理状态" showOverflowTooltip>
|
|
|
|
|
{{
|
|
|
|
|
default: scope => (
|
|
|
|
|
<>
|
|
|
|
|
<span>{scope.row.type === 1 ? "已处理" : ""}</span>
|
|
|
|
|
<span>{scope.row.type === 2 ? "不处理" : ""}</span>
|
|
|
|
|
<span>{scope.row.type === 3 ? "未发现" : ""}</span>
|
|
|
|
|
</>
|
|
|
|
|
)
|
|
|
|
|
}}
|
|
|
|
|
</ElTableColumn>
|
|
|
|
|
</ElTable>
|
|
|
|
|
</ElCard>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
<style>
|
|
|
|
|
.app-container {
|
|
|
|
|
|