<script lang="ts"> import {defineComponent} from 'vue' import SceneViewer from "@/components/SceneViewer.vue"; import BottomBar from "@/components/BottomBar.vue"; import Toolbar from "@/components/toolbar.vue"; import CollisionDetection from "@/components/CollisionDetection.vue"; import {useMessage} from 'naive-ui' import {useStaticStore} from "@/store/staticOptions.js"; export default defineComponent({ name: "HomePage", components: {CollisionDetection, Toolbar, BottomBar, SceneViewer}, data(){ return { showDetection: false, graphHeight: 0, message: useMessage(), staticStore: useStaticStore(), timeId: undefined, msgbox: true, } }, mounted() { if(!window.navigator.onLine) { this.message.warning('无法连接互联网,当前为离线模式') this.staticStore.networkStatus.offlineMode = true }else{ this.setNetworkTimer() } // 网络状态监测 window.addEventListener('online', () => { this.message.success('网络已连接') this.staticStore.networkStatus.offlineMode = false this.setNetworkTimer() }) window.addEventListener('offline', () => { this.message.warning('无法连接互联网,已进入离线模式') this.staticStore.networkStatus.offlineMode = true // 关闭网络检测定时器 this.timeId && clearInterval(this.timeId) }) }, computed: { setPageStyle: function () { return this.showDetection? 100 - this.graphHeight : 100 } }, methods: { // 显示地形碰撞检测面板,resize地图窗口 resizeMap(height: number) { if(height<0) this.showDetection = false else{ this.graphHeight = height this.showDetection = true } }, setNetworkTimer(){ this.timeId = setInterval(()=>{ // console.log(navigator['connection'].downlink) if(navigator['connection'].downlink < 1){ this.staticStore.networkStatus.offlineMode = true if(this.msgbox){ this.message.warning('检测到当前网络环境差,已切换至离线模式') this.msgbox = false } }else{ this.staticStore.networkStatus.offlineMode = false if(!this.msgbox){ this.msgbox = true this.message.info('已切换至在线模式') } } },3000) } } }) </script> <template> <div id="map" :style="{height: setPageStyle+'vh'}"> <SceneViewer id="scene-viewer"></SceneViewer> <BottomBar></BottomBar> <toolbar ref="ToolBar" @resizeMap="resizeMap"></toolbar> </div> </template> <style> @import '../../styles/cesium-compass.css'; #map { width: 100vw; position: relative; } #scene-viewer { width: 100vw; height: 100%; position: absolute; overflow: hidden; } </style>