tuoheng_virtualAirPlan_web/src/views/carbin/components/beforeCheck.vue

157 lines
4.0 KiB
Vue
Raw Normal View History

2025-08-22 09:43:16 +08:00
<script setup>
//飞行前的检查面板
2025-08-23 08:37:11 +08:00
import {
ref,
h,
defineAsyncComponent,
onMounted,
onUnmounted,
watch,
toRaw,
defineProps,
reactive,
} from 'vue'
2025-08-22 09:43:16 +08:00
import { LoadingOutlined } from '@ant-design/icons-vue'
2025-08-23 08:37:11 +08:00
import { beforeCheckApi } from '@/apis/common'
const props = defineProps({
row: Object, //当前数据
})
let isChecked = ref(false)
let checkTime = null
let checkTimeNum = ref(0) //花费的检测时间
let checkTimeNum_timeout = null
let processInfoList = ref([]) //进度列表
let processTitle = ref('')
let processStatus = ref(null)
let precent = ref(0)
2025-08-22 09:43:16 +08:00
const indicator = h(LoadingOutlined, {
style: {
fontSize: '20px',
color: '#ffffff',
},
spin: true,
})
2025-08-23 08:37:11 +08:00
//开始计时
const startTimeFn = () => {
checkTimeNum.value++
checkTimeNum_timeout = setTimeout(() => {
startTimeFn()
}, 1000)
}
//自检请求
const checkFn = async (row) => {
if (row) {
// console.log(row)
// console.log(row.id)
let params = {
airportId: row.id,
taskId: row.task[0].id,
// taskId: 4454,
}
let res = await beforeCheckApi(params)
if (res.code == 0) {
processInfoList = res.data.steps
//总共花费的时间
checkTimeNum.value = res.data.elapsedTime
processTitle.value = res.data.description
processStatus.value = res.data.status
precent.value = res.data.progressPercentage
// console.log(processStatus.value)
// console.log(res.data)
if (processStatus.value != null) {
clearTimeout(checkTime)
return
}
checkTime = setTimeout(() => {
checkFn(row)
}, 1000)
}
}
}
watch(
() => props.row,
(val) => {
if (val.task.length > 0 && !isChecked.value) {
if (val.task[0].id) {
//自检请求
checkFn(val)
//watch里面不再执行此操作
isChecked.value = true
}
}
},
{ deep: true },
)
onMounted(() => {})
onUnmounted(() => {
clearTimeout(checkTime)
// clearTimeout(checkTimeNum_timeout)
})
2025-08-22 09:43:16 +08:00
</script>
<template>
<div class="p-2.5">
<div class="flex flex-row items-center justify-between mt-4">
<span class="text-[18px] text-[#ffffff] font-medium">TAKEOFF PREPARING</span>
2025-08-23 08:37:11 +08:00
<span v-if="processStatus == 'success'" class="success_text">SUCCESS</span>
<span v-if="processStatus == 'error'" class="fail_text">FAILED</span>
<a-spin :indicator="indicator" v-if="processStatus == null" />
2025-08-22 09:43:16 +08:00
</div>
2025-08-23 08:37:11 +08:00
<a-progress :percent="precent" :show-info="false" trailColor="#ffffff" />
2025-08-22 09:43:16 +08:00
<div class="flex flex-row items-center justify-between text-sm">
<span>
<span class="text-[#ffffff]">耗时:</span>
2025-08-23 08:37:11 +08:00
<span class="text-[#3BA3FB] ml-2">{{ checkTimeNum }}</span>
2025-08-22 09:43:16 +08:00
</span>
<span>
2025-08-23 08:37:11 +08:00
<span class="text-[#ffffff]">{{ processTitle }}</span>
<!-- <span class="text-[#FFA800] ml-2">50s</span> -->
2025-08-22 09:43:16 +08:00
</span>
</div>
<div
2025-08-23 08:37:11 +08:00
v-if="processInfoList.length > 0"
class="w-full mt-6 py-3 px-1 border border-[#394C73] rounded-bl-md rounded-br-md"
2025-08-22 09:43:16 +08:00
>
2025-08-23 08:37:11 +08:00
<div
class="w-full grid grid-cols-10 gap-0"
v-for="(item, index) in processInfoList"
:key="index"
>
<span class="iconfont icon-biaoqian text-[#ffffff] opacity-50 col-span-1 leading-5"></span>
<span class="text-[#FFA800] text-xs col-span-2">{{ item.time }}</span>
<span class="text-[#ffffff] text-xs col-span-5">{{ item.description }}</span>
<span class="text-[#ffffff] text-xs col-span-2 text-right" v-if="item.diffSeconds != ''"
>耗时{{ item.diffSeconds }}</span
>
2025-08-22 09:43:16 +08:00
</div>
</div>
</div>
</template>
2025-08-23 08:37:11 +08:00
<style lang="less" scoped>
.success_text {
font-weight: 500;
color: #3ba3fb;
background: linear-gradient(0deg, #5d8ad2 0%, #50d890 0%, #70da78 56.0791015625%, #a4e567 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.fail_text {
font-weight: 500;
color: #ffffff;
background: linear-gradient(0deg, #de4747 0%, #f12626 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
</style>