<template>
|
<div
|
class="menus"
|
v-show="fullScreen"
|
>
|
<div class="logo_box">
|
<img
|
src="../assets/img/logo.png"
|
alt=""
|
class="logo"
|
/>
|
<div class="logo_name">
|
<h3>月球大数据地理空间分析展示平台</h3>
|
<img
|
src="../assets/img/logob.png"
|
alt=""
|
class="logo_name_b"
|
/>
|
</div>
|
</div>
|
<div class="menus_box">
|
<div class="menu_Image_box">
|
<div
|
class="imgBox"
|
v-for="(item, i) in menuOptions"
|
:key="i"
|
@click="setMenuClick(item)"
|
>
|
<img
|
v-if="checkMenuFlag != item.id"
|
class="imgIcon"
|
:src="require('../assets/img/leftBtn/' + item.imgUrl)"
|
/>
|
<img
|
v-if="checkMenuFlag == item.id"
|
class="imgIcon"
|
:src="require('../assets/img/leftBtn/' + item.checkImgUrl)"
|
/>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div
|
class="content_box"
|
v-show="fullScreen"
|
>
|
<div
|
v-show="checkMenuFlag == 'l1'"
|
style="position: relative; display: flex"
|
>
|
<layer-manage @setCloseLayer="setCloseLayer"> </layer-manage>
|
</div>
|
<div v-show="checkMenuFlag == 'l2'">
|
<plotting> </plotting>
|
</div>
|
<div v-show="checkMenuFlag == 'l5'">
|
<baseMapSwitching> </baseMapSwitching>
|
</div>
|
|
<search v-if="thematicMapBtnState"> </search>
|
</div>
|
|
<top-btn
|
v-show="fullScreen"
|
v-if="thematicMapBtnState"
|
></top-btn>
|
|
<thematic-map v-show="!thematicMapBtnState"></thematic-map>
|
<div
|
class="fullScreen_btn"
|
v-show="!fullScreen"
|
@click="screen"
|
></div>
|
<div
|
v-show="store.state.doubleMenu"
|
class="setDobuleMap"
|
@click="setDoubleScreenMap"
|
>
|
<Operation />
|
</div>
|
<div
|
@setDobuleCloseLayer="setDobuleCloseLayer"
|
v-show="store.state.doubleMap"
|
>
|
<double-layer></double-layer>
|
</div>
|
|
</template>
|
|
<script lang="ts" setup>
|
import {
|
ref,
|
onMounted,
|
onBeforeUnmount,
|
reactive,
|
defineProps,
|
defineEmits,
|
} from "vue";
|
import { Operation } from "@element-plus/icons-vue";
|
import menuData from "@/assets/js/Map/menuData";
|
import menuTool from "@/assets/js/Map/menuTool";
|
//顶部菜单
|
import topBtn from "@/components/topBtn.vue";
|
//专题图菜单
|
import thematicMap from "@/components/thematicMap/thematicMap.vue";
|
//图层管理页面
|
import layerManage from "@/views/layer/layerManage.vue";
|
//地理编码搜索
|
import search from "@/views/search/search.vue";
|
//标绘查询
|
import plotting from "@/views/plotting/plotting.vue";
|
//底图切换
|
import baseMapSwitching from "@/views/baseMapSwitching/baseMapSwitching.vue";
|
//分屏菜单
|
import doubleLayer from "@/views/layer/doubleLayer.vue";
|
import store from "@/store";
|
const menuOptions = ref([]);
|
const checkMenuFlag = ref("");
|
let fullScreen = ref(true);
|
let thematicMapState = ref(true);
|
let thematicMapBtnState = ref(true);
|
const setDoubleScreenMap = () => {
|
store.state.doubleMenu = false;
|
store.state.doubleMap = true;
|
};
|
const setDobuleCloseLayer = () => {
|
store.state.doubleMenu = true;
|
store.state.doubleMap = false;
|
};
|
const setMenuClick = (res) => {
|
if (res.id == "l6") {
|
// fullScreen.value = !fullScreen.value;
|
screen();
|
}
|
if (res.id == "l3") {
|
thematicMapState.value = false;
|
thematicMapBtnState.value = false;
|
} else {
|
thematicMapState.value = true;
|
thematicMapBtnState.value = true;
|
}
|
if (checkMenuFlag.value && checkMenuFlag.value == res.id) {
|
checkMenuFlag.value = null;
|
} else {
|
checkMenuFlag.value = res.id;
|
menuTool.leftTools(res);
|
}
|
};
|
const setCloseLayer = (res) => {
|
checkMenuFlag.value = null;
|
};
|
// 切换浏览器全屏
|
const screen = () => {
|
fullScreen.value = !fullScreen.value;
|
|
if (fullScreen.value) {
|
// 退出全屏
|
if (document.exitFullscreen) {
|
document.exitFullscreen();
|
} else if (document.mozCancelFullScreen) {
|
document.mozCancelFullScreen();
|
} else if (document.webkitExitFullscreen) {
|
document.webkitExitFullscreen();
|
}
|
} else {
|
var element = document.body;
|
if (element.requestFullscreen) {
|
element.requestFullscreen();
|
} else if (element.mozRequestFullScreen) {
|
element.mozRequestFullScreen();
|
} else if (element.webkitRequestFullscreen) {
|
element.webkitRequestFullscreen();
|
} else if (element.msRequestFullscreen) {
|
element.msRequestFullscreen();
|
}
|
}
|
};
|
// 监听浏览器全屏事件
|
document.addEventListener("fullscreenchange", () => {
|
if (!isFullScreen()) {
|
if (!fullScreen.value) {
|
fullScreen.value = !fullScreen.value;
|
console.log(fullScreen.value);
|
}
|
}
|
});
|
// 判断是否全屏
|
function isFullScreen() {
|
return (
|
document.isFullScreen ||
|
document.mozIsFullScreen ||
|
document.webkitIsFullScreen
|
);
|
}
|
menuOptions.value = menuData.leftMenu;
|
onMounted(() => {});
|
</script>
|
<style lang="less" scoped>
|
.menus {
|
position: absolute;
|
top: 27px;
|
left: 0px;
|
.logo_box {
|
display: flex;
|
align-items: center;
|
.logo {
|
width: 68px;
|
height: 68px;
|
}
|
.logo_name {
|
margin-left: 14px;
|
|
h3 {
|
font-size: 36px;
|
font-family: Source Han Sans CN;
|
font-weight: 400;
|
color: #ffffff;
|
line-height: 35px;
|
}
|
.logo_name_b {
|
text-align: center;
|
width: 100%;
|
height: 9px;
|
}
|
}
|
}
|
.menus_box {
|
background: rgba(1, 10, 28, 0.68);
|
|
left: 7px;
|
position: absolute;
|
top: 105px;
|
width: 71px;
|
height: 850px;
|
|
.imgBox {
|
width: 100%;
|
display: flex;
|
justify-content: center;
|
margin-bottom: 52px;
|
cursor: pointer;
|
img {
|
width: 30px;
|
height: 30px;
|
}
|
}
|
}
|
}
|
.setDobuleMap {
|
position: absolute;
|
top: 105px;
|
right: calc(50% - 50px);
|
z-index: 30;
|
width: 20px;
|
height: 20px;
|
color: #d6e4ff;
|
background: rgba(7, 8, 14, 0.8);
|
box-shadow: inset 0px 10px 40px 10px rgba(38, 47, 71, 1);
|
padding: 10px;
|
}
|
.menu_Image_box {
|
height: 778px;
|
width: 100%;
|
padding: 36px 0px;
|
background: url("../assets/img/矩形 1.png") no-repeat;
|
background-size: 100% 100%;
|
}
|
.content_box {
|
position: absolute;
|
top: 135px;
|
left: 100px;
|
display: flex;
|
}
|
.fullScreen_btn {
|
background: url("../assets/img/leftBtn/合集_03.png") no-repeat center;
|
background-size: 100% 100%;
|
width: 30px;
|
height: 30px;
|
position: absolute;
|
right: 20px;
|
top: 20px;
|
}
|
.fullScreen_btn:hover {
|
background: url("../assets/img/leftBtn/合集_03-02.png") no-repeat center;
|
background-size: 100% 100%;
|
cursor: pointer;
|
}
|
</style>
|