阶段性代码提交

This commit is contained in:
WORK\64751 2025-08-23 15:55:06 +08:00
parent 992f4ad1ec
commit 3dd94338c0
8 changed files with 213 additions and 94 deletions

View File

@ -55,6 +55,10 @@ body {
background: linear-gradient(0deg, #0143f4, #0195fa);
color: #fff !important;
}
.ant-menu-item-selected {
background: linear-gradient(0deg, #3b6fff, #62c0ff);
color: #fff !important;
}
}
.blueToolTip {
.ant-tooltip-inner {

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.eyJzdWIiOiJjc2FkbWluIiwiaXNBYmxlIjoxLCJpc3MiOiJodHRwczpcL1wvbG9naW4tdGVzdC50LWFhcm9uLmNvbSIsImF1ZCI6InR1b2hlbmctYWlycG9ydC1hZG1pbiIsIm5iZiI6MTc1NTg0MDUzNSwib1VzZXJJZCI6NTQzLCJzY29wZSI6WyJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tbXAiLCJ0dW9oZW5nLXBpbG90LW1wIiwidHVvaGVuZy13YXRlcndheS1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLW1wIiwidHVvaGVuZy1haXJwb3J0U2NyZWVuLWFkbWluIiwidHVvaGVuZy1kbXAtbXAiLCJ0dW9oZW5nLWZseXBvcnRhbC1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLWFkbWluIiwidHVvaGVuZy1oaHotYWRtaW4iLCJ0dW9oZW5nLWhoei1tcCIsInR1b2hlbmctZnJlZXdheS1hZG1pbiIsInR1b2hlbmctd2VwdHNwLW1wIiwidHVvaGVuZy1waWxvdC1hZG1pbiIsInR1b2hlbmctc3BhY2V0aW1lLWFkbWluIiwidHVvaGVuZy1hbGVydC1tcCIsInR1b2hlbmctYnVzaW5lc3MtYWRtaW4iLCJ0dW9oZW5nLWJ1c2luZXNzLW1wIiwidHVvaGVuZy13ZXB0c3AtYWRtaW4iLCJ0dW9oZW5nLWFpcm1vbml0b3ItbXAiLCJ0dW9oZW5nLWFpcnBvcnQtbXAiLCJ0dW9oZW5nLWFpcm1vbml0b3ItYWRtaW4iLCJ0dW9oZW5nLWFsZXJ0LWFkbWluIiwidHVvaGVuZy1haXJwb3J0LWFkbWluIiwidHVvaGVuZy13YXRlcndheS1tcCIsInR1b2hlbmctZnJlZXdheS1tcCIsInR1b2hlbmctZG1wLWFkbWluIiwidHVvaGVuZy1zcGFjZXRpbWUtbXAiXSwiY2xpZW50Um9sZUxpc3QiOiJbe1wiY2xpZW50SWRcIjpcInR1b2hlbmctZmx5cG9ydGFsLWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1idXNpbmVzcy1tcFwiLFwicm9sZUlkXCI6MTE0NX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYnVzaW5lc3MtYWRtaW5cIixcInJvbGVJZFwiOjExNDV9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXNwYWNldGltZS1hZG1pblwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctc3BhY2V0aW1lLW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1oaHotYWRtaW5cIixcInJvbGVJZFwiOjEwMDN9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWhoei1tcFwiLFwicm9sZUlkXCI6MTAwM30se1wiY2xpZW50SWRcIjpcInR1b2hlbmctd2F0ZXJ3YXktYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXdhdGVyd2F5LW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1kbXAtYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWRtcC1tcFwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYWlycG9ydC1hZG1pblwiLFwicm9sZUlkXCI6NjYzfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJwb3J0LW1wXCIsXCJyb2xlSWRcIjo2NjN9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWFsZXJ0LWFkbWluXCIsXCJyb2xlSWRcIjoyN30se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYWxlcnQtbXBcIixcInJvbGVJZFwiOjI3fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJtb25pdG9yLWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJtb25pdG9yLW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy13ZXB0c3AtYWRtaW5cIixcInJvbGVJZFwiOjI1fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy13ZXB0c3AtbXBcIixcInJvbGVJZFwiOjI1fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy10ZWxlY29tdW1hbGUtYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXRlbGVjb211bWFsZS1tcFwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctcGlsb3QtbXBcIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXBpbG90LWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1mcmVld2F5LW1wXCIsXCJyb2xlSWRcIjo1OH0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctZnJlZXdheS1hZG1pblwiLFwicm9sZUlkXCI6NTh9XSIsImV4cCI6MTc1NTkyNjkzNSwiaXNFeHBpcmUiOjEsImlhdCI6MTc1NTg0MDUzNSwidXNlcm5hbWUiOiJjc2FkbWluIn0.CdmV7EymvXhrsCegeAagGffF6BOvFeWIMr-93I2Oa2ZiOB8rcNKOhR9ZsvzTeUFq0S9RXWX4lg8LEO7ymCA0IESumX0KOYAVOF15_xmXHxLiFRaL9L_6KdH0YDp7wA2vCpmiAxNBdUBUW3pfgzXI3mRjOBcH5L26ZLBP0Me0RcPOHGEwtNaFD3JMBhVj6DCiI2koM8oB4TXVEbPMAk19C_mK6tCkTXo_oRMdKHRXmgKOwA4mbggjwgce9-YsAsAkoYl0uO2Z4l6UCWRrmr5_5bCFhokmmoKBKhH84HU6azncJFY3_2StB_bBRPq2y9RWAt4RukRR-kE545N_rriNvg',
'eyJraWQiOiI3M2I5NTI0Ni02NjI2LTQ3N2YtYWFmYS1kMDJiODFhNjFkZmYiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJjc2FkbWluIiwiaXNBYmxlIjoxLCJpc3MiOiJodHRwczpcL1wvbG9naW4tdGVzdC50LWFhcm9uLmNvbSIsImF1ZCI6InR1b2hlbmctYWlycG9ydC1hZG1pbiIsIm5iZiI6MTc1NTkxNDQ5MSwib1VzZXJJZCI6NTQzLCJzY29wZSI6WyJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tbXAiLCJ0dW9oZW5nLXBpbG90LW1wIiwidHVvaGVuZy13YXRlcndheS1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLW1wIiwidHVvaGVuZy1haXJwb3J0U2NyZWVuLWFkbWluIiwidHVvaGVuZy1kbXAtbXAiLCJ0dW9oZW5nLWZseXBvcnRhbC1hZG1pbiIsInR1b2hlbmctdGVsZWNvbXVtYWxlLWFkbWluIiwidHVvaGVuZy1oaHotYWRtaW4iLCJ0dW9oZW5nLWhoei1tcCIsInR1b2hlbmctZnJlZXdheS1hZG1pbiIsInR1b2hlbmctd2VwdHNwLW1wIiwidHVvaGVuZy1waWxvdC1hZG1pbiIsInR1b2hlbmctc3BhY2V0aW1lLWFkbWluIiwidHVvaGVuZy1hbGVydC1tcCIsInR1b2hlbmctYnVzaW5lc3MtYWRtaW4iLCJ0dW9oZW5nLWJ1c2luZXNzLW1wIiwidHVvaGVuZy13ZXB0c3AtYWRtaW4iLCJ0dW9oZW5nLWFpcm1vbml0b3ItbXAiLCJ0dW9oZW5nLWFpcnBvcnQtbXAiLCJ0dW9oZW5nLWFpcm1vbml0b3ItYWRtaW4iLCJ0dW9oZW5nLWFsZXJ0LWFkbWluIiwidHVvaGVuZy1haXJwb3J0LWFkbWluIiwidHVvaGVuZy13YXRlcndheS1tcCIsInR1b2hlbmctZnJlZXdheS1tcCIsInR1b2hlbmctZG1wLWFkbWluIiwidHVvaGVuZy1zcGFjZXRpbWUtbXAiXSwiY2xpZW50Um9sZUxpc3QiOiJbe1wiY2xpZW50SWRcIjpcInR1b2hlbmctZmx5cG9ydGFsLWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1idXNpbmVzcy1tcFwiLFwicm9sZUlkXCI6MTE0NX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYnVzaW5lc3MtYWRtaW5cIixcInJvbGVJZFwiOjExNDV9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWFpcnBvcnRTY3JlZW4tYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXNwYWNldGltZS1hZG1pblwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctc3BhY2V0aW1lLW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1oaHotYWRtaW5cIixcInJvbGVJZFwiOjEwMDN9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWhoei1tcFwiLFwicm9sZUlkXCI6MTAwM30se1wiY2xpZW50SWRcIjpcInR1b2hlbmctd2F0ZXJ3YXktYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXdhdGVyd2F5LW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1kbXAtYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWRtcC1tcFwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYWlycG9ydC1hZG1pblwiLFwicm9sZUlkXCI6NjYzfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJwb3J0LW1wXCIsXCJyb2xlSWRcIjo2NjN9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLWFsZXJ0LWFkbWluXCIsXCJyb2xlSWRcIjoyN30se1wiY2xpZW50SWRcIjpcInR1b2hlbmctYWxlcnQtbXBcIixcInJvbGVJZFwiOjI3fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJtb25pdG9yLWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1haXJtb25pdG9yLW1wXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy13ZXB0c3AtYWRtaW5cIixcInJvbGVJZFwiOjI1fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy13ZXB0c3AtbXBcIixcInJvbGVJZFwiOjI1fSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy10ZWxlY29tdW1hbGUtYWRtaW5cIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXRlbGVjb211bWFsZS1tcFwiLFwicm9sZUlkXCI6MX0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctcGlsb3QtbXBcIixcInJvbGVJZFwiOjF9LHtcImNsaWVudElkXCI6XCJ0dW9oZW5nLXBpbG90LWFkbWluXCIsXCJyb2xlSWRcIjoxfSx7XCJjbGllbnRJZFwiOlwidHVvaGVuZy1mcmVld2F5LW1wXCIsXCJyb2xlSWRcIjo1OH0se1wiY2xpZW50SWRcIjpcInR1b2hlbmctZnJlZXdheS1hZG1pblwiLFwicm9sZUlkXCI6NTh9XSIsImV4cCI6MTc1NjAwMDg5MSwiaXNFeHBpcmUiOjEsImlhdCI6MTc1NTkxNDQ5MSwidXNlcm5hbWUiOiJjc2FkbWluIn0.Opt-pZg4tgqZkfcme-jSyOOw80j0s5tqWiPVp0lLlOZu20-nJEO2co3A1UZ-ZOsrCik1N3_ZqGWhrk9QYhj0EAeoD6ByLDkLIw7k66_YtBidygxdDaSdpNt_RSat2QBNdrkvoG1bSEgaffh8_x205sFzlYfywn0zQfT6eANiKS8NDyamiwFPg5PcWkf9hmW3IxvhiLbCoSpD1LfHR6izkD2_vBmrNAhV33l84BGpW3HLcD19ZcLWKauSLztiNLMT46zCyZIYaAtzSASdu3esADK28KpzBECBfpSfodvkU3kcv3r_IJ1yrmwdrg9kojOF27WxM3z6ekJAMsuMoUECLg',
refresh_token:
'HNyAXnoDhR2kgjXUSVwqMldvgzazvaY3tVlCodSiDon7fA7P8Ci3BMsnk31cjeSKwcbsPzUaMdCdBilBhSqQ1dZLk-Md-ERqh5mbbeu7rJDWX4MexO0eKtRBwz-mbnbR',
token_type: 'Bearer',

View File

@ -47,7 +47,7 @@ const checkFn = async (row) => {
// console.log(row.id)
let params = {
airportId: row.id,
taskId: row.task[0].id,
taskId: row.task[0].taskId,
// taskId: 4454,
}
let res = await beforeCheckApi(params)
@ -62,7 +62,11 @@ const checkFn = async (row) => {
// console.log(processStatus.value)
// console.log(res.data)
if (processStatus.value != null) {
if (precent.value == 100) {
clearTimeout(checkTime)
return
}
if (processStatus.value == 'error') {
clearTimeout(checkTime)
return
}
@ -99,7 +103,7 @@ onUnmounted(() => {
<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>
<span v-if="processStatus == 'success'" class="success_text">SUCCESS</span>
<span v-if="processStatus == 'success' && precent == 100" class="success_text">SUCCESS</span>
<span v-if="processStatus == 'error'" class="fail_text">FAILED</span>
<a-spin :indicator="indicator" v-if="processStatus == null" />

View File

@ -21,8 +21,8 @@ let size2Img = ref(new URL(`@/assets/icons/size2.png`, import.meta.url).href)
let viewMode = ref(1) //1-1/4 2-
let littleViewMode = ref(1) //1- 2- 3-
let littleViewModeName = ref('舱外画面')
let planeStateList = ref([
{
let planeStateList = reactive({
vspeed: {
id: 1,
key: 'vspeed',
name: '爬升速度',
@ -32,7 +32,7 @@ let planeStateList = ref([
content: '爬升<br>速度',
unit: '/s',
},
{
hspeed: {
id: 2,
name: '平飞速度',
icon: 'icon-jiantouzuoyou',
@ -41,7 +41,7 @@ let planeStateList = ref([
content: '平飞<br>速度',
unit: '/s',
},
{
distToHome: {
id: 3,
name: '距离机场',
icon: 'icon-H',
@ -50,7 +50,7 @@ let planeStateList = ref([
content: '距离<br>机场',
unit: 'm',
},
{
altitude: {
id: 4,
name: '海拔高度',
icon: 'icon-tiedijuli',
@ -59,7 +59,7 @@ let planeStateList = ref([
content: '海拔<br>高度',
unit: 'm',
},
{
pitch: {
id: 5,
name: '无人机俯仰角',
icon: 'icon-flight-takeoff-line',
@ -68,7 +68,7 @@ let planeStateList = ref([
content: '无人机<br>俯仰角',
unit: '°',
},
{
yaw: {
id: 6,
name: '无人机偏航角',
icon: 'icon-feihangqipianhangjiao',
@ -76,7 +76,7 @@ let planeStateList = ref([
content: '无人机<br>偏航角',
touch: false,
},
{
camerapitch: {
id: 7,
name: '云台俯仰角',
icon: 'icon-pianhangjiao-1',
@ -84,7 +84,7 @@ let planeStateList = ref([
content: '云台<br>俯仰角',
touch: false,
},
{
camerayaw: {
id: 8,
name: '云台偏航角',
icon: 'icon-pianhangjiao-1',
@ -92,7 +92,7 @@ let planeStateList = ref([
content: '云台<br>偏航角',
touch: false,
},
])
})
let selectedAirPort = ref(1)
//
@ -125,12 +125,33 @@ const switchPlaneVideo = (viewtype) => {
break
}
}
//socket
const setCurrentData = (data) => {
//
planeStateList.vspeed.value = data.vspeed
//
planeStateList.hspeed.value = data.hspeed
//
planeStateList.distToHome.value = data.distToHome
//
planeStateList.altitude.value = data.altitude
//
planeStateList.pitch.value = data.pitch
//
planeStateList.yaw.value = data.yaw
//
planeStateList.camerapitch.value = data.camerapitch
//
planeStateList.camerayaw.value = data.camerayaw
}
//
const siwtchVideoPosFn = () => {}
//pinia
airPortSocketStore.$subscribe((mutate, state) => {
console.log(state.currentAirPort)
//socket
setCurrentData(state.currentAirPort)
})
</script>

View File

@ -1,6 +1,5 @@
<script setup>
import { ref, defineAsyncComponent, onMounted, watch, toRaw, defineProps, reactive } from 'vue'
// const LivePlayer = defineAsyncComponent(() => import('@/components/video/index.vue'))
const emit = defineEmits(['switchScreen'])
@ -11,20 +10,6 @@ let out_title = ref('舱外直播')
let in_title = ref('舱内直播')
let lastType = ref(null)
const LiveOptions_out = reactive({
videoUrl: null,
// videoTitle: null,
// live: true,
// hideFullscreenButton: true,
// stretch: true
})
const LiveOptions_in = reactive({
videoUrl: null,
// videoTitle: null,
// live: true,
// hideFullscreenButton: true,
// stretch: true
})
const switchScreen = (type) => {
if (lastType != type) {
out_title.value = '舱外直播'

View File

@ -30,11 +30,20 @@ let leftPlaneWidth = ref('25%')
let rightPlaneWidth = ref('100%')
let rightPlaneHeight = ref('100%')
let rightPlaneBottom = ref('0')
let showLiveVideo = ref(false)
//
let out_showLive = ref(false)
//
let in_showLive = ref(false)
//
let plane_showLive = ref(false)
//gismap
let showIframeMap = ref(false)
let outVideo_teleport = ref('#out_small_video_area')
let inVideo_teleport = ref('#in_small_video_area')
let planeVideo_teleport = ref('#plane_small_video_area')
let map_teleport = ref('#big_area')
let switchType = null
//socket
let currentAirPortSocket = ref(null)
@ -46,14 +55,13 @@ let statelliteCount = ref(0)
//
let currentAirPortInfo = ref(null)
let currentAirPortStatus = ref(1)
let currentAirPortStatus = ref(-1)
const statusList = reactive({
1: '空闲',
2: '飞行中',
3: '准备中',
})
let virturalDrive_iframe_full = ref(null)
let showIframeMap = ref(false)
let iframeData = null
//1
@ -98,6 +106,12 @@ const switchViewFn = (viewPrecent) => {
leftPlaneWidth.value = '50%'
rightPlaneWidth.value = '50%'
}
//gis
let params = {
resize: 1,
}
sendGisMessage(params)
}
//线
const queryAirLine_AirPort = async () => {
@ -109,25 +123,23 @@ const queryAirLine_AirPort = async () => {
if (res[0].value.code == 0) {
//
currentAirPortInfo.value = res[0].value.data[0]
// console.log(currentAirPortInfo.value)
//
currentAirPortStatus.value = Number(currentAirPortInfo.value.status)
if (Number(currentAirPortStatus.value) == 2) {
//
rightPlaneHeight.value = 'calc(100% - 150px)'
rightPlaneBottom.value = '150px'
//
map_teleport.value = '#left_flying_map'
}
//
LiveOptions_out.videoUrl = currentAirPortInfo.value.external_monitor_url
LiveOptions_in.videoUrl = currentAirPortInfo.value.internal_monitor_url
LiveOptions_plane.videoUrl = currentAirPortInfo.value.camera_url
//
showLiveVideo.value = true
//
if (currentAirPortStatus.value != Number(currentAirPortInfo.value.status)) {
currentAirPortStatus.value = Number(currentAirPortInfo.value.status)
console.log(
'现在的状态是:',
currentAirPortStatus.value,
statusList[currentAirPortStatus.value],
)
//teleport
resetTeleportTo(currentAirPortStatus.value)
}
//socket
if (!isUsedSocket.value) {
@ -146,9 +158,8 @@ const queryAirLine_AirPort = async () => {
let airLineInfo = res[1].value.data[0]
//线
let resultWayPoint = await getAirWayPointsToJson(airLineInfo.fileUrl)
//iframe
showIframeMap.value = true
//
iframeData = {
airportName: currentAirPortInfo.value.airportName,
airportLocation: {
@ -176,34 +187,69 @@ const queryAirPort = async () => {
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
// currentAirPortInfo.value.status = 3
//
if (currentAirPortStatus.value != Number(currentAirPortInfo.value.status)) {
currentAirPortStatus.value = Number(currentAirPortInfo.value.status)
console.log(
'现在的状态是:',
currentAirPortStatus.value,
statusList[currentAirPortStatus.value],
)
//teleport
resetTeleportTo(currentAirPortStatus.value)
}
}
//
setTimeout(() => {
queryAirPort()
}, 6000)
}
//
const resetTeleportTo = (currentAirPortStatus) => {
if (currentAirPortStatus == 1) {
//
setTimeout(() => {
//
map_teleport.value = '#big_area'
//
outVideo_teleport.value = '#out_small_video_area'
//
inVideo_teleport.value = '#in_small_video_area'
out_showLive.value = true
in_showLive.value = true
showIframeMap.value = true
plane_showLive.value = false
}, 50)
} else if (currentAirPortStatus == 2) {
//
rightPlaneHeight.value = 'calc(100% - 150px)'
rightPlaneBottom.value = '150px'
setTimeout(() => {
//
map_teleport.value = '#left_flying_map'
//
outVideo_teleport.value = '#plane_small_video_area'
}, 50)
} else if (currentAirPortStatus == 3) {
//
setTimeout(() => {
//
outVideo_teleport.value = '#big_area'
out_showLive.value = true
in_showLive.value = false
showIframeMap.value = false
plane_showLive.value = false
}, 50)
}
}
//socket线
const socketFn = (workParams) => {
@ -216,26 +262,34 @@ const socketFn = (workParams) => {
currentAirPortSocket.value = data
//pinia
airPortSocketStore.currentAirPort = data
//
statelliteCount.value = data.satcount
}
}
//iframe map
const iframeLoaded = () => {
// let iframeItem = document.getElementById('iframeItem')
let iframeItem = virturalDrive_iframe_full.value
let iframeContent = iframeItem.contentWindow
let data = JSON.stringify(iframeData)
// console.log(data)
iframeContent.postMessage(data, '*')
console.log(data)
setTimeout(() => {
iframeContent.postMessage(data, '*')
}, 0)
//
setTimeout(() => {
sendPosToPlane()
}, 2000)
// setTimeout(() => {
// sendPosToPlane()
// }, 2000)
}
//
const sendPosToPlane = () => {
if (currentAirPortStatus.value != 2) {
return
}
// console.log('..................................')
let pathArr = iframeData.flyPath
@ -272,6 +326,48 @@ const sendPosToPlane = () => {
sendPosFn()
}
//gis
const sendGisMessage = (params) => {
//params
let iframeItem = virturalDrive_iframe_full.value
let iframeContent = iframeItem.contentWindow
let data = JSON.stringify(params)
console.log(data)
iframeContent.postMessage(data, '*')
}
//
const switchRightVideoFn = (videoType) => {
if (videoType == 1) {
//
setTimeout(() => {
outVideo_teleport.value = '#big_area'
out_showLive.value = true
in_showLive.value = false
showIframeMap.value = false
plane_showLive.value = false
}, 50)
} else if (videoType == 2) {
//
setTimeout(() => {
inVideo_teleport.value = '#big_area'
out_showLive.value = false
in_showLive.value = true
showIframeMap.value = false
plane_showLive.value = false
}, 50)
} else if (videoType == 3) {
//
setTimeout(() => {
planeVideo_teleport.value = '#big_area'
out_showLive.value = false
in_showLive.value = false
showIframeMap.value = false
plane_showLive.value = true
}, 50)
}
}
//
const switchScreenFn = (type) => {
console.log(type)
@ -341,7 +437,12 @@ onMounted(() => {
</div>
<!-- 右侧面板 -->
<div class="rightPlane absolute right-0 h-full bg-[#ffffff] z-1">
<rightSwitchVideo class="absolute right-3 top-3" />
<!-- 切换视频按钮 -->
<rightSwitchVideo
v-if="currentAirPortStatus == 2 || currentAirPortStatus == 3"
class="absolute right-3 top-3 z-10"
@switchVideo="switchRightVideoFn"
/>
<div class="fullScreen w-full absolute right-0">
<!-- <div class="w-full h-10 absolute right-0 bottom-[20px]">
@ -365,37 +466,34 @@ onMounted(() => {
<!-- 直播播放器 -->
<!-- 舱外视频 -->
<teleport
:to="outVideo_teleport"
v-if="showLiveVideo && (currentAirPortStatus == 1 || currentAirPortStatus == 2)"
>
<teleport :to="outVideo_teleport" v-if="out_showLive">
<LivePlayer
class="h-full absolute left-0 right-0 top-0 right-0 m-auto"
v-show="showLiveVideo && LiveOptions_out.videoUrl?.includes('.flv')"
v-show="out_showLive && LiveOptions_out.videoUrl?.includes('.flv')"
ref="OutlivePlayerRef"
:options="LiveOptions_out"
/>
</teleport>
<!-- 舱内视频 -->
<teleport :to="inVideo_teleport" v-if="showLiveVideo && currentAirPortStatus == 1">
<teleport :to="inVideo_teleport" v-if="in_showLive">
<LivePlayer
class="h-full absolute left-0 right-0 top-0 right-0 m-auto"
v-show="showLiveVideo && LiveOptions_in.videoUrl?.includes('.flv')"
v-show="in_showLive && LiveOptions_in.videoUrl?.includes('.flv')"
ref="inlivePlayerRef"
:options="LiveOptions_in"
/>
</teleport>
<!-- 无人机视角 -->
<!-- <teleport :to="planeVideo_teleport" v-if="showLiveVideo && currentAirPortStatus == 2">
<teleport :to="planeVideo_teleport" v-if="plane_showLive">
<LivePlayer
class="h-full absolute left-0 right-0 top-0 right-0 m-auto"
v-show="showLiveVideo && LiveOptions_plane.videoUrl?.includes('.flv')"
v-show="plane_showLive && LiveOptions_plane.videoUrl?.includes('.flv')"
ref="planelivePlayerRef"
:options="LiveOptions_in"
:options="LiveOptions_plane"
/>
</teleport> -->
</teleport>
<!-- map -->
<teleport :to="map_teleport">
<teleport v-if="showIframeMap" :to="map_teleport">
<iframe
v-if="showIframeMap"
id="virturalDrive_iframe_full"

View File

@ -10,20 +10,21 @@ import {
reactive,
} from 'vue'
let current = ref()
const emit = defineEmits(['switchVideo'])
let current = ref([1])
let items = reactive([
{
key: '1',
key: 1,
label: '舱外画面',
title: 'Option1',
},
{
key: '2',
key: 2,
label: '舱内画面',
title: 'Option2',
},
{
key: '3',
key: 3,
label: '无人机画面',
title: 'Option3',
},
@ -40,6 +41,10 @@ const mergedArrow = computed(() => {
return { pointAtCenter: true }
}
})
const selectFn = (e) => {
// console.log(current.value)
emit('switchVideo', current.value[0])
}
</script>
<template>
@ -50,7 +55,8 @@ const mergedArrow = computed(() => {
:getPopupContainer="(triggerNode) => triggerNode.parentElement"
>
<template #title>
<a-menu class="blueMenus" v-model:selectedKeys="current" :items="items"> </a-menu>
<a-menu class="blueMenus" v-model:selectedKeys="current" :items="items" @select="selectFn">
</a-menu>
</template>
<a-button type="primary" size="default">
<template #icon>

View File

@ -14,16 +14,17 @@ addEventListener('message', (e) => {
// return
//开始发送sockets请求
//当前机场socket
let wsAirport = new WebSocketService()
wsAirport.createConnection(`wss://${baseUrl}/airport/socket/webSocket/0:0:${datas.code}`)
let wsAirport = new WebSocketService().createConnection(
`wss://${baseUrl}/airport/socket/webSocket/0:0:${datas.code}`,
)
//日志socket
// let wsLog = new WebSocketService().createConnection(
// `wss://${baseUrl}/airport/socket/logSocket/${datas.id}`,
// )
wsAirport.onmessage = (event) => {
if (!WebSocketService.isJsonString(event.data)) return
// const wsData = JSON.parse(event.data)
// console.log(wsData)
const wsData = JSON.parse(event.data)
// console.log(wsData)
//发送给主线程
return postMessage(event.data)
// const currentDroneInfo data.currentDroneInfo || null