Newer
Older
SpaceIntegration_front / src / views / home / index.vue
liyaguang on 30 Oct 2023 6 KB feat(*): 首页菜单导航样式
<!-- 首页 -->
<script name="Home" setup lang="ts">
import { ref } from 'vue'
import statisticsData from './components/statistics.vue'
import dateSelect from './components/date.vue'
import MapComponent from '@/components/map/Map.vue'
import homeIcon from '@/assets/images/点位图标/地图菜单/首页未选中.png'
import gasIcon from '@/assets/images/点位图标/地图菜单/甲烷未选中.png'
import identifyIcon from '@/assets/images/点位图标/地图菜单/识别未选中.png'
import occupyIcon from '@/assets/images/点位图标/地图菜单/占压未选中.png'
import couplingIcon from '@/assets/images/点位图标/地图菜单/耦合未选中.png'
import dateIcon from '@/assets/images/点位图标/地图菜单/日期未选中.png'
import homeCheck from '@/assets/images/点位图标/地图菜单/首页选中.png'
import gasCheck from '@/assets/images/点位图标/地图菜单/甲烷选中.png'
import identifyCheck from '@/assets/images/点位图标/地图菜单/识别选中.png'
import occupyCheck from '@/assets/images/点位图标/地图菜单/占压选中.png'
import couplingCheck from '@/assets/images/点位图标/地图菜单/耦合选中.png'
import dateCheck from '@/assets/images/点位图标/地图菜单/日期选中.png'
const center = ref([116.26759100, 39.91563500]) // 地图中心
const zoom = ref(17) // 地图显示的缩放级别
// 菜单选中
const select = ref(0)
// 条件菜单选中
const cselect = ref<string[]>(['0', '1'])
// 菜单列表
const menu = ref([
  {
    name: '首页',
    icon: homeIcon,
    check: homeCheck,
    menu: [
      {
        name: '巡检车辆',
        value: '0',
        color: '#2DBF00',
      },
      {
        name: '巡检任务',
        value: '1',
        color: '#2763BC',
      },
    ],
  },
  {
    name: '甲烷',
    icon: gasIcon,
    check: gasCheck,
    menu: [
      {
        name: '已处置',
        value: '0',
        color: '#2DBF00',
      },
      {
        name: '未处置',
        value: '1',
        color: '#9F1919',
      },
    ],
  },
  {
    name: '识别',
    icon: identifyIcon,
    check: identifyCheck,
    menu: [
      {
        name: '正常',
        value: '0',
        color: '#2DBF00',
      },
      {
        name: '低风险',
        value: '1',
        color: '#2763BC',
      },
      {
        name: '一般风险',
        value: '2',
        color: '#FFD800',
      },
      {
        name: '较高风险',
        value: '3',
        color: '#D98200',
      },
      {
        name: '严重风险',
        value: '4',
        color: '#9F1919',
      },
    ],
  },
  {
    name: '占压',
    icon: occupyIcon,
    check: occupyCheck,
    menu: [
      {
        name: '正常',
        value: '0',
        color: '#2DBF00',
      },
      {
        name: '低风险',
        value: '1',
        color: '#2763BC',
      },
      {
        name: '一般风险',
        value: '2',
        color: '#FFD800',
      },
      {
        name: '较高风险',
        value: '3',
        color: '#D98200',
      },
      {
        name: '严重风险',
        value: '4',
        color: '#9F1919',
      },
    ],
  },
  {
    name: '耦合',
    icon: couplingIcon,
    check: couplingCheck,
    menu: [
      {
        name: '正常',
        value: '0',
        color: '#2DBF00',
      },
      {
        name: '低风险',
        value: '1',
        color: '#2763BC',
      },
      {
        name: '一般风险',
        value: '2',
        color: '#FFD800',
      },
      {
        name: '较高风险',
        value: '3',
        color: '#D98200',
      },
      {
        name: '严重风险',
        value: '4',
        color: '#9F1919',
      },
    ],
  },
  {
    name: '日期',
    icon: dateIcon,
    check: dateCheck,
  },
])
// 切换菜单
const change = (index: number) => {
  select.value = index
  if (index === 5) {
    return
  }
  cselect.value = menu.value[index].menu.map((item: any) => item.value)
}
// 改变条件菜单
const cchange = (value: string) => {
  if (cselect.value.includes(value)) {
    cselect.value = cselect.value.filter((item: string) => item !== value)
  }
  else {
    cselect.value.push(value)
  }
}
</script>

<template>
  <div class="home">
    <div id="container" style="height: calc(100vh - 50px); width: 100%; padding: 0;margin: 0;">
      <div class="title">
        地上地下一体化管线风险识别与预警地图看板
      </div>
      <map-component :center="center" :zoom="zoom" />
      <!-- 主菜单 -->
      <div class="menu">
        <div v-for="(item, index) in menu" :key="index" class="menu-item" @click="change(index)">
          <img :src="select === index ? item.check : item.icon" width="70" height="70">
          <date-select v-if="select === 5 && index === 5" class="date-select" />
        </div>
      </div>
      <!-- 条件菜单 -->
      <div class="cmenu">
        <div v-for="(child, cindex) in menu[select].menu" :key="cindex" class="menu-child" :style="`background:${cselect.includes(child.value) ? child.color : '#666'};`" @click="cchange(child.value)">
          {{ child.name }}
        </div>
      </div>
    </div>
    <!-- 统计数据 -->
    <!-- <statistics-data /> -->
  </div>
</template>

<style lang="scss" scoped>
.title {
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  z-index: 999;
  color: #fff;
  background-color: rgba($color: #2f4261, $alpha: 70%);
  font-size: 20px;
  padding: 20px;
  font-weight: 700;
  border-radius: 20px;
}

.menu {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  left: 10px;
  z-index: 999;

  .menu-item {
    margin-top: 10px;
    position: relative;

    &:hover {
      cursor: pointer;
    }
  }
}

.cmenu {
  position: absolute;
  right: 28%;
  top: 10%;
  z-index: 999;
  display: flex;

  .menu-child {
    margin: 10px;
    padding: 10px;
    color: #fff;
    font-size: 18px;
    font-weight: 700;
    border-radius: 8px;

    &:hover {
      cursor: pointer;
    }
  }
}

.home {
  width: 100%;
  height: 100%;
  padding: 0;
  margin: 0;
}
</style>

<style>
/* 隐藏高德logo  */
.amap-logo {
  display: none !important;
}

/* 隐藏高德版权  */
.amap-copyright {
  display: none !important;
}

.img-map-marker {
  width: 20px;
  height: 20px;
}
</style>