阶段性代码提交

This commit is contained in:
WORK\64751 2025-08-23 08:37:11 +08:00
parent b525eaccbe
commit 992f4ad1ec
5 changed files with 199 additions and 35 deletions

View File

@ -41,7 +41,7 @@ if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
id_token:
'eyJraWQiOiI3M2I5NTI0Ni02NjI2LTQ3N2YtYWFmYS1kMDJiODFhNjFkZmYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJjc2FkbWluIiwiYXVkIjoidHVvaGVuZy1haXJwb3J0LWFkbWluIiwicm9sZSI6WyJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tbXAiLCJ0dW9oZW5nLXBpbG90LW1wIiwidHVvaGVuZy13YXRlcndheS1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLW1wIiwidHVvaGVuZy1haXJwb3J0U2NyZWVuLWFkbWluIiwidHVvaGVuZy1kbXAtbXAiLCJ0dW9oZW5nLWZseXBvcnRhbC1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLWFkbWluIiwidHVvaGVuZy1oaHotYWRtaW4iLCJ0dW9oZW5nLWhoei1tcCIsInR1b2hlbmctZnJlZXdheS1hZG1pbiIsInR1b2hlbmctd2VwdHNwLW1wIiwidHVvaGVuZy1waWxvdC1hZG1pbiIsInR1b2hlbmctc3BhY2V0aW1lLWFkbWluIiwidHVvaGVuZy1hbGVydC1tcCIsInR1b2hlbmctYnVzaW5lc3MtYWRtaW4iLCJ0dW9oZW5nLWJ1c2luZXNzLW1wIiwidHVvaGVuZy13ZXB0c3AtYWRtaW4iLCJ0dW9oZW5nLWFpcm1vbml0b3ItbXAiLCJ0dW9oZW5nLWFpcnBvcnQtbXAiLCJ0dW9oZW5nLWFpcm1vbml0b3ItYWRtaW4iLCJ0dW9oZW5nLWFsZXJ0LWFkbWluIiwidHVvaGVuZy1haXJwb3J0LWFkbWluIiwidHVvaGVuZy13YXRlcndheS1tcCIsInR1b2hlbmctZnJlZXdheS1tcCIsInR1b2hlbmctZG1wLWFkbWluIiwidHVvaGVuZy1zcGFjZXRpbWUtbXAiXSwiYXpwIjoidHVvaGVuZy1haXJwb3J0LWFkbWluIiwiaXNzIjoiaHR0cHM6XC9cL2xvZ2luLXRlc3QudC1hYXJvbi5jb20iLCJleHAiOjE3NTUwNzA3MjMsImlhdCI6MTc1NTA2ODkyM30.deCJZsyu2dgLrbl-rnnoYTBhZD59zUJoLzFkadL7m_RJ_jWlvQvLXjQn2h0tuba0HRN7ZT2COVmNxTgLLATbdJU2SQ-_wVt30XwyX1hauDV1DALzdk5UiRelP2lIJlPWZKhpqMX52gYsGZXyliErbORBLMc_920vTZDHKeuiriuODXlT7__5MnKFTCGXDegZRPALY7kLwpQfL4DSn3ILeSGMIqU7dPx3kM4CV1iIJs2f2jEZT4HOzXy51o_GjCW7enY2qWERRfvsLIX8a8DPg0YvN-j3AHoUoKWYX_1ZCmD3eGHhqQbEvZsLJV2J6MlwF6eZOkz08M-mdkyU2_Trpg',
access_token:
'eyJraWQiOiI3M2I5NTI0Ni02NjI2LTQ3N2YtYWFmYS1kMDJiODFhNjFkZmYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJjc2FkbWluIiwiaXNBYmxlIjoxLCJpc3MiOiJodHRwczpcL1wvbG9naW4tdGVzdC50LWFhcm9uLmNvbSIsImF1ZCI6InR1b2hlbmctYWlycG9ydC1hZG1pbiIsIm5iZiI6MTc1NTc1OTQyNSwib1VzZXJJZCI6NTQzLCJzY29wZSI6WyJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tbXAiLCJ0dW9oZW5nLXBpbG90LW1wIiwidHVvaGVuZy13YXRlcndheS1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLW1wIiwidHVvaGVuZy1haXJwb3J0U2NyZWVuLWFkbWluIiwidHVvaGVuZy1kbXAtbXAiLCJ0dW9oZW5nLWZseXBvcnRhbC1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLWFkbWluIiwidHVvaGVuZy1oaHotYWRtaW4iLCJ0dW9oZW5nLWhoei1tcCIsInR1b2hlbmctZnJlZXdheS1hZG1pbiIsInR1b2hlbmctd2VwdHNwLW1wIiwidHVvaGVuZy1waWxvdC1hZG1pbiIsInR1b2hlbmctc3BhY2V0aW1lLWFkbWluIiwidHVvaGVuZy1hbGVydC1tcCIsInR1b2hlbmctYnVzaW5lc3MtYWRtaW4iLCJ0dW9oZW5nLWJ1c2luZXNzLW1wIiwidHVvaGVuZy13ZXB0c3AtYWRtaW4iLCJ0dW9oZW5nLWFpcm1vbml0b3ItbXAiLCJ0dW9oZW5nLWFpcnBvcnQtbXAiLCJ0dW9oZW5nLWFpcm1vbml0b3ItYWRtaW4iLCJ0dW9oZW5nLWFsZXJ0LWFkbWluIiwidHVvaGVuZy1haXJwb3J0LWFkbWluIiwidHVvaGVuZy13YXRlcndheS1tcCIsInR1b2hlbmctZnJlZXdheS1tcCIsInR1b2hlbmctZG1wLWFkbWluIiwidHVvaGVuZy1zcGFjZXRpbWUtbXAiXSwiY2xpZW50Um9sZUxpc3QiOiJbe1wiY2xpZW50SWRcIjpcInR1b2hlbmctZmx5cG9ydGFsLWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1idXNpbmVzcy1tcFwiLFwicm9sZUlkXCI6MTE0NX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYnVzaW5lc3MtYWRtaW5cIixcInJvbGVJZFwiOjExNDV9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXNwYWNldGltZS1hZG1pblwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctc3BhY2V0aW1lLW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1oaHotYWRtaW5cIixcInJvbGVJZFwiOjEwMDN9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWhoei1tcFwiLFwicm9sZUlkXCI6MTAwM30se1wiY2xpZW50SWRcIjpcInR1b2hlbmctd2F0ZXJ3YXktYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXdhdGVyd2F5LW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1kbXAtYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWRtcC1tcFwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYWlycG9ydC1hZG1pblwiLFwicm9sZUlkXCI6NjYzfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJwb3J0LW1wXCIsXCJyb2xlSWRcIjo2NjN9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWFsZXJ0LWFkbWluXCIsXCJyb2xlSWRcIjoyN30se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYWxlcnQtbXBcIixcInJvbGVJZFwiOjI3fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJtb25pdG9yLWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJtb25pdG9yLW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy13ZXB0c3AtYWRtaW5cIixcInJvbGVJZFwiOjI1fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy13ZXB0c3AtbXBcIixcInJvbGVJZFwiOjI1fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy10ZWxlY29tdW1hbGUtYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXRlbGVjb211bWFsZS1tcFwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctcGlsb3QtbXBcIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXBpbG90LWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1mcmVld2F5LW1wXCIsXCJyb2xlSWRcIjo1OH0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctZnJlZXdheS1hZG1pblwiLFwicm9sZUlkXCI6NTh9XSIsImV4cCI6MTc1NTg0NTgyNSwiaXNFeHBpcmUiOjEsImlhdCI6MTc1NTc1OTQyNSwidXNlcm5hbWUiOiJjc2FkbWluIn0.AWMLWQODIm82pet6D6e_jtb--CbKMXFLZPUmvIIP18Ezk5r-rA4ZT37mC5ZZgP3p9I792ulk-Xg-fpbC4Gm6d4TmDUHwZztLXc_sTH0XOHqblNy_G6rjV1UZKex9hOKpGYH3eXxZVjUTfjcp9tbs5w5DkxzYu-hdpeVr4JUYasqVVFOZIEhOML0kBgA85P-RjK0kH1hMbyI1mRqV1t5Mnyqhd2pmybqmWDnh-ohq5JiYaquxZ2jROappWvg11gOGZ2PWptDH9pfqLMt07Td1sZOstLKNrq6fpfeJNuJ43YHcQHy6fkoM8Wf9N7Nxpv_qydfrW_9cjqwDgAgvkgf0kA',
'eyJraWQiOiI3M2I5NTI0Ni02NjI2LTQ3N2YtYWFmYS1kMDJiODFhNjFkZmYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJjc2FkbWluIiwiaXNBYmxlIjoxLCJpc3MiOiJodHRwczpcL1wvbG9naW4tdGVzdC50LWFhcm9uLmNvbSIsImF1ZCI6InR1b2hlbmctYWlycG9ydC1hZG1pbiIsIm5iZiI6MTc1NTg0MDUzNSwib1VzZXJJZCI6NTQzLCJzY29wZSI6WyJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tbXAiLCJ0dW9oZW5nLXBpbG90LW1wIiwidHVvaGVuZy13YXRlcndheS1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLW1wIiwidHVvaGVuZy1haXJwb3J0U2NyZWVuLWFkbWluIiwidHVvaGVuZy1kbXAtbXAiLCJ0dW9oZW5nLWZseXBvcnRhbC1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLWFkbWluIiwidHVvaGVuZy1oaHotYWRtaW4iLCJ0dW9oZW5nLWhoei1tcCIsInR1b2hlbmctZnJlZXdheS1hZG1pbiIsInR1b2hlbmctd2VwdHNwLW1wIiwidHVvaGVuZy1waWxvdC1hZG1pbiIsInR1b2hlbmctc3BhY2V0aW1lLWFkbWluIiwidHVvaGVuZy1hbGVydC1tcCIsInR1b2hlbmctYnVzaW5lc3MtYWRtaW4iLCJ0dW9oZW5nLWJ1c2luZXNzLW1wIiwidHVvaGVuZy13ZXB0c3AtYWRtaW4iLCJ0dW9oZW5nLWFpcm1vbml0b3ItbXAiLCJ0dW9oZW5nLWFpcnBvcnQtbXAiLCJ0dW9oZW5nLWFpcm1vbml0b3ItYWRtaW4iLCJ0dW9oZW5nLWFsZXJ0LWFkbWluIiwidHVvaGVuZy1haXJwb3J0LWFkbWluIiwidHVvaGVuZy13YXRlcndheS1tcCIsInR1b2hlbmctZnJlZXdheS1tcCIsInR1b2hlbmctZG1wLWFkbWluIiwidHVvaGVuZy1zcGFjZXRpbWUtbXAiXSwiY2xpZW50Um9sZUxpc3QiOiJbe1wiY2xpZW50SWRcIjpcInR1b2hlbmctZmx5cG9ydGFsLWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1idXNpbmVzcy1tcFwiLFwicm9sZUlkXCI6MTE0NX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYnVzaW5lc3MtYWRtaW5cIixcInJvbGVJZFwiOjExNDV9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXNwYWNldGltZS1hZG1pblwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctc3BhY2V0aW1lLW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1oaHotYWRtaW5cIixcInJvbGVJZFwiOjEwMDN9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWhoei1tcFwiLFwicm9sZUlkXCI6MTAwM30se1wiY2xpZW50SWRcIjpcInR1b2hlbmctd2F0ZXJ3YXktYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXdhdGVyd2F5LW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1kbXAtYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWRtcC1tcFwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYWlycG9ydC1hZG1pblwiLFwicm9sZUlkXCI6NjYzfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJwb3J0LW1wXCIsXCJyb2xlSWRcIjo2NjN9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWFsZXJ0LWFkbWluXCIsXCJyb2xlSWRcIjoyN30se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYWxlcnQtbXBcIixcInJvbGVJZFwiOjI3fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJtb25pdG9yLWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJtb25pdG9yLW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy13ZXB0c3AtYWRtaW5cIixcInJvbGVJZFwiOjI1fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy13ZXB0c3AtbXBcIixcInJvbGVJZFwiOjI1fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy10ZWxlY29tdW1hbGUtYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXRlbGVjb211bWFsZS1tcFwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctcGlsb3QtbXBcIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXBpbG90LWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1mcmVld2F5LW1wXCIsXCJyb2xlSWRcIjo1OH0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctZnJlZXdheS1hZG1pblwiLFwicm9sZUlkXCI6NTh9XSIsImV4cCI6MTc1NTkyNjkzNSwiaXNFeHBpcmUiOjEsImlhdCI6MTc1NTg0MDUzNSwidXNlcm5hbWUiOiJjc2FkbWluIn0.CdmV7EymvXhrsCegeAagGffF6BOvFeWIMr-93I2Oa2ZiOB8rcNKOhR9ZsvzTeUFq0S9RXWX4lg8LEO7ymCA0IESumX0KOYAVOF15_xmXHxLiFRaL9L_6KdH0YDp7wA2vCpmiAxNBdUBUW3pfgzXI3mRjOBcH5L26ZLBP0Me0RcPOHGEwtNaFD3JMBhVj6DCiI2koM8oB4TXVEbPMAk19C_mK6tCkTXo_oRMdKHRXmgKOwA4mbggjwgce9-YsAsAkoYl0uO2Z4l6UCWRrmr5_5bCFhokmmoKBKhH84HU6azncJFY3_2StB_bBRPq2y9RWAt4RukRR-kE545N_rriNvg',
refresh_token:
'HNyAXnoDhR2kgjXUSVwqMldvgzazvaY3tVlCodSiDon7fA7P8Ci3BMsnk31cjeSKwcbsPzUaMdCdBilBhSqQ1dZLk-Md-ERqh5mbbeu7rJDWX4MexO0eKtRBwz-mbnbR',
token_type: 'Bearer',

