food/src/components/PlaneStatus.vue

153 lines
3.3 KiB
Vue
Raw Normal View History

2023-09-20 21:33:11 +08:00
<template>
<div class="mainBox flex ofh column no-select">
<!-- 心跳 -->
<div class="flex">
<div class="tag flex mac mc iconfont"
:class="online ? heartAnimation ? 'icon-heart online' : 'icon-heart1 online' : 'icon-xinsui offline'">
</div>
</div>
<!-- 锁定状态 -->
<div class="flex">
<div class="tag flex mac mc iconfont" :class="isLockState ? 'icon-suoding' : 'icon-jiesuo'">
</div>
</div>
<!-- 飞机模式 -->
<div class="flex">
<div class="tag flex mac mc iconfont icon-moshixuanze">
</div>
</div>
<!-- 卫星 -->
<div class="flex">
<div class="tag flex mac mc iconfont icon-weixing">
</div>
<!-- <div class=" tag flex mac mc f-s-16">
{{ satCount }}
</div> -->
</div>
<!-- 电池电压 -->
<div class="flex">
<div class="tag flex mac mc iconfont icon-dianya1">
</div>
</div>
<!-- 电池电流 -->
<div class="flex">
<div class="tag flex mac mc iconfont icon-dianliu">
</div>
</div>
<!-- 飞机高度 -->
<div class="flex">
<div class="tag flex mac mc iconfont icon-gaodu">
</div>
</div>
<!-- 飞机对地速度 -->
<div class="flex">
<div class="tag flex mac mc iconfont icon-sudu">
</div>
</div>
<!-- 钩子状态 1px solid #ddd-->
<div class="flex">
<div class="tag flex mac mc iconfont icon-mianxingdiaogou">
</div>
</div>
</div>
2023-09-20 21:33:11 +08:00
</template>
<script>
export default {
name: 'PlaneStatus',
data () {
return {
/* 心跳 */
heartAnimation: false, // 控制心跳动画图标
online: false,
isOnlineSetTimeout: null
2023-09-20 21:33:11 +08:00
}
},
props: {
plane: {
typeof: 'Object',
deep: true
}
},
2023-09-20 21:33:11 +08:00
components: {
},
computed: {
// 心跳随机数
heartRandom () {
if (this.plane && this.plane.planeState) {
return this.plane.planeState.heartRandom
}
return null
},
// 锁定状态
isLockState () {
if (this.plane && this.plane.planeState) {
if (Number(this.plane.planeState.heartBeat) & 128) {
return false
}
}
return true
},
// 卫星数
satCount () {
if (this.plane && this.plane.planeState) {
return this.plane.planeState.satCount
}
return 0
}
2023-09-20 21:33:11 +08:00
},
watch: {
heartRandom: {
handler (val) {
// 心跳动画
this.heartAnimation = true
setTimeout(() => {
this.heartAnimation = false
}, 500)
// 在线状态
if (this.isOnlineSetTimeout) { // 进入本次心跳 删除掉线计时 既以下会重新计时
clearInterval(this.isOnlineSetTimeout)
}
this.online = true
this.isOnlineSetTimeout = setTimeout(() => { // 计时10秒后 掉线
this.online = false
}, 10000)
}
}
2023-09-20 21:33:11 +08:00
},
methods: {},
created () {
2023-09-20 21:33:11 +08:00
}
}
</script>
<style lang="scss" scoped>
@import "@/styles/theme.scss";
.mainBox {
position: absolute;
top: 12px;
left: 12px;
z-index: 90;
box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
border-radius: 4px;
}
.mainBox .flex:not(:first-child) {
border-top: 1px solid #ddd;
}
.tag {
height: 29px;
min-width: 29px;
background-color: white;
cursor: pointer;
border: 0;
overflow: hidden;
font-size: 22px;
}
2023-09-20 21:33:11 +08:00
</style>