forked from drone/command-center-dashboard

罗广辉
2025-04-21 2800fa4f32f3900509cb4d6eefaf2bfaf54efdd7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<template>
    <div :key="selectedAreaCode">
        <!--        单个机巢页面-->
        <SignMachineNest v-if="singleUavHome?.device_sn" :key="singleUavHome?.device_sn"/>
        <!--        事件概述详细信息页面-->
        <EventOverviewDetail v-else-if="isEventOverviewDetail" />
 
        <!--    智引即飞    -->
        <AINowFly v-else-if="isAINowFly" />
        <!--            首页默认的页面-->
        <template v-else>
            <HomeLeft />
            <HomeRight />
        </template>
    </div>
 
 
    <SearchBox />
    <RSide />
    <Footer />
</template>
 
<script setup>
import HomeRight from '@/views/Home/HomeRight/HomeRight.vue'
import HomeLeft from '@/views/Home/HomeLeft/HomeLeft.vue'
import SearchBox from '@/views/Home/SearchBox.vue'
import SignMachineNest from '@/views/SignMachineNest/SignMachineNest.vue'
import { useStore } from 'vuex'
import Footer from '@/views/Home/Footer.vue'
import RSide from '@/views/Home/RSide.vue'
import { onMounted } from 'vue'
import cesiumOperation from '@/utils/cesium-tsa'
import EventOverviewDetail from '@/views/Home/EventOverviewDetail/EventOverviewDetail.vue'
import AINowFly from '@/views/Home/AINowFly.vue'
import { getMapCenterPoint } from '@/utils/cesium/mapUtil'
import { getAreaCodeApi } from '@/api/home'
import { getDroneSuggest } from '@/api/home/common'
import { MAP_LEVEL } from '@/const/drc'
import _ from 'lodash'
 
const store = useStore()
const { _init, viewerDestory } = cesiumOperation()
 
const singleUavHome = computed(() => store.state.home.singleUavHome)
const isEventOverviewDetail = computed(() => store.state.home.isEventOverviewDetail)
const isAINowFly = computed(() => store.state.home.footActiveIndex === 5)
const userAreaCode = computed(() => store.state.user.userInfo.detail.areaCode)
const selectedAreaCode = computed(() => store.state.user.selectedAreaCode)
 
 
 
onUnmounted(() => {
    store.commit('setSingleUavHome', null)
    store.commit('setIsEventOverviewDetail', false)
    store.commit('setFootActiveIndex', 0)
    store.commit('setSelectedAreaCode', null)
    viewerDestory()
})
 
// 获取飞行建议
function getFlySuggestion(){
    const viewer = window.$viewer
    const {longitude,latitude} = getMapCenterPoint(viewer)
    let height = viewer.camera.positionCartographic.height;
    if (height > MAP_LEVEL[0].heightRange[1]) {
        store.commit('setFlySuggest', {})
        return
    }
    const params = { location: longitude + ',' + latitude}
    getAreaCodeApi(params).then(res => {
        const { adcode:areaCode } = res.data.data.regeocode.addressComponent
        if (!areaCode) return
        return getDroneSuggest({areaCode})
    }).then(res => {
        const setFlySuggest = _.pick(res.data.data,['windPower','flightAdvice']) || {}
        store.commit('setFlySuggest', setFlySuggest)
    })
}
 
onBeforeUnmount(() =>{
    window.$viewer.camera.moveEnd.removeEventListener(getFlySuggestion);
})
 
onMounted(() => {
    _init('cesium')
    nextTick(() => {
        getFlySuggestion()
        window.$viewer.camera.moveEnd.addEventListener(getFlySuggestion);
    })
})
</script>