View File

@ -1,7 +1,31 @@
<script setup>
//
import { ref, h, defineAsyncComponent, onMounted, watch, toRaw, defineProps, reactive } from 'vue'
import {
ref,
h,
defineAsyncComponent,
onMounted,
onUnmounted,
watch,
toRaw,
defineProps,
reactive,
} from 'vue'
import { LoadingOutlined } from '@ant-design/icons-vue'
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)
const indicator = h(LoadingOutlined, {
style: {
fontSize: '20px',
@ -9,39 +33,124 @@ const indicator = h(LoadingOutlined, {
},
spin: true,
})
//
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)
})
</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>
<a-spin :indicator="indicator" />
<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" />
</div>
<a-progress :percent="50" :show-info="false" trailColor="#ffffff" />
<a-progress :percent="precent" :show-info="false" trailColor="#ffffff" />
<div class="flex flex-row items-center justify-between text-sm">
<span>
<span class="text-[#ffffff]">耗时:</span>
<span class="text-[#3BA3FB] ml-2">10s</span>
<span class="text-[#3BA3FB] ml-2">{{ checkTimeNum }}</span>
</span>
<span>
<span class="text-[#ffffff]">起飞前准备中 预计还剩:</span>
<span class="text-[#FFA800] ml-2">50s</span>
<span class="text-[#ffffff]">{{ processTitle }}</span>
<!-- <span class="text-[#FFA800] ml-2">50s</span> -->
</span>
</div>
<div
class="w-full lg:h-[211px] xk:h-[211px] x1k:h-[296px] x2k:h-[394px] mt-6 p-3 border border-[#394C73] rounded-bl-md rounded-br-md"
v-if="processInfoList.length > 0"
class="w-full mt-6 py-3 px-1 border border-[#394C73] rounded-bl-md rounded-br-md"
>
<div class="w-full flex flex-row items-center">
<span class="iconfont icon-biaoqian text-[#ffffff] opacity-50 mr-5"></span>
<span class="text-[#FFA800] text-sm mr-5">15:30:20</span>
<span class="text-[#ffffff] text-sm mr-5">机场完成自检</span>
<span class="text-[#ffffff] text-sm">总共耗时19s</span>
<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
>
</div>
</div>
</div>
</template>
<style lang="less" scoped></style>
<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>

