2026-01-25 16:02:00 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="twin-situation">
|
|
|
|
|
|
<!-- 资源列表 -->
|
|
|
|
|
|
<!--dt-card
|
|
|
|
|
|
:class="{
|
|
|
|
|
|
'resource-list': true,
|
|
|
|
|
|
'resource-list__large': isIconModeLarge
|
|
|
|
|
|
}"
|
|
|
|
|
|
icon="ri-send-plane-line"
|
|
|
|
|
|
title="可用资源"
|
|
|
|
|
|
:visible.sync="resourceList.visible"
|
|
|
|
|
|
:scroll="false"
|
|
|
|
|
|
:showClose="false"
|
|
|
|
|
|
:showDivider="false"
|
|
|
|
|
|
>
|
|
|
|
|
|
<template v-slot:header>
|
|
|
|
|
|
<span class="remote-header">
|
|
|
|
|
|
<i class="iconfont icon-left_icon_remote"></i>
|
|
|
|
|
|
可用资源
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</template-->
|
|
|
|
|
|
<!-- <template v-slot:command>-->
|
|
|
|
|
|
<!-- <el-tooltip-->
|
|
|
|
|
|
<!-- effect="dark"-->
|
|
|
|
|
|
<!-- content="详情"-->
|
|
|
|
|
|
<!-- placement="bottom"-->
|
|
|
|
|
|
<!-- >-->
|
|
|
|
|
|
<!-- <i class="ri-eye-2-line" @click="toggleRightShow"></i>-->
|
|
|
|
|
|
<!-- </el-tooltip>-->
|
|
|
|
|
|
<!-- </template>-->
|
|
|
|
|
|
<!--div class="resource-list__content">
|
|
|
|
|
|
<div v-for="item in resourceList.data" :key="item.id" class="resource-item" @click.stop="resourceClick(item)">
|
|
|
|
|
|
<span class="device-status" :class="item.status ? 'device-status__online' : ''"></span>
|
|
|
|
|
|
<span class="icon"><i class="ri-dv-line"></i></span>
|
|
|
|
|
|
<span class="device-name">{{item.name}}</span>
|
|
|
|
|
|
<span class="battery" :class="getDeviceBatteryClass(item.battery)" style="opacity: 0;"><i class="ri-battery-saver-line"></i>{{item.battery}}%</span>
|
|
|
|
|
|
<span class="fly-height"><i class="ri-expand-vertical-line"></i>{{item.flyHeight}}m</span>
|
|
|
|
|
|
<span class="device-location"><i class="ri-map-pin-line"></i>{{item.lon}},{{item.lat}}</span>
|
|
|
|
|
|
<i class="iconfont icon-zhuizong device-lock" @click.stop="flyToTarget(item.lon, item.lat, item.flyHeight)"></i>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</dt-card-->
|
|
|
|
|
|
|
|
|
|
|
|
<left-slide class="task-info-wrap">
|
|
|
|
|
|
<dt-card
|
|
|
|
|
|
:class="{
|
|
|
|
|
|
'task-list': true,
|
|
|
|
|
|
'task-list__large': isIconModeLarge,
|
|
|
|
|
|
}"
|
|
|
|
|
|
:visible.sync="taskList.visible"
|
|
|
|
|
|
:scroll="false"
|
|
|
|
|
|
:showClose="false"
|
|
|
|
|
|
:showDivider="false"
|
|
|
|
|
|
>
|
|
|
|
|
|
<template v-slot:header>
|
|
|
|
|
|
<span class="remote-header">
|
|
|
|
|
|
<i class="ri-task-fill"></i>
|
|
|
|
|
|
执行中的任务
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<!-- <template v-slot:command>-->
|
|
|
|
|
|
<!-- <el-tooltip-->
|
|
|
|
|
|
<!-- effect="dark"-->
|
|
|
|
|
|
<!-- content="上传精处理图片"-->
|
|
|
|
|
|
<!-- placement="top"-->
|
|
|
|
|
|
<!-- >-->
|
|
|
|
|
|
<!-- <i class="ri-upload-2-line" @click.stop="showUpload"></i>-->
|
|
|
|
|
|
<!-- </el-tooltip>-->
|
|
|
|
|
|
<!-- </template>-->
|
|
|
|
|
|
<div class="task-list__content">
|
|
|
|
|
|
<template v-if="taskList.data.length">
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-for="(item, index) in taskList.data"
|
|
|
|
|
|
:key="item.id"
|
|
|
|
|
|
class="task-item"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="left-part">
|
|
|
|
|
|
<!-- <div class="task-progress-bar" :style="'width: ' + item.uavCompletion +'%;'"></div>-->
|
|
|
|
|
|
<div class="execute-info" @click="openTaskLineDetail(item)">
|
|
|
|
|
|
<span
|
|
|
|
|
|
class="execute-type-icon"
|
|
|
|
|
|
:class="'execute-state-' + item.status"
|
|
|
|
|
|
><i class="ri-playstation-line"></i
|
|
|
|
|
|
></span>
|
|
|
|
|
|
<span class="task-execute">{{ item.name }}</span>
|
|
|
|
|
|
</div>
|
2026-01-28 13:56:23 +08:00
|
|
|
|
<div
|
|
|
|
|
|
class="task-info"
|
|
|
|
|
|
:style="{ color: dealStatusColor(item.statusName) }"
|
|
|
|
|
|
>
|
2026-01-25 16:02:00 +08:00
|
|
|
|
{{ item.statusName }}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="task-time">{{ item.beginTime }}</div>
|
|
|
|
|
|
</div>
|
2026-01-28 13:56:23 +08:00
|
|
|
|
<div class="right-part" >
|
2026-01-25 16:02:00 +08:00
|
|
|
|
<el-tooltip
|
|
|
|
|
|
effect="dark"
|
|
|
|
|
|
:content="item.check ? '隐藏' : '显示'"
|
2026-01-28 13:56:23 +08:00
|
|
|
|
placement="top"
|
2026-01-25 16:02:00 +08:00
|
|
|
|
>
|
|
|
|
|
|
<i
|
|
|
|
|
|
:class="item.check ? 'ri-eye-off-line' : 'ri-eye-line'"
|
|
|
|
|
|
@click.stop="toggleTaskSceneShow(item, index)"
|
|
|
|
|
|
></i>
|
|
|
|
|
|
</el-tooltip>
|
2026-01-28 13:56:23 +08:00
|
|
|
|
<!-- <el-tooltip
|
2026-01-25 16:02:00 +08:00
|
|
|
|
v-if="item.status === 0"
|
|
|
|
|
|
effect="dark"
|
|
|
|
|
|
content="执行"
|
2026-01-28 13:56:23 +08:00
|
|
|
|
placement="top"
|
2026-01-25 16:02:00 +08:00
|
|
|
|
>
|
|
|
|
|
|
<i
|
2026-01-28 13:56:23 +08:00
|
|
|
|
class="ri-arrow-up-circle-line"
|
2026-01-25 16:02:00 +08:00
|
|
|
|
@click.stop="makeTaskUavFly(item, index)"
|
|
|
|
|
|
></i>
|
2026-01-28 13:56:23 +08:00
|
|
|
|
</el-tooltip> -->
|
2026-01-25 16:02:00 +08:00
|
|
|
|
<el-tooltip
|
|
|
|
|
|
effect="dark"
|
|
|
|
|
|
content="结束任务"
|
2026-01-28 13:56:23 +08:00
|
|
|
|
placement="top"
|
2026-01-25 16:02:00 +08:00
|
|
|
|
v-if="item.status === 1"
|
|
|
|
|
|
>
|
|
|
|
|
|
<i
|
|
|
|
|
|
class="ri-stop-circle-line"
|
|
|
|
|
|
@click.stop="stopTask(item, index)"
|
|
|
|
|
|
></i>
|
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
|
<el-tooltip
|
|
|
|
|
|
effect="dark"
|
|
|
|
|
|
content="重新执行"
|
2026-01-28 13:56:23 +08:00
|
|
|
|
placement="top"
|
2026-01-25 16:02:00 +08:00
|
|
|
|
v-if="item.status === 2"
|
|
|
|
|
|
>
|
|
|
|
|
|
<i
|
2026-01-28 13:56:23 +08:00
|
|
|
|
class="ri-restart-line"
|
2026-01-25 16:02:00 +08:00
|
|
|
|
@click.stop="reRunTask(item, index)"
|
|
|
|
|
|
></i>
|
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<div v-else class="task-empty">
|
|
|
|
|
|
<img :src="emptyImg" alt="" />
|
|
|
|
|
|
<p>暂无执行中的任务</p>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</dt-card>
|
|
|
|
|
|
</left-slide>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 图片上传 -->
|
|
|
|
|
|
<pictures-upload
|
|
|
|
|
|
v-if="uploadPictureInfo.visible"
|
|
|
|
|
|
:visible.sync="uploadPictureInfo.visible"
|
|
|
|
|
|
></pictures-upload>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 气象预警 -->
|
|
|
|
|
|
|
|
|
|
|
|
<right-slide v-show="false" class="weather-info-wrap">
|
|
|
|
|
|
<dt-card
|
|
|
|
|
|
:class="{
|
|
|
|
|
|
'weather-info': true,
|
|
|
|
|
|
'weather-info__shrink': weatherInfo2.shrink,
|
|
|
|
|
|
'weather-info__large': isIconModeLarge,
|
|
|
|
|
|
}"
|
|
|
|
|
|
icon="iconfont icon-target"
|
|
|
|
|
|
title="气象预警"
|
|
|
|
|
|
:visible.sync="rightShow"
|
|
|
|
|
|
:scroll="false"
|
|
|
|
|
|
:showClose="false"
|
|
|
|
|
|
:showDivider="false"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="weather-info__content2">
|
|
|
|
|
|
<div class="base-info">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span>温度:</span><span>{{ weatherInfo2.wendu }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span>湿度:</span><span>{{ weatherInfo2.shidu }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span>空气质量:</span><span>{{ weatherInfo2.quality }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span>pm25:</span><span>{{ weatherInfo2.pm25 }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span>pm10:</span><span>{{ weatherInfo2.pm10 }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="week-info">
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-for="item in weatherInfo2.weekData"
|
|
|
|
|
|
:key="item.ymd"
|
|
|
|
|
|
class="week-info-item"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div>{{ item.week }}</div>
|
|
|
|
|
|
<div>{{ item.type }}</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span>{{ item.temperatureRange[0] }}</span
|
|
|
|
|
|
>~<span>{{ item.temperatureRange[0] }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>{{ item.fx }}</div>
|
|
|
|
|
|
<div>{{ item.fl }}</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<!-- <div class="visibility-chart">-->
|
|
|
|
|
|
<!-- <dt-multiple-analysis-->
|
|
|
|
|
|
<!-- ref="chart"-->
|
|
|
|
|
|
<!-- :data="weatherInfo2.chart.data"-->
|
|
|
|
|
|
<!-- :legend="weatherInfo2.chart.legend"-->
|
|
|
|
|
|
<!-- :tooltip="weatherInfo2.chart.tooltip"-->
|
|
|
|
|
|
<!-- :title="weatherInfo2.chart.title"-->
|
|
|
|
|
|
<!-- :grid="weatherInfo2.chart.grid"-->
|
|
|
|
|
|
<!-- :xAxis="weatherInfo2.chart.xAxis"-->
|
|
|
|
|
|
<!-- :yAxis="weatherInfo2.chart.yAxis"-->
|
|
|
|
|
|
<!-- ></dt-multiple-analysis>-->
|
|
|
|
|
|
<!-- </div>-->
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</dt-card>
|
|
|
|
|
|
</right-slide>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 雷达图 -->
|
|
|
|
|
|
|
|
|
|
|
|
<!--right-slide class="radar-info-wrap">
|
|
|
|
|
|
<dt-card
|
|
|
|
|
|
:class="{
|
|
|
|
|
|
'radar-info': true,
|
|
|
|
|
|
'radar-info__large': isIconModeLarge
|
|
|
|
|
|
}"
|
|
|
|
|
|
icon="iconfont icon-target"
|
|
|
|
|
|
title="缩略图"
|
|
|
|
|
|
:visible.sync="rightShow"
|
|
|
|
|
|
:scroll="false"
|
|
|
|
|
|
:showClose="false"
|
|
|
|
|
|
:showDivider="false"
|
|
|
|
|
|
>
|
|
|
|
|
|
<template v-slot:command>
|
|
|
|
|
|
<el-tooltip
|
|
|
|
|
|
effect="dark"
|
|
|
|
|
|
content="重建"
|
|
|
|
|
|
placement="bottom"
|
|
|
|
|
|
>
|
|
|
|
|
|
<i class="el-icon-refresh" style="cursor: pointer;" @click.stop="refreshRadar"></i>
|
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<div class="radar-canvas" ref="radarCanvas"></div>
|
|
|
|
|
|
</dt-card>
|
|
|
|
|
|
</right-slide-->
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 详情 -->
|
|
|
|
|
|
<right-slide class="detail-info-wrap" v-if="detailInfo.visible">
|
|
|
|
|
|
<dt-card
|
|
|
|
|
|
:class="{
|
|
|
|
|
|
'detail-info': true,
|
|
|
|
|
|
'detail-info__large': isIconModeLarge,
|
|
|
|
|
|
}"
|
|
|
|
|
|
icon="iconfont icon-target"
|
|
|
|
|
|
title="详细信息"
|
|
|
|
|
|
v-if="detailInfo.visible"
|
|
|
|
|
|
:visible.sync="detailInfo.visible"
|
|
|
|
|
|
:scroll="false"
|
|
|
|
|
|
:showClose="true"
|
|
|
|
|
|
:showDivider="false"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="detail-info__content">
|
|
|
|
|
|
<div class="base-info">
|
|
|
|
|
|
<!-- 无人机 -->
|
|
|
|
|
|
<div class="uav-item">
|
|
|
|
|
|
<span
|
|
|
|
|
|
class="device-status"
|
|
|
|
|
|
:class="getDeviceSignalClass(detailInfo.baseInfo.signal)"
|
|
|
|
|
|
></span>
|
|
|
|
|
|
<span class="icon"><i class="ri-dv-line"></i></span>
|
|
|
|
|
|
<span class="device-name">{{ detailInfo.baseInfo.name }}</span>
|
|
|
|
|
|
<span
|
|
|
|
|
|
class="battery"
|
|
|
|
|
|
:class="getDeviceBatteryClass(detailInfo.baseInfo.battery)"
|
|
|
|
|
|
style="opacity: 0"
|
|
|
|
|
|
><i class="ri-battery-saver-line"></i
|
|
|
|
|
|
>{{ detailInfo.baseInfo.battery }}%</span
|
|
|
|
|
|
>
|
|
|
|
|
|
<span class="fly-height"
|
|
|
|
|
|
><i class="ri-expand-vertical-line"></i
|
|
|
|
|
|
>{{ detailInfo.baseInfo.flyHeight }}m</span
|
|
|
|
|
|
>
|
|
|
|
|
|
<span class="device-location"
|
|
|
|
|
|
><i class="ri-map-pin-line"></i>{{ detailInfo.baseInfo.lon }},{{
|
|
|
|
|
|
detailInfo.baseInfo.lat
|
|
|
|
|
|
}}</span
|
|
|
|
|
|
>
|
|
|
|
|
|
<i class="el-icon-info device-lock" @click="showUavMore"></i>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<!-- <div class="target-task-list">-->
|
|
|
|
|
|
<!-- <div class="target-task-item" v-for="item in detailInfo.taskList" :key="item.id">-->
|
|
|
|
|
|
<!-- <div class="execute-info">-->
|
|
|
|
|
|
<!-- <span class="execute-type-icon" :class="'execute-state-' + item.status"><i class="ri-dv-line"></i></span>-->
|
|
|
|
|
|
<!-- <span class="task-execute">{{ item.name }}</span>-->
|
|
|
|
|
|
<!-- </div>-->
|
|
|
|
|
|
<!-- <div class="task-time">{{item.beginTime}}</div>-->
|
|
|
|
|
|
<!-- </div>-->
|
|
|
|
|
|
<!-- </div>-->
|
|
|
|
|
|
<div class="picture-list">
|
|
|
|
|
|
<div>回传图像:</div>
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-for="item in detailInfo.pictureList"
|
|
|
|
|
|
:key="item.createTime"
|
|
|
|
|
|
class="picture-list-item"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="picture-item-image">
|
|
|
|
|
|
<el-image
|
|
|
|
|
|
style="width: 40px; height: 40px"
|
|
|
|
|
|
:src="item.url"
|
|
|
|
|
|
:preview-src-list="[item.url]"
|
|
|
|
|
|
>
|
|
|
|
|
|
</el-image>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="picture-item-info">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
拍摄任务:{{ item.taskName }} | 拍摄载荷:{{
|
|
|
|
|
|
item.loaderName
|
|
|
|
|
|
}}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>拍摄时间:{{ item.createTime }}</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="picture-command">
|
|
|
|
|
|
<i
|
|
|
|
|
|
class="iconfont icon-dt-icon-dingwei"
|
|
|
|
|
|
@click="lockHistoryPicture(item)"
|
|
|
|
|
|
></i>
|
|
|
|
|
|
<i
|
|
|
|
|
|
class="iconfont icon-quanjushijiao-copy"
|
|
|
|
|
|
@click="toggleHistoryPicture(item)"
|
|
|
|
|
|
></i>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</dt-card>
|
|
|
|
|
|
</right-slide>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 详情 -->
|
|
|
|
|
|
<dt-card
|
|
|
|
|
|
:class="{
|
|
|
|
|
|
'detail-uav': true,
|
|
|
|
|
|
'detail-uav__large': isIconModeLarge,
|
|
|
|
|
|
}"
|
|
|
|
|
|
icon="iconfont icon-target"
|
|
|
|
|
|
title="详细信息"
|
|
|
|
|
|
v-if="detailUav.visible"
|
|
|
|
|
|
:visible.sync="detailUav.visible"
|
|
|
|
|
|
:scroll="true"
|
|
|
|
|
|
:showClose="true"
|
|
|
|
|
|
:showDivider="false"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="detail-uav__content">
|
|
|
|
|
|
<div class="image-info">
|
|
|
|
|
|
<img :src="detailUav.baseInfo.url" alt="" />
|
|
|
|
|
|
<div class="status-info">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span
|
|
|
|
|
|
:class="
|
|
|
|
|
|
detailUav.baseInfo.status
|
|
|
|
|
|
? 'uav-status-online'
|
|
|
|
|
|
: 'uav-status-offline'
|
|
|
|
|
|
"
|
|
|
|
|
|
></span>
|
|
|
|
|
|
<span>{{ detailUav.baseInfo.status ? '在线' : '离线' }}</span>
|
|
|
|
|
|
<!-- <span style="opacity: 0;"><i class="ri-battery-saver-line"></i>{{detailUav.baseInfo.battery}}%</span>-->
|
|
|
|
|
|
<span
|
|
|
|
|
|
><i class="ri-expand-vertical-line"></i
|
|
|
|
|
|
>{{ detailUav.baseInfo.flyHeight }}m</span
|
|
|
|
|
|
>
|
|
|
|
|
|
<!-- <span><i class="ri-expand-horizontal-line"></i>{{detailUav.baseInfo.flyWidth}}m</span>-->
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<span>{{ detailUav.baseInfo.longitude }}</span>
|
|
|
|
|
|
<span>{{ detailUav.baseInfo.latitude }}</span>
|
|
|
|
|
|
<i
|
|
|
|
|
|
class="iconfont icon-zhuizong"
|
|
|
|
|
|
@click.stop="
|
|
|
|
|
|
flyToTarget(
|
|
|
|
|
|
detailUav.baseInfo.longitude,
|
|
|
|
|
|
detailUav.baseInfo.latitude,
|
|
|
|
|
|
detailUav.baseInfo.flyHeight
|
|
|
|
|
|
)
|
|
|
|
|
|
"
|
|
|
|
|
|
></i>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="other-info">
|
|
|
|
|
|
<el-collapse
|
|
|
|
|
|
v-model="detailUav.activeNames"
|
|
|
|
|
|
@change="handleUavDetailCollapse"
|
|
|
|
|
|
>
|
|
|
|
|
|
<!-- <el-collapse-item title="基本信息" name="1">-->
|
|
|
|
|
|
<!-- <div class="uav-span-wrap"><span>名称:</span><span>{{detailUav.basicsInfo.name}}</span></div>-->
|
|
|
|
|
|
<!-- <div class="uav-span-wrap"><span>分组:</span><span>{{detailUav.basicsInfo.group}}</span></div>-->
|
|
|
|
|
|
<!-- </el-collapse-item>-->
|
|
|
|
|
|
<!-- <el-collapse-item title="任务信息" name="2">-->
|
|
|
|
|
|
<!-- <div class="target-task-item" v-for="item in detailUav.taskList" :key="item.id">-->
|
|
|
|
|
|
<!-- <div class="task-progress-bar" :style="'width: ' + item.uavCompletion +'%;'"></div>-->
|
|
|
|
|
|
<!-- <div class="task-info">-->
|
|
|
|
|
|
<!-- <i :class="item.typeIcon"></i>-->
|
|
|
|
|
|
<!-- <span class="task-name">{{ item.taskName }}</span>-->
|
|
|
|
|
|
<!-- <span :class="{ 'task-finish': item.isFinish }">{{-->
|
|
|
|
|
|
<!-- item.uavCompletionName-->
|
|
|
|
|
|
<!-- }}</span>-->
|
|
|
|
|
|
<!-- </div>-->
|
|
|
|
|
|
<!-- <div class="task-time">{{item.taskTime}}</div>-->
|
|
|
|
|
|
<!-- </div>-->
|
|
|
|
|
|
<!-- </el-collapse-item>-->
|
|
|
|
|
|
<el-collapse-item title="状态信息" name="3">
|
|
|
|
|
|
<el-tabs v-model="detailUav.activeTab">
|
|
|
|
|
|
<el-tab-pane label="DEV" name="DEV">
|
|
|
|
|
|
<div
|
|
|
|
|
|
class="uav-span-wrap"
|
|
|
|
|
|
v-for="item in detailUav.statusInfo.dev"
|
|
|
|
|
|
:key="item.name"
|
|
|
|
|
|
>
|
|
|
|
|
|
<span>{{ item.name }}:</span>
|
|
|
|
|
|
<span>{{ item.value }}{{ item.unit }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
|
<el-tab-pane label="GPS" name="GPS">
|
|
|
|
|
|
<div
|
|
|
|
|
|
class="uav-span-wrap"
|
|
|
|
|
|
v-for="item in detailUav.statusInfo.gps"
|
|
|
|
|
|
:key="item.name"
|
|
|
|
|
|
>
|
|
|
|
|
|
<span>{{ item.name }}:</span>
|
|
|
|
|
|
<span>{{ item.value }}{{ item.unit }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
|
<el-tab-pane label="IMU" name="IMU">
|
|
|
|
|
|
<div
|
|
|
|
|
|
class="uav-span-wrap"
|
|
|
|
|
|
v-for="item in detailUav.statusInfo.imu"
|
|
|
|
|
|
:key="item.name"
|
|
|
|
|
|
>
|
|
|
|
|
|
<span>{{ item.name }}:</span>
|
|
|
|
|
|
<span>{{ item.value }}{{ item.unit }}</span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
|
</el-tabs>
|
|
|
|
|
|
</el-collapse-item>
|
|
|
|
|
|
<el-collapse-item title="波形信息" name="4">
|
|
|
|
|
|
<div class="wave-chart">
|
|
|
|
|
|
<dt-multiple-analysis
|
|
|
|
|
|
ref="uavDetailChart"
|
|
|
|
|
|
:data="detailUav.chart.data"
|
|
|
|
|
|
:legend="detailUav.chart.legend"
|
|
|
|
|
|
:tooltip="detailUav.chart.tooltip"
|
|
|
|
|
|
:title="detailUav.chart.title"
|
|
|
|
|
|
:grid="detailUav.chart.grid"
|
|
|
|
|
|
:xAxis="detailUav.chart.xAxis"
|
|
|
|
|
|
:yAxis="detailUav.chart.yAxis"
|
|
|
|
|
|
></dt-multiple-analysis>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-collapse-item>
|
|
|
|
|
|
<el-collapse-item title="回传图像" name="5">
|
|
|
|
|
|
<div class="back-image">
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-for="item in detailInfo.pictureList"
|
|
|
|
|
|
:key="item.time"
|
|
|
|
|
|
class="picture-list-item"
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="picture-item-image">
|
|
|
|
|
|
<el-image
|
|
|
|
|
|
style="width: 40px; height: 40px"
|
|
|
|
|
|
:src="item.url"
|
|
|
|
|
|
:preview-src-list="[item.url]"
|
|
|
|
|
|
>
|
|
|
|
|
|
</el-image>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="picture-item-info">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
拍摄任务:{{ item.taskName }} | 拍摄载荷:{{
|
|
|
|
|
|
item.loaderName
|
|
|
|
|
|
}}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div>拍摄时间:{{ item.time }}</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="picture-command">
|
|
|
|
|
|
<i
|
|
|
|
|
|
class="iconfont icon-dt-icon-dingwei"
|
|
|
|
|
|
@click="lockHistoryPicture(item)"
|
|
|
|
|
|
></i>
|
|
|
|
|
|
<i
|
|
|
|
|
|
class="iconfont icon-quanjushijiao-copy"
|
|
|
|
|
|
@click="toggleHistoryPicture(item)"
|
|
|
|
|
|
></i>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-collapse-item>
|
|
|
|
|
|
</el-collapse>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</dt-card>
|
|
|
|
|
|
|
|
|
|
|
|
<dt-dialog
|
|
|
|
|
|
:title="taskLineDetail.title"
|
|
|
|
|
|
top="20vh"
|
|
|
|
|
|
width="60vw"
|
|
|
|
|
|
:visible.sync="taskLineDetail.visible"
|
|
|
|
|
|
append-to-body
|
|
|
|
|
|
>
|
|
|
|
|
|
<div class="task-line-detail">
|
|
|
|
|
|
<el-table :data="taskLineDetail.data" height="100%" style="width: 100%">
|
|
|
|
|
|
<el-table-column type="index" width="50"> </el-table-column>
|
|
|
|
|
|
<el-table-column prop="startLon" label="起点经度"> </el-table-column>
|
|
|
|
|
|
<el-table-column prop="startLat" label="起点纬度"> </el-table-column>
|
|
|
|
|
|
<el-table-column prop="startHeight" label="起点相对高度">
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column prop="startAlt" label="起点海拔高度">
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column prop="endLon" label="终点经度"> </el-table-column>
|
|
|
|
|
|
<el-table-column prop="endLat" label="终点纬度"> </el-table-column>
|
|
|
|
|
|
<el-table-column prop="endHeight" label="终点相对高度">
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column prop="endAlt" label="终点海拔高度">
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
</el-table>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</dt-dialog>
|
|
|
|
|
|
|
|
|
|
|
|
<dt-loading :visible="loadingCount > 0"></dt-loading>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<script src="./index.js"></script>
|
|
|
|
|
|
<style src="./index.scss" lang="scss" scoped></style>
|