| | |
| | | <a-empty style="color: #fff;" :image="simpleImage" description="暂无数据" :image-style="{ height: '60px' }" /> |
| | | </div> |
| | | <div v-else class="fz12" style="color: white;"> |
| | | <div v-for="dock in onlineDocks.data" :key="dock.sn" |
| | | style="background: #3c3c3c; margin-bottom: 10px;"> |
| | | <div v-for="dock in onlineDocks.data" :key="dock.sn" style="background: #3c3c3c; margin-bottom: 10px;"> |
| | | <div class="task_wrapper" v-if="dock.latest_wayline_job"> |
| | | <div class="task_content task_content_way" v-if="deviceInfo[dock.sn] && deviceInfo[dock.sn].mode_code === 5"> |
| | | <div class="task_content task_content_way" |
| | | v-if="deviceInfo[dock.sn] && deviceInfo[dock.sn].mode_code === 5"> |
| | | <div class="task_status"> |
| | | <ContainerOutlined /> |
| | | <span>执行任务中</span> |
| | |
| | | <ContainerOutlined /> |
| | | <span>待执行</span> |
| | | </div> |
| | | <div class="task_info">{{dock.latest_wayline_job.is_later ? '今天': '明天'}}{{convertTimestampToDate(dock.latest_wayline_job.begin_time, 'hh:mm')}}</div> |
| | | <div class="task_info">{{ dock.latest_wayline_job.is_later ? '今天' : |
| | | '明天' }}{{ convertTimestampToDate(dock.latest_wayline_job.begin_time, 'hh:mm') }}</div> |
| | | </div> |
| | | <div class="task_title">{{dock.latest_wayline_job.name}}</div> |
| | | <div class="task_title">{{ dock.latest_wayline_job.name }}</div> |
| | | </div> |
| | | <div style="border-radius: 2px; height: 90px; width: 100%;" |
| | | class="flex-row flex-justify-between flex-align-center"> |
| | |
| | | :style="deviceInfo[dock.sn] && deviceInfo[dock.sn].mode_code !== EModeCode.Disconnected || dockInfo[dock.gateway.sn].basic_osd?.drone_in_dock === 1 ? 'color: #00ee8b' : 'color: red;'"> |
| | | {{ |
| | | deviceInfo[dock.sn] ? EModeText[deviceInfo[dock.sn].mode_code] : |
| | | dockInfo[dock.gateway.sn].basic_osd?.drone_in_dock === 1 ? '舱内关机' : |
| | | dockInfo[dock.gateway.sn]?.basic_osd?.drone_in_dock === 1 ? '舱内关机' : |
| | | EModeText[EModeCode.Disconnected] |
| | | }} |
| | | </div> |
| | |
| | | |
| | | <script lang="ts" setup> |
| | | import * as Cesium from 'cesium' |
| | | import { computed, onMounted, reactive, ref, watch, WritableComputedRef } from 'vue' |
| | | import { computed, onMounted, reactive, ref, watch, onUnmounted } from 'vue' |
| | | import { EDeviceTypeName, ELocalStorageKey } from '/@/types' |
| | | import rc from '/@/assets/icons/rc.png' |
| | | import { OnlineDevice, EModeCode, OSDVisible, EDockModeCode, DeviceOsd, EDockModeText, EModeText } from '/@/types/device' |
| | |
| | | import { EHmsLevel } from '/@/types/enums' |
| | | import { cesiumOperation } from '/@/hooks/use-cesium-tsa' |
| | | import { convertTimestampToDate, getDateFromTimestamp, isToday, setTodayTime } from '/@/utils/time' |
| | | import { parseJsonFile } from '/@/utils/geo-utils' |
| | | let droneEntity: any |
| | | |
| | | const { appContext } = getCurrentInstance() |
| | |
| | | } |
| | | cesium.addPoint(setting) |
| | | // 无人机路线轨迹 |
| | | // 判断是否存在done_route |
| | | if (cesium.getEntityById('drone_route')) { |
| | | cesium.removeById('drone_route') |
| | | } |
| | | const routeTrajectory = { |
| | | longitude: 115.85666327144976, |
| | | latitude: 28.62452712442823, |
| | |
| | | // 更新线段的位置 |
| | | const drone_route = cesium.getEntityById('drone_route') |
| | | drone_route.polyline.positions = previousPositions.value |
| | | // eslint-disable-next-line eqeqeq |
| | | // eslint-disable-next-line eqeqeq |
| | | } else if (data.deviceInfo[data.currentSn].mode_code == 0 || data.deviceInfo[data.currentSn].mode_code == 14) { |
| | | const drone_route = cesium.getEntityById('drone_route') |
| | | previousPositions.value = [] |
| | |
| | | const setting = { |
| | | longitude: data.dockInfo[data.currentSn].basic_osd?.longitude, |
| | | latitude: data.dockInfo[data.currentSn].basic_osd?.latitude, |
| | | id: `drone_dock_${new Date().getTime()}`, |
| | | billboard: { |
| | | image: getResource('dock.png'), |
| | | outlineWidth: 0, |
| | | width: 36, |
| | | height: 36, |
| | | scale: 1.0, |
| | | } |
| | | }, |
| | | } |
| | | cesium.addPoint(setting) |
| | | // cesium.flyTo(setting) |
| | |
| | | } |
| | | } |
| | | // 判断给定日期是否晚于当前时间 |
| | | const isDateLaterThanNow = (dateObj:any) => { |
| | | const isDateLaterThanNow = (dateObj: any) => { |
| | | const todayTimestamp = setTodayTime(dateObj) |
| | | return todayTimestamp > Date.now() |
| | | } |
| | |
| | | previousPositions.value = [] |
| | | }) |
| | | |
| | | onUnmounted(() => { |
| | | cesium.removeAllPoint() |
| | | }) |
| | | |
| | | function getOnlineTopo () { |
| | | getDeviceTopo(workSpaceId.value).then((res) => { |
| | | if (res.code !== 0) { |
| | |
| | | onlineDevices.data = [] |
| | | onlineDocks.data = [] |
| | | res.data.forEach((gateway: any) => { |
| | | const child = gateway.children |
| | | const child = gateway?.children || [] |
| | | if (gateway.latest_wayline_job) { |
| | | const isLater = isToday(gateway.latest_wayline_job.begin_time) |
| | | // false 代表任务开始时间大于今天 true为任务开始时间为今天 |
| | |
| | | }, |
| | | payload: [] |
| | | } |
| | | child?.payloads_list.forEach((payload: any) => { |
| | | const payloads_list = child?.payloads_list || [] |
| | | payloads_list.forEach((payload: any) => { |
| | | device.payload.push({ |
| | | index: payload.index, |
| | | model: payload.model, |
| | |
| | | e.target.style.cursor = 'not-allowed' |
| | | return |
| | | } |
| | | |
| | | if (device.sn === osdVisible.value.sn) { |
| | | osdVisible.value.visible = !osdVisible.value.visible |
| | | // 临时--可能会改 |
| | | osdVisible.value.is_dock = true |
| | | osdVisible.value.gateway_sn = device.gateway.sn |
| | | } else { |
| | | osdVisible.value.sn = device.sn |
| | | osdVisible.value.callsign = device.callsign |
| | |
| | | .task_wrapper { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .task_content { |
| | | background-color: #41bbfa; |
| | | padding: 2px 4px; |
| | | } |
| | | |
| | | .task_content_way { |
| | | background-color: #19be6b; |
| | | } |
| | | |
| | | .task_title { |
| | | margin-left: 5px; |
| | | font-size: 14px; |