Merge remote-tracking branch 'origin/master'
| | |
| | | export const flyByJobId = jobId => { |
| | | return request({ |
| | | url: '/drone-device-core/wayline/api/v1/workspaces/flyByJobId?jobId=' + jobId, |
| | | method: 'get', |
| | | method: 'post', |
| | | }) |
| | | } |
| | | // 再次执行 |
| | |
| | | }) |
| | | } |
| | | // 机巢直播/无人机直播 均可使用 |
| | | export const liveStart = deviceSn => { |
| | | export const liveStart = (deviceSn, quality) => { |
| | | return request({ |
| | | url: `/drone-device-core/manage/api/v1/live/streams/liveStart?deviceSn=${deviceSn}`, |
| | | url: `/drone-device-core/manage/api/v1/live/streams/liveStart?deviceSn=${deviceSn}&quality=${quality}`, |
| | | method: 'post', |
| | | data: {}, |
| | | headers: { |
| | |
| | | color: var(--text-color); |
| | | } |
| | | .el-select__wrapper { |
| | | background-color: transparent; |
| | | background-color: #021022; |
| | | box-shadow: none; |
| | | border: var(--border); |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | // 弹框-dialog |
| | | .ztzf-dialog { |
| | | |
| | | background: #0f1929; |
| | | box-shadow: inset 0px -50px 50px 0px rgba(27, 148, 255, 0.13); |
| | | border-radius: 20px 0px 0px 0px; |
| | | border: 2px solid; |
| | | padding: 0 !important; |
| | | |
| | | border-image: linear-gradient( |
| | | 180deg, |
| | | rgba(81, 168, 255, 0), |
| | | rgba(48, 111, 202, 1), |
| | | rgba(255, 255, 255, 1), |
| | | rgba(27, 148, 255, 1) |
| | | ) |
| | | 2 2; |
| | | // 头部 |
| | | .el-dialog__header { |
| | | width: 100%; |
| | | height: 47px; |
| | | margin-bottom: 14px; |
| | | background: url('/src/assets/images/home/homeLeft/inspection-vector.png') no-repeat center; |
| | | background-size: 100% 100%; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | line-height: 47px; |
| | | } |
| | | .el-dialog__title { |
| | | width: 112px; |
| | | height: 19px; |
| | | font-family: Segoe UI, Segoe UI; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | line-height: 16px; |
| | | text-shadow: 0px 0px 5px rgba(154, 218, 255, 0.6); |
| | | text-align: left; |
| | | font-style: normal; |
| | | text-transform: none; |
| | | background: linear-gradient(90deg, #fbfdff 0%, #86d4ff 100%); |
| | | margin-left: 16px; |
| | | -webkit-background-clip: text; /* 背景被裁剪成文字的前景色 */ |
| | | -webkit-text-fill-color: transparent; /* 文字填充颜色变透明 */ |
| | | } |
| | | .el-dialog .el-dialog__header { |
| | | /* margin: 0px !important; */ |
| | | padding: 0px !important; |
| | | padding-left: 0px !important; |
| | | } |
| | | .el-scrollbar__thumb { |
| | | background: #13c6ff !important; |
| | | } |
| | | } |
| | | |
| | |
| | | <div |
| | | :class="[index % 2 === 1 ? 'table-itemeven' : 'table-item']" |
| | | v-for="(item, index) in tableList" |
| | | :key="index" |
| | | :key="index" @click="signMachineNestClick(item)" |
| | | > |
| | | <img src="/src/assets/images/home/homeLeft/machinenestlist-sign.png" alt="" /> |
| | | <div class="middle"> |
| | | <div class="title">{{ item.nickname }}</div> |
| | | <div class="number"> |
| | | 飞行次数:<span>{{ item.fly_count }}</span |
| | | >次 飞行里程:<span>{{ item.flight_mileage }}</span |
| | | >km |
| | | 飞行次数: |
| | | <span>{{ item.fly_count }}</span> |
| | | 次 飞行里程: |
| | | <span>{{ item.flight_mileage }}</span> |
| | | km |
| | | </div> |
| | | <div class="result"> |
| | | 任务成果:<span>{{ item.accumulate_data }}</span |
| | | >个 飞行时长:<span>{{ item.hour }}</span |
| | | >h |
| | | 任务成果: |
| | | <span>{{ item.accumulate_data }}</span> |
| | | 个 飞行时长: |
| | | <span>{{ item.hour }}</span> |
| | | h |
| | | </div> |
| | | </div> |
| | | <div |
| | | class="right" |
| | | :class="item.status === 'WORKING' ? 'atcive' : item.status === 'OFFLINE' ? 'offine' : 'freetime'" |
| | | @click="signMachineNestClick(item)" |
| | | > |
| | | :class="item.status === 'WORKING' ? 'atcive' : item.status === 'OFFLINE' ? 'offine' : 'freetime'"> |
| | | {{ item.status === 'OFFLINE' ? '离线中' : item.status === 'WORKING' ? '作业中' : '空闲中' }} |
| | | </div> |
| | | </div> |
| | |
| | | <div class="name">机巢总数</div> |
| | | </div> |
| | | <div class="status"> |
| | | <div class="item" v-for="(item, index) in listNum"> |
| | | <div class="item" v-for="(item, index) in listNum" > |
| | | <div> |
| | | <div :style="{ color: item.color }" class="value">{{ item.value }}</div> |
| | | <div class="name">{{ item.name }}</div> |
| | |
| | | let total = ref(0); |
| | | // 机巢统计 |
| | | let listNum = ref([ |
| | | { name: '空闲中', value: 89, color: '#FFA768' }, |
| | | { name: '作业中', value: 100, color: '#8EFFAC' }, |
| | | { name: '离线中', value: 66, color: '#FFFFFF' }, |
| | | { name: '空闲中', value: 0, color: '#FFA768' }, |
| | | { name: '作业中', value: 0, color: '#8EFFAC' }, |
| | | { name: '离线中', value: 0, color: '#FFFFFF' }, |
| | | // { name: '异常', value: 10, color: '#FF8E8E' }, |
| | | ]); |
| | | // 获取机巢列表 |
| | |
| | | <template> |
| | | <div class="ai-chat"> |
| | | <el-popover |
| | | placement="bottom" |
| | | :visible="visible" |
| | | :width="200" |
| | | trigger="click" |
| | | > |
| | | <template #reference> |
| | | <div class="chat" id="chatID" v-drag:chatID @mousedown="handleMouseDown" |
| | | @mouseup="handleMouseUp"/> |
| | | </template> |
| | | <div> |
| | | 快和我对话吧 |
| | | <el-input/> |
| | | </div> |
| | | </el-popover> |
| | | <img class="chat-bottom" src="../../assets/images/chat-bottom.png" alt=""> |
| | | </div> |
| | | <div class="r-side"> |
| | | <img v-for="(item, index) in images" |
| | | :key="index" :class="item.class" |
| | | :src="activeIndex === index ? item.activeSrc : item.src" alt="" |
| | | @click="activeChange(index)" |
| | | @mouseenter="enterHover(index)" |
| | | @mouseleave="logIndex=3" |
| | | > |
| | | </div> |
| | | <div v-if="logIndex===0" class="r-side-positioning">返回当前位置</div> |
| | | <div v-if="logIndex===1" class="r-side-measuring">量尺</div> |
| | | <div v-if="logIndex===2" class="r-side-layer">切换地图模式</div> |
| | | <MeasuringDistance v-if="activeIndex === 1"/> |
| | | <div class="ai-chat"> |
| | | <el-popover placement="bottom" :visible="visible" :width="200" trigger="click"> |
| | | <template #reference> |
| | | <div class="chat" id="chatID" v-drag:chatID @mousedown="handleMouseDown" @mouseup="handleMouseUp" /> |
| | | </template> |
| | | <div> |
| | | 快和我对话吧 |
| | | <el-input /> |
| | | </div> |
| | | </el-popover> |
| | | <img class="chat-bottom" src="../../assets/images/chat-bottom.png" alt="" /> |
| | | </div> |
| | | <div class="r-side"> |
| | | <img |
| | | v-for="(item, index) in images" |
| | | :key="index" |
| | | :class="item.class" |
| | | :src="activeIndex === index ? item.activeSrc : item.src" |
| | | alt="" |
| | | @click="activeChange(index)" |
| | | @mouseenter="enterHover(index)" |
| | | @mouseleave="logIndex = 3" |
| | | /> |
| | | </div> |
| | | <div v-if="logIndex === 0" class="r-side-positioning">返回当前位置</div> |
| | | <div v-if="logIndex === 1" class="r-side-measuring">量尺</div> |
| | | <div v-if="logIndex === 2" class="r-side-layer">切换地图模式</div> |
| | | <MeasuringDistance v-if="activeIndex === 1" /> |
| | | |
| | | </template> |
| | | |
| | | <script setup> |
| | |
| | | import tc1 from '@/assets/images/rSide/tc1.png' |
| | | import cesiumOperation from '@/utils/cesium-tsa' |
| | | |
| | | let logIndex = ref(3); |
| | | const enterHover = (value) => { |
| | | logIndex.value = value; |
| | | let logIndex = ref(3) |
| | | const enterHover = value => { |
| | | logIndex.value = value |
| | | } |
| | | const { flyTo } = cesiumOperation() |
| | | |
| | | const store = useStore(); |
| | | const currentAreaPosition = computed(() => store.state.home.currentAreaPosition); |
| | | const store = useStore() |
| | | const currentAreaPosition = computed(() => store.state.home.currentAreaPosition) |
| | | |
| | | let activeIndex = ref(null); |
| | | const activeChange = (value) => { |
| | | if(value === 0) { |
| | | let activeIndex = ref(null) |
| | | const activeChange = value => { |
| | | if (value === 0) { |
| | | flyTo(currentAreaPosition.value, 0, currentAreaPosition.value.height) |
| | | } |
| | | if (value === 1){ |
| | | activeIndex.value = activeIndex.value === 1 ? null : value; |
| | | if (value === 1) { |
| | | activeIndex.value = activeIndex.value === 1 ? null : value |
| | | } |
| | | if (value === 2) { |
| | | activeIndex.value = activeIndex.value === 2 ? null : value |
| | | } |
| | | } |
| | | const visible = ref(false); |
| | | let pressStart = 0; |
| | | const visible = ref(false) |
| | | let pressStart = 0 |
| | | |
| | | const handleMouseDown = () => { |
| | | pressStart = Date.now(); // 记录按下时间 |
| | | }; |
| | | pressStart = Date.now() // 记录按下时间 |
| | | } |
| | | |
| | | const handleMouseUp = () => { |
| | | const pressDuration = Date.now() - pressStart; // 计算按下时长 |
| | | if (pressDuration < 150) { |
| | | // 如果按下时间小于200ms,认为是点击 |
| | | visible.value = !visible.value; |
| | | } |
| | | }; |
| | | const pressDuration = Date.now() - pressStart // 计算按下时长 |
| | | if (pressDuration < 150) { |
| | | // 如果按下时间小于200ms,认为是点击 |
| | | visible.value = !visible.value |
| | | } |
| | | } |
| | | |
| | | // 添加: 定义图片数组 |
| | | const images = [ |
| | | { class: 'positioning', src: dw,activeSrc:dw1 }, |
| | | { class: 'measuring-scale', src: lc,activeSrc:lc1 }, |
| | | { class: 'layer', src: tc,activeSrc:tc1 } |
| | | ]; |
| | | { class: 'positioning', src: dw, activeSrc: dw1 }, |
| | | { class: 'measuring-scale', src: lc, activeSrc: lc1 }, |
| | | { class: 'layer', src: tc, activeSrc: tc1 }, |
| | | ] |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | |
| | | } |
| | | } |
| | | .r-side { |
| | | position: absolute; |
| | | bottom: 122px; |
| | | right: 463px; |
| | | cursor: pointer; |
| | | img { |
| | | display: block; |
| | | width: 48px; |
| | | height: 48px; |
| | | } |
| | | .positioning { |
| | | position: relative; |
| | | bottom: 24px; |
| | | } |
| | | .measuring-scale { |
| | | position: relative; |
| | | bottom: 12px; |
| | | } |
| | | position: absolute; |
| | | bottom: 122px; |
| | | right: 463px; |
| | | cursor: pointer; |
| | | img { |
| | | display: block; |
| | | width: 48px; |
| | | height: 48px; |
| | | } |
| | | .positioning { |
| | | position: relative; |
| | | bottom: 24px; |
| | | } |
| | | .measuring-scale { |
| | | position: relative; |
| | | bottom: 12px; |
| | | } |
| | | } |
| | | .r-side-positioning, .r-side-measuring, .r-side-layer { |
| | | position: absolute; |
| | | right: 514px; |
| | | width: 130px; |
| | | height: 48px; |
| | | font-family: Source Han Sans CN, Source Han Sans CN; |
| | | font-weight: 400; |
| | | font-size: 18px; |
| | | color: #FFFFFF; |
| | | line-height: 48px; |
| | | text-align: center; |
| | | background: url('@/assets/images/cursor.png'); |
| | | .r-side-positioning, |
| | | .r-side-measuring, |
| | | .r-side-layer { |
| | | position: absolute; |
| | | right: 514px; |
| | | width: 130px; |
| | | height: 48px; |
| | | font-family: Source Han Sans CN, Source Han Sans CN; |
| | | font-weight: 400; |
| | | font-size: 18px; |
| | | color: #ffffff; |
| | | line-height: 48px; |
| | | text-align: center; |
| | | background: url('@/assets/images/cursor.png'); |
| | | } |
| | | .r-side-positioning { |
| | | bottom: 242px; |
| | | bottom: 242px; |
| | | } |
| | | .r-side-measuring { |
| | | bottom: 182px; |
| | | bottom: 182px; |
| | | } |
| | | .r-side-layer { |
| | | bottom: 122px; |
| | | bottom: 122px; |
| | | } |
| | | </style> |
| | | |
| | |
| | | <img src="../../../assets/images/signMachineNest/machineRight/name.png" alt="" />{{ item.creator_name || '' }} |
| | | </div> |
| | | </div> |
| | | <div class="right" v-if="tabIndex===1" @click="returnImmediately(item.id)"> |
| | | <div class="right" v-if="tabIndex===1" @click="reExecute(item.dock_sn)"> |
| | | <span>立即返航</span> |
| | | <img src="../../../assets/images/signMachineNest/machineRight/return-fly.png" alt=""> |
| | | </div> |
| | | <div class="right" v-else @click="reExecute(item.dock_sn)"> |
| | | <div class="right" v-else @click="returnImmediately(item.job_id)"> |
| | | <span>再次执行</span> |
| | | <img src="../../../assets/images/signMachineNest/machineRight/return-fly.png" alt=""> |
| | | </div> |
| | |
| | | |
| | | <script setup> |
| | | import { Search } from '@element-plus/icons-vue'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import CommonTitle from '@/components/CommonTitle.vue'; |
| | | import { getBeforeJob, getTodayJob, flyByJobId, returnHome } from '@/api/home'; |
| | | import { useStore } from 'vuex'; |
| | |
| | | const returnImmediately = (id) => { |
| | | flyByJobId(id).then(result => { |
| | | if (result.data.code === 0) { |
| | | ElMessage.success('返航成功'); |
| | | ElMessage.success('执行成功'); |
| | | } else { |
| | | ElMessage.error(result.data.message); |
| | | } |
| | |
| | | const reExecute = (dock_sn) => { |
| | | returnHome(dock_sn).then(result => { |
| | | if (result.data.code === 0) { |
| | | ElMessage.success('执行成功'); |
| | | ElMessage.success('返航成功'); |
| | | } else { |
| | | ElMessage.error(result.data.message); |
| | | } |
| | |
| | | <!-- 机巢监控 --> |
| | | <template> |
| | | <CommonTitle title="机巢监控" /> |
| | | <CommonTitle title="视频监控" /> |
| | | <div :style="{ marginLeft: pxToRem(14) }"> |
| | | <div class="machine-monitor"> |
| | | <LiveVideo :videoUrl="airPortUrl" /> |
| | |
| | | // 直播地址 |
| | | let airPortUrl = ref(''); |
| | | // 获取直播地址 |
| | | const getVideoUrl = () => { |
| | | liveStart(singleUavHome.value.device_sn).then(res => { |
| | | const getVideoUrl = (sn,quality) => { |
| | | liveStart(sn, quality).then(res => { |
| | | if (res.data.code !== 0) return; |
| | | airPortUrl.value = res.data.data.rtcs_url; |
| | | }); |
| | | }; |
| | | let isCurrentSn = ref(false); |
| | | let CurrentSn = ref(''); |
| | | // 监听ws消息 |
| | | watch( |
| | | () => store.state.home.deviceState.deviceInfo, |
| | | (newValue) => { |
| | | CurrentSn.value = Object.keys(newValue)[0]; |
| | | const currentDevice = newValue[CurrentSn.value]; |
| | | if (currentDevice.mode_code > 0) { |
| | | isCurrentSn.value = true; |
| | | } else if (currentDevice.mode_code === 14) { |
| | | isCurrentSn.value = false; |
| | | } else { |
| | | isCurrentSn.value = false; |
| | | } |
| | | }, |
| | | { |
| | | immediate: true, |
| | | deep: true, |
| | | } |
| | | ); |
| | | // 监听 isCurrentSn |
| | | watch(isCurrentSn, (newVal) => { |
| | | if (newVal) { |
| | | getVideoUrl(CurrentSn.value, 2); |
| | | } else { |
| | | getVideoUrl(singleUavHome.value.device_sn,1); |
| | | } |
| | | }, { immediate: true,deep: true }); |
| | | onMounted(() => { |
| | | getVideoUrl(); |
| | | getVideoUrl(singleUavHome.value.device_sn,1); |
| | | }); |
| | | </script> |
| | | |
| | |
| | | <div class="info"> |
| | | <img src="../../../../assets/images/signMachineNest/machineRight/wrj.png" alt=""> |
| | | <div class="info-right"> |
| | | <div class="name">{{ osdVisible?.callsign || '--' }}</div> |
| | | <!-- <div class="name">{{ osdVisible?.callsign || '--' }}</div> --> |
| | | <div class="name">{{ singleUavHome?.nickname || '--' }}</div> |
| | | <div class="wz"> |
| | | <span class="left">当前位置:</span> |
| | | <span class="right">{{ detailInfo.longitude }},{{ detailInfo.latitude }}</span> |
| | |
| | | const store = useStore(); |
| | | // 获取机巢信息 |
| | | let osdVisible = computed(() => store.state.home.osdVisible); |
| | | const singleUavHome = computed(() => store.state.home.singleUavHome); |
| | | // 单个机巢统计数据 |
| | | const singleTotal = computed(() => store.state.home.singleTotal); |
| | | // 是否展示机机巢状态详情 |
| | |
| | | (newValue) => { |
| | | if (newValue.mode_code === 14) return |
| | | if (Object.keys(newValue).length === 0) return |
| | | // console.log(newValue, '顶顶顶111') |
| | | detailInfo.value.longitude = newValue?.longitude.toFixed(6) || '--'; |
| | | detailInfo.value.latitude = newValue?.latitude.toFixed(6) || '--'; |
| | | getLnglatAltitude(Number(detailInfo.value.longitude), Number(detailInfo.value.latitude)).then((res) => { |
| | | console.log(res, '顶顶顶') |
| | | |
| | | getLnglatAltitude(Number(detailInfo.value.longitude), Number(detailInfo.value.latitude),window.$viewer).then((res) => { |
| | | // console.log('333333333', res); |
| | | const height = newValue?.height - res?.height; |
| | | //针对西安实时高度进行降低 |
| | | const wId = localStorage.getItem('bs_workspace_id'); |
| | |
| | | // 获取最新机场状态 |
| | | watch(store.state.home.deviceState, (newValue) => { |
| | | // if (data.currentSn !== osdVisible.gateway_sn) return; |
| | | if (newValue.currentType === EDeviceTypeName.Dock && newValue.dockInfo[newValue.currentSn]) { |
| | | if (newValue.currentType === EDeviceTypeName.Dock && newValue?.dockInfo[newValue.currentSn]) { |
| | | // 机场状态 |
| | | mode_code.value = EDockModeText[newValue.dockInfo[newValue.currentSn]?.basic_osd?.mode_code]; |
| | | mode_code.value = EDockModeText[newValue?.dockInfo[newValue.currentSn]?.basic_osd?.mode_code]; |
| | | // this.$emit('updateModeCode', mode_code.value); |
| | | // 舱内状态 |
| | | AircraftStatus.value = |
| | |
| | | ]?.mode_code |
| | | ]; |
| | | // 舱内关机时显示的电量 |
| | | let child_sn = newValue.dockInfo[newValue.currentSn].basic_osd.sub_device.device_sn; |
| | | let child_sn = newValue?.dockInfo[newValue.currentSn].basic_osd.sub_device.device_sn; |
| | | // 飞机在线时取飞机中的电量 |
| | | if(newValue.deviceInfo[child_sn]) { |
| | | drone_charge_state.value = { |
| | |
| | | font-size: 24px; |
| | | color: #0BE5F5; |
| | | line-height: 28px; |
| | | overflow: hidden; // 添加溢出隐藏 |
| | | text-overflow: ellipsis; // 显示省略号 |
| | | white-space: nowrap; // 不换行 |
| | | } |
| | | .wz { |
| | | font-family: Source Han Sans CN, Source Han Sans CN; |
| | |
| | | <!-- 机巢列表详情 --> |
| | | <template> |
| | | <el-dialog |
| | | class="machineTableDetails" |
| | | class="machineTableDetails ztzf-dialog" |
| | | v-model="isShowDetails" |
| | | :width="pxToRem(1500)" |
| | | :close-on-click-modal="false" |
| | | :destroy-on-close="true" |
| | | |
| | | > |
| | | <template #header="{ titleId, titleClass }"> |
| | | <div class="my-header"> |
| | |
| | | <div class="machineTableDetailsTitle"><span>详情</span></div> |
| | | <div class="infoBox"> |
| | | <div class="itemBox" v-for="(item, index) in infoList" :key="index"> |
| | | <div class="itemTitle">{{ item.name }} : </div> |
| | | <div class="itemTitle">{{ item.name }} :</div> |
| | | <div v-if="item.name == '任务成果'" class="missionOutcomes"> |
| | | <span>{{item.value ? item.value :0}}</span> |
| | | 个 |
| | | </div> |
| | | <div |
| | | v-if="item.name == '机巢状态'" |
| | | :class="{ |
| | | active: item.value === 'WORKING', |
| | | freetime: item.value === 'LEISURE', |
| | | offine: item.value === 'OFFLINE', |
| | | }" |
| | | v-if="item.name == '机巢状态'" |
| | | > |
| | | {{ item.value === 'OFFLINE' ? '离线中' : item.value === 'WORKING' ? '作业中' : '空闲中' }} |
| | | </div> |
| | | <div class="itemValue" v-else> {{ item.value }}</div> |
| | | <div class="itemValue" v-else>{{ item.value }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <DeviceJob v-if="isShowDetails" /> |
| | | <DeviceEvent v-if="isShowDetails" /> |
| | | </el-dialog> |
| | | |
| | | </template> |
| | | |
| | | <script setup> |
| | |
| | | |
| | | <style lang="scss"> |
| | | .machineTableDetails { |
| | | width: 1270px; |
| | | width: 1270px; |
| | | height: 856px; |
| | | background: #0f1929; |
| | | box-shadow: inset 0px -50px 50px 0px rgba(27, 148, 255, 0.13); |
| | | border-radius: 20px 0px 0px 0px; |
| | | border: 2px solid; |
| | | padding: 0 !important; |
| | | |
| | | border-image: linear-gradient( |
| | | 180deg, |
| | | rgba(81, 168, 255, 0), |
| | | rgba(48, 111, 202, 1), |
| | | rgba(255, 255, 255, 1), |
| | | rgba(27, 148, 255, 1) |
| | | ) |
| | | 2 2; |
| | | .el-pagination { |
| | | text-align: left; |
| | | padding: 20px 20px 0 20px; |
| | |
| | | vertical-align: middle; |
| | | margin-left: 12px; |
| | | } |
| | | |
| | | /* 头部 */ |
| | | .el-dialog__header { |
| | | width: 1270px; |
| | | height: 47px; |
| | | margin-bottom: 14px; |
| | | background: url('/src/assets/images/home/homeLeft/inspection-vector.png') no-repeat center; |
| | | background-size: 100% 100%; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | line-height: 47px; |
| | | } |
| | | |
| | | .el-dialog .el-dialog__header { |
| | | /* margin: 0px !important; */ |
| | | padding: 0px !important; |
| | | padding-left: 0px !important; |
| | | } |
| | | /* 头部 */ |
| | | .el-dialog__title { |
| | | width: 112px; |
| | | height: 19px; |
| | | font-family: Segoe UI, Segoe UI; |
| | | font-weight: bold; |
| | | font-size: 16px; |
| | | line-height: 16px; |
| | | text-shadow: 0px 0px 5px rgba(154, 218, 255, 0.6); |
| | | text-align: left; |
| | | font-style: normal; |
| | | text-transform: none; |
| | | background: linear-gradient(90deg, #fbfdff 0%, #86d4ff 100%); |
| | | margin-left: 16px; |
| | | -webkit-background-clip: text; /* 背景被裁剪成文字的前景色 */ |
| | | -webkit-text-fill-color: transparent; /* 文字填充颜色变透明 */ |
| | | } |
| | | } |
| | | </style> |
| | | |
| | | <style lang="scss" scoped> |
| | | |
| | | .infoBox { |
| | | display: flex; |
| | | justify-content: space-between; |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | .itemTitle { |
| | | margin-right: 5px; |
| | | margin-right: 5px; |
| | | } |
| | | } |
| | | |
| | |
| | | margin-bottom: 8px; |
| | | } |
| | | } |
| | | .missionOutcomes { |
| | | span { |
| | | color: #ffa500; |
| | | font-size: 14px; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | // 离线中 |
| | | .offine { |
| | | width: 53px; |
| | |
| | | break |
| | | } |
| | | case EBizCode.DeviceOsd: { |
| | | // console.log(payload, 'DeviceOsd') |
| | | store.commit('setDeviceInfo', payload) |
| | | store.commit('setWsMessage', payload) |
| | | break |
| | |
| | | getFlightStatistics(singleUavHome.value.device_sn).then(res => { |
| | | if (res.data.code !== 0) return; |
| | | const result = res.data.data; |
| | | console.log(result); |
| | | console.log(result); |
| | | store.commit('setSingleTotal', result); |
| | | }) |
| | | }; |