View File

@ -19,8 +19,8 @@ const airPortSocketStore = useAirPortSocketStore()
let size1Img = ref(new URL(`@/assets/icons/size1active.png`, import.meta.url).href)
let size2Img = ref(new URL(`@/assets/icons/size2.png`, import.meta.url).href)
let viewMode = ref(1) //1-1/4 2-
let littleViewMode = ref(2) //1- 2- 3-
let littleViewModeName = ref('舱画面')
let littleViewMode = ref(1) //1- 2- 3-
let littleViewModeName = ref('舱画面')
let planeStateList = ref([
{
id: 1,
@ -165,9 +165,12 @@ airPortSocketStore.$subscribe((mutate, state) => {
</p>
</div>
</div>
<div class="w-[250px] h-full bg-[#bdbdbd] ml-2.5 px-2 py-1 rounded relative">
<div id="#plane_small_video_area" class="w-full h-full absolute left-0 top-0"></div>
<div class="w-full flex flex-row justify-between items-center">
<div
class="w-[250px] aspect-video h-full bg-[#bdbdbd] ml-2.5 px-2 py-1 rounded relative overflow-hidden"
>
<!-- 视频播放区域 -->
<div id="plane_small_video_area" class="w-full h-full absolute left-0 top-0"></div>
<div class="px-2 absolute left-0 w-full flex flex-row justify-around items-center">
<div class="w-full flex flex-row">
<div
class="size-7 p-0.5 rounded-sm cursor-pointer"
@ -175,7 +178,7 @@ airPortSocketStore.$subscribe((mutate, state) => {
@click="switchPlaneVideo(1)"
>
<div class="w-full h-1"></div>
<div class="bg-[rgba(255,255,255,0.3)] w-full h-5 text-center text-[#fff]">
<div class="bg-[rgba(255,255,255,0.4)] w-full h-5 text-center text-[#fff]">
<span
class="iconfont icon-cangnei_xianxing text-[24px]/6"
:class="littleViewMode == 1 ? 'opacity-100' : 'opacity-60'"
@ -188,7 +191,7 @@ airPortSocketStore.$subscribe((mutate, state) => {
@click="switchPlaneVideo(2)"
>
<div class="w-full h-1"></div>
<div class="bg-[rgba(255,255,255,0.3)] w-full h-5 text-center text-[#fff]">
<div class="bg-[rgba(255,255,255,0.4)] w-full h-5 text-center text-[#fff]">
<span
class="iconfont icon-shexiangtou text-[18px]/6"
:class="littleViewMode == 2 ? 'opacity-100' : 'opacity-60'"
@ -201,7 +204,7 @@ airPortSocketStore.$subscribe((mutate, state) => {
@click="switchPlaneVideo(3)"
>
<div class="w-full h-1"></div>
<div class="bg-[rgba(255,255,255,0.3)] w-full h-5 text-center text-[#fff]">
<div class="bg-[rgba(255,255,255,0.4)] w-full h-5 text-center text-[#fff]">
<span
class="iconfont icon-uav-fill text-[18px]/6"
:class="littleViewMode == 3 ? 'opacity-100' : 'opacity-60'"

View File

@ -51,7 +51,7 @@ const switchScreen = (type) => {
watch(
() => props.row,
(val) => {
console.log('来值了呢')
// console.log('')
// console.log(val)
// LiveOptions_out.videoUrl = val.external_monitor_url
// LiveOptions_in.videoUrl = val.internal_monitor_url

View File

@ -99,24 +99,26 @@ const switchViewFn = (viewPrecent) => {
rightPlaneWidth.value = '50%'
}
}
//
//线
const queryAirLine_AirPort = async () => {
let params = {
airportId: 67,
airportId: 67, //67 1011
}
let res = await Promise.allSettled([queryAirportApi(params), queryAirLineApi(params)])
// console.log(res)
if (res[0].value.code == 0) {
//
currentAirPortInfo.value = res[0].value.data[0]
// console.log(currentAirPortInfo.value)
//
currentAirPortStatus.value = Number(currentAirPortInfo.value.status)
console.log('现在的状态是:', currentAirPortStatus.value)
if (Number(currentAirPortStatus.value) == 2) {
//
rightPlaneHeight.value = 'calc(100% - 150px)'
rightPlaneBottom.value = '150px'
//
map_teleport.value = '#left_flying_map'
}
//
@ -128,7 +130,6 @@ const queryAirLine_AirPort = async () => {
showLiveVideo.value = true
//socket
// console.log(currentAirPortInfo.value)
if (!isUsedSocket.value) {
let data = {
id: currentAirPortInfo.value.id,
@ -161,7 +162,46 @@ const queryAirLine_AirPort = async () => {
//6
setTimeout(() => {
queryAirLine_AirPort()
queryAirPort()
}, 6000)
}
//
const queryAirPort = async () => {
let params = {
airportId: 67,
}
let res = await queryAirportApi(params)
if (res.code == 0) {
currentAirPortInfo.value = res.data[0]
// console.log(currentAirPortInfo.value)
//
currentAirPortStatus.value = Number(currentAirPortInfo.value.status)
// currentAirPortStatus.value = 2
console.log('现在的状态是:', currentAirPortStatus.value)
if (currentAirPortStatus.value == 2) {
//
rightPlaneHeight.value = 'calc(100% - 150px)'
rightPlaneBottom.value = '150px'
setTimeout(() => {
//
map_teleport.value = '#left_flying_map'
//
outVideo_teleport.value = '#plane_small_video_area'
}, 50)
}
//
LiveOptions_out.videoUrl = currentAirPortInfo.value.external_monitor_url
LiveOptions_in.videoUrl = currentAirPortInfo.value.internal_monitor_url
LiveOptions_plane.videoUrl = currentAirPortInfo.value.camera_url
}
//
setTimeout(() => {
queryAirPort()
}, 6000)
}
@ -260,7 +300,7 @@ onMounted(() => {
</script>
<template>
<div class="flex flex-col w-full h-full min-w-[1366px] bg-[#0B2038]">
<div class="flex flex-col w-full h-full min-w-[1366px] bg-[#0B2038] overflow-hidden">
<!-- 顶部 -->
<div
class="rem-header w-full px-3.5 flex flex-row items-center justify-between lg:h-[36px] xk:h-[36px] x1k:h-[50px] x2k:h-[66px]"
@ -282,7 +322,7 @@ onMounted(() => {
<!-- 底部 -->
<div class="rem-bottom-area w-full flex flex-1 flex-row relative">
<!-- 左侧面板 -->
<div class="leftPlane h-full bg-[#0B2038] rounded-r-lg absolute left-0 z-[2]">
<div class="leftPlane h-full bg-[#0A1A2C] rounded-r-lg absolute left-0 z-[2]">
<!-- 航线选择面板-先不做 -->
<!-- <leftPlaneAirLine @modifPlaneWidth="modifPlaneWidthFn" /> -->
@ -294,13 +334,16 @@ onMounted(() => {
/>
<!-- 自检面板 准备中-->
<leftPlaneCheck v-if="currentAirPortStatus == 3" />
<leftPlaneCheck v-if="currentAirPortStatus == 3" :row="currentAirPortInfo" />
<!-- 飞行中 地图 -->
<div id="left_flying_map" class="leftPlane-area w-full"></div>
</div>
<!-- 右侧面板 -->
<div class="rightPlane absolute right-0 h-full bg-[#ffffff] z-1">
<rightSwitchVideo class="absolute right-3 top-3" />
<div class="fullScreen w-3/4 absolute right-0">
<div class="fullScreen w-full absolute right-0">
<!-- <div class="w-full h-10 absolute right-0 bottom-[20px]">
<planeControl class="absolute left-0 right-0 top-0 bottom-0 m-auto" />
</div> -->
@ -310,6 +353,7 @@ onMounted(() => {
</div>
</div>
<!-- 底部面板 -->
<div
v-if="currentAirPortStatus == 2"
class="bottomPlane w-full lg:h-[150px] xk:h-[150px] x1k:h-[212px] x2k:h-[282px] bg-[#0B2038] absolute bottom-0 left-0 z-[3]"
@ -320,7 +364,11 @@ onMounted(() => {
</div>
<!-- 直播播放器 -->
<teleport :to="outVideo_teleport" v-if="showLiveVideo && currentAirPortStatus == 1">
<!-- 舱外视频 -->
<teleport
:to="outVideo_teleport"
v-if="showLiveVideo && (currentAirPortStatus == 1 || currentAirPortStatus == 2)"
>
<LivePlayer
class="h-full absolute left-0 right-0 top-0 right-0 m-auto"
v-show="showLiveVideo && LiveOptions_out.videoUrl?.includes('.flv')"
@ -328,6 +376,7 @@ onMounted(() => {
:options="LiveOptions_out"
/>
</teleport>
<!-- 舱内视频 -->
<teleport :to="inVideo_teleport" v-if="showLiveVideo && currentAirPortStatus == 1">
<LivePlayer
class="h-full absolute left-0 right-0 top-0 right-0 m-auto"
@ -337,14 +386,14 @@ onMounted(() => {
/>
</teleport>
<!-- 无人机视角 -->
<teleport :to="planeVideo_teleport" v-if="showLiveVideo && currentAirPortStatus == 2">
<!-- <teleport :to="planeVideo_teleport" v-if="showLiveVideo && currentAirPortStatus == 2">
<LivePlayer
class="h-full absolute left-0 right-0 top-0 right-0 m-auto"
v-show="showLiveVideo && LiveOptions_plane.videoUrl?.includes('.flv')"
ref="planelivePlayerRef"
:options="LiveOptions_in"
/>
</teleport>
</teleport> -->
<!-- map -->
<teleport :to="map_teleport">
<iframe
@ -379,6 +428,9 @@ onMounted(() => {
--leftPlaneWidth: v-bind(leftPlaneWidth);
width: var(--leftPlaneWidth);
}
.leftPlane-area {
height: calc(100% - 150px);
}
.rightPlane {
--rightPlaneWidth: v-bind(rightPlaneWidth);
width: var(--rightPlaneWidth);