月球大数据地理空间分析展示平台-【前端】-月球2期前端
surprise
2023-10-31 b4bffdef9d944ee0982a08e0ea06b5a4a2f829d0
src/views/menus.vue
@@ -1,40 +1,67 @@
<template>
  <div class="menus" v-show="fullScreen">
    <div class="logo_box">
      <img src="../assets/img/logo.png" alt="" class="logo" />
      <!-- <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>
    <div class="menus_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 class="menu_Image_box">
        <div class="imgBox" v-for="(item, i) in menuOptions" :key="i" @click="setMenuClick(item)" :title="item.name">
          <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">
    <layer-manage v-show="checkMenuFlag == 'l1'"> </layer-manage>
    <plotting v-show="checkMenuFlag == 'l2'"> </plotting>
    <baseMapSwitching v-show="checkMenuFlag == 'l5'"> </baseMapSwitching>
    <search> </search>
    <div v-show="checkMenuFlag == 'l1'" style="position: relative; display: flex"></div>
    <div style="position: relative; display: flex" v-show="store.state.setLayerManager">
      <layer-manage @setCloseLayer="setCloseLayer"></layer-manage>
    </div>
    <div style="position: relative; display: flex" v-show="checkMenuFlag == 'l2'">
      <plotting @setCloseplotting="setCloseplotting"> </plotting>
    </div>
    <div v-show="checkMenuFlag == 'l5'">
      <baseMapSwitching @setCloseBaseMap="setCloseBaseMap"> </baseMapSwitching>
    </div>
    <search v-if="thematicMapBtnState"> </search>
  </div>
  <top-btn v-show="fullScreen"></top-btn>
  <div class="fullScreen_btn"></div>
  <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>
  <div style="
      display: flex;
      position: absolute;
      z-index: 30;
      top: 18px;
      right: 15px;
    ">
    <thematic-map v-show="!thematicMapBtnState"></thematic-map>
    <top-btn v-show="fullScreen" v-if="thematicMapBtnState"></top-btn>
    <div v-show="fullScreen" style="display: flex;align-items: center;">
      <div style="margin-top: 15px;">
        <div class="setUserLogo" @click="setLogMeu = !setLogMeu">
          <div class="setUserImage"></div>
          <div class="setUserTitle">{{ store.state.uname }}</div>
        </div>
        <div  v-show="setLogMeu" class="setLogContent" @click="setUserLogOut">
          退出
        </div>
      </div>
    </div>
  </div>
</template>
<script lang="ts" setup>
@@ -45,11 +72,15 @@
  reactive,
  defineProps,
  defineEmits,
  nextTick,
} 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";
//地理编码搜索
@@ -58,67 +89,178 @@
import plotting from "@/views/plotting/plotting.vue";
//底图切换
import baseMapSwitching from "@/views/baseMapSwitching/baseMapSwitching.vue";
//分屏菜单
import doubleLayer from "@/views/layer/doubleLayer.vue";
import { removeToken } from "@/utils/auth";
import store from "@/store";
//Router
import router from "@/router";
const menuOptions = ref([]);
const checkMenuFlag = ref("");
let fullScreen = ref(true);
let thematicMapState = ref(true);
let thematicMapBtnState = ref(true);
const setLogMeu = ref(false);
const setDoubleScreenMap = () => {
  store.state.doubleMenu = false;
  store.state.doubleMap = true;
};
const setUserLogOut = () => {
  removeToken();
  router.push("/Login");
};
const setDobuleCloseLayer = () => {
  store.state.doubleMenu = true;
  store.state.doubleMap = false;
};
const setShowMapChange = (res) => {
  switch (res.id) {
    case "15":
      break;
    default:
      break;
  }
  // store.state.isShowMap = res;
};
const setMenuClick = (res) => {
  if (res.id == "l6") {
    fullScreen.value = !fullScreen.value;
    // fullScreen.value = !fullScreen.value;
    screen();
  }
  if (checkMenuFlag.value && checkMenuFlag.value == res.id) {
    checkMenuFlag.value = null;
  } else {
    checkMenuFlag.value = res.id;
    menuTool.leftTools(res);
  }
  if (res.id == "l3") {
    thematicMapState.value = false;
    thematicMapBtnState.value = false;
    menuTool.leftTools(res);
  } else if (res.id != "11") {
    thematicMapState.value = true;
    thematicMapBtnState.value = true;
  }
  if (res.id == "l1") {
    store.state.setLayerManager = !store.state.setLayerManager;
  } else {
    store.state.setLayerManager = false;
  }
};
onMounted(() => {
  menuOptions.value = menuData.leftMenu;
const setCloseLayer = (res) => {
  store.state.setLayerManager = false;
};
const setCloseplotting = (res) => {
  checkMenuFlag.value = null;
};
const setCloseBaseMap = (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;
    }
  }
});
// 判断是否全屏
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: 14px;
  .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: 9px;
      }
      .logo_name_b {
        text-align: center;
        width: 100%;
        height: 9px;
      }
    }
  left: 0px;
  z-index: 40;
  .logo_box {
    width: 620px;
    height: 77px;
    margin-top: -5px;
    background: url("../assets/img/logo2.png") no-repeat;
    background-size: 100% 100%;
    // 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: url("../assets/img/矩形 1.png");
    left: 7px;
    background: rgba(1, 10, 28, 0.68);
    left: 6px;
    position: absolute;
    top: 105px;
    width: 71px;
    height: 628px;
    padding: 36px 0px;
    top: 82px;
    width: 58px;
    height: calc(100vh - 91px);
    z-index: 40;
    box-sizing: border-box;
    .imgBox {
      width: 100%;
      display: flex;
      justify-content: center;
      margin-bottom: 52px;
      cursor: pointer;
      img {
        width: 30px;
        height: 30px;
@@ -126,16 +268,87 @@
    }
  }
}
.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 {
  box-sizing: border-box;
  height: 100%;
  width: 100%;
  padding-top: 36px;
  background: url("../assets/img/矩形 6.png") no-repeat;
  background-size: 100% 100%;
}
.content_box {
  position: absolute;
  top: 135px;
  left: 100px;
  // top: 135px;
  top: 83px;
  left: 73px;
  display: flex;
}
.fullScreen_btn {
  // background: url("../assets/img/形状 3.png") no-repeat center;
  // background-size: 100% 100%;
  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;
}
.setUserLogo {
  height: 34px;
  display: flex;
  .setUserImage {
    width: 34px;
    height: 34px;
    background: url("../assets/img/图层 18.png") no-repeat center;
    background-size: 100% 100%;
    cursor: pointer;
  }
  .setUserTitle {
    height: 100%;
    align-items: center;
    display: flex;
    font-size: 15px;
    font-family: Microsoft YaHei;
    font-weight: 400;
    color: #D6E4FF;
    margin-left: 10px;
  }
}
.setLogContent {
  width: calc(100% - 10px);
  padding: 5px;
  background: rgba(7, 8, 14, 0.8);
  box-shadow: inset 0px 10px 40px 10px rgba(38, 47, 71, 1);
  margin-top: 10px;
  font-size: 14px;
  font-family: Microsoft YaHei;
  font-weight: 400;
  color: #d6e4ff;
}
</style>