554 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			554 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Vue
		
	
	
	
<template>
 | 
						||
  <div class="peak-coal-content">
 | 
						||
    <div class="container">
 | 
						||
      <div class="header-content">
 | 
						||
        <div class="text">
 | 
						||
<!--          <p>峰煤焦化超低排放"管控治"</p>-->
 | 
						||
          <p>{{ title }}</p>
 | 
						||
<!--          <p class="suntitle">一体化平台</p>-->
 | 
						||
        </div>
 | 
						||
        <video class="video" loop muted autoplay src="/media/toubu.webm"></video>
 | 
						||
      </div>
 | 
						||
 | 
						||
      <div class="body-content">
 | 
						||
        <!--      左侧内容-->
 | 
						||
        <div class="left-content">
 | 
						||
          <div class="left-data-panel">
 | 
						||
            <a-row :gutter="24">
 | 
						||
              <a-col :span="12">
 | 
						||
                <air-quality/>
 | 
						||
              </a-col>
 | 
						||
              <a-col :span="12">
 | 
						||
                <pollutant-trends/>
 | 
						||
              </a-col>
 | 
						||
              <a-col :span="24">
 | 
						||
                <overview-pollutants/>
 | 
						||
              </a-col>
 | 
						||
              <a-col :span="24">
 | 
						||
                <check-data/>
 | 
						||
              </a-col>
 | 
						||
            </a-row>
 | 
						||
          </div>
 | 
						||
        </div>
 | 
						||
 | 
						||
        <!--      中间内容-->
 | 
						||
        <div class="center-content">
 | 
						||
          <Map @pointClick="pointClick" />
 | 
						||
          <div class="container"></div>
 | 
						||
          <img class="center-bg" :src="centerBg" />
 | 
						||
        </div>
 | 
						||
        <!--      右侧内容-->
 | 
						||
        <div class="right-content">
 | 
						||
          <div class="right-data-panel">
 | 
						||
            <a-row :gutter="24">
 | 
						||
              <a-col :span="12">
 | 
						||
                <energy-use/>
 | 
						||
              </a-col>
 | 
						||
              <a-col :span="12">
 | 
						||
                <enterprise-operations/>
 | 
						||
              </a-col>
 | 
						||
              <a-col :span="24">
 | 
						||
                <device-run/>
 | 
						||
              </a-col>
 | 
						||
              <a-col :span="12">
 | 
						||
                <warning-statistics/>
 | 
						||
              </a-col>
 | 
						||
              <a-col :span="12">
 | 
						||
                <latest-warning/>
 | 
						||
              </a-col>
 | 
						||
            </a-row>
 | 
						||
          </div>
 | 
						||
        </div>
 | 
						||
      </div>
 | 
						||
 | 
						||
      <div class="footer-content">
 | 
						||
        <div class="div">
 | 
						||
 | 
						||
          <div class="video-btn footer-btn" @click="showCamera = !showCamera">重点监控</div>
 | 
						||
          <div class="camera-list" v-if="showCamera">
 | 
						||
            <div class="camera-itm">
 | 
						||
              <div class="player"></div>
 | 
						||
            </div>
 | 
						||
            <div class="camera-itm">
 | 
						||
              <div class="player"></div>
 | 
						||
            </div>
 | 
						||
            <div class="camera-itm">
 | 
						||
              <div class="player"></div>
 | 
						||
            </div>
 | 
						||
            <div class="camera-itm">
 | 
						||
              <div class="player"></div>
 | 
						||
            </div>
 | 
						||
          </div>
 | 
						||
          <div class="map-filter footer-btn" @click="showFilter = !showFilter">
 | 
						||
            图例
 | 
						||
          </div>
 | 
						||
          <div class="filters" v-show="showFilter">
 | 
						||
            <div class="search">
 | 
						||
              <a-auto-complete
 | 
						||
                v-model="resourceSearchText"
 | 
						||
                :data-source="resourceList"
 | 
						||
                style="width: 100%;"
 | 
						||
                placeholder="请输入关键字"
 | 
						||
                @change="onChange"
 | 
						||
                @select="onChange"
 | 
						||
              >
 | 
						||
                <a-input>
 | 
						||
                  <a-icon :style="{ fontSize: '50px', color: '#37EAFF' }" slot="suffix" type="search" class="certain-category-icon" />
 | 
						||
                </a-input>
 | 
						||
              </a-auto-complete>
 | 
						||
            </div>
 | 
						||
            <div class="filter-box">
 | 
						||
              <div @click="selectItem(item)" class="filter-item" v-for="item in mapFilters" :key="item.id" :class="{ selected: item.selected }">
 | 
						||
                <span>{{ item.label }}</span>
 | 
						||
                <span>{{ item.count }}</span>
 | 
						||
              </div>
 | 
						||
            </div>
 | 
						||
          </div>
 | 
						||
        </div>
 | 
						||
        <video class="video" loop muted autoplay src="/media/footer.webm"></video>
 | 
						||
      </div>
 | 
						||
 | 
						||
      <div class="left-icon" />
 | 
						||
 | 
						||
      <div class="right-icon" />
 | 
						||
    </div>
 | 
						||
 | 
						||
<!--    <Map />-->
 | 
						||
 | 
						||
  </div>
 | 
						||
</template>
 | 
						||
 | 
						||
<script>
 | 
						||
import mapFilters from "@/config/mapFilters";
 | 
						||
const centerBg = require('@/assets/peakCoalImages/center/center-content-bg.png')
 | 
						||
import WZDialog from "@/components/WZDialog";
 | 
						||
import SDJCYDialog from "@/components/SDJCYDialog";
 | 
						||
import ZKZDialog from "@/components/ZKZDialog";
 | 
						||
import GBZDialog from "@/components/GBZDialog";
 | 
						||
import CEMSDialog from "@/components/CEMSDialog";
 | 
						||
import pointDialog from '@/components/PointDialog'
 | 
						||
import {mapState} from "vuex";
 | 
						||
export default {
 | 
						||
  name: "PeakCoalView",
 | 
						||
  components: {},
 | 
						||
  data() {
 | 
						||
    return {
 | 
						||
      autoStyle: {},
 | 
						||
      centerBg,
 | 
						||
      showFilter: false,
 | 
						||
      mapFilters,
 | 
						||
      // 资源搜索内容
 | 
						||
      resourceSearchText: '',
 | 
						||
      resourceList: [],
 | 
						||
      showCamera: false
 | 
						||
    }
 | 
						||
  },
 | 
						||
  computed: {
 | 
						||
    ...mapState({
 | 
						||
      title: state => state.system.title,
 | 
						||
    })
 | 
						||
  },
 | 
						||
  mounted() {
 | 
						||
    this.$log.info('test')
 | 
						||
    this.$log.error('test')
 | 
						||
    this.$log.trace('test')
 | 
						||
    this.$log.info('test')
 | 
						||
    this.$log.warn('test')
 | 
						||
    this.getAutoStyle()
 | 
						||
    window.addEventListener('resize', (e) => {
 | 
						||
      e.stopPropagation()
 | 
						||
      this.getAutoStyle()
 | 
						||
    }, false)
 | 
						||
  },
 | 
						||
  methods: {
 | 
						||
    /**
 | 
						||
     * 图层构造器
 | 
						||
     * @param { object } props
 | 
						||
     * @param { 'cems' | 'sdjcy' | 'zkz' | 'gbz' | 'ssc' | 'shisc' | 'wz' | 'jkd' } props.layerType 图层类型 jkd(监控点) wz(微站) sdjcy(深度检测仪)  zkz(质控站) gbz(国标站) ssc(洒水车) shisc(湿扫车) cems(CEMS)
 | 
						||
     * @param { object } props.data 图层类型
 | 
						||
     */
 | 
						||
    pointClick ({layerType, data}) {
 | 
						||
      // todo
 | 
						||
      if(layerType == 'wz'){
 | 
						||
        this.$open(WZDialog, {}, {
 | 
						||
          title: '微站',
 | 
						||
          width: 2000,
 | 
						||
          onClose () {
 | 
						||
            console.log(1);
 | 
						||
          }
 | 
						||
        })
 | 
						||
      } else if(layerType === 'sdjcy'){
 | 
						||
        this.$open(SDJCYDialog, {}, {
 | 
						||
          title: '深度检测仪',
 | 
						||
          width: 2000,
 | 
						||
          onClose () {
 | 
						||
            console.log(1);
 | 
						||
          }
 | 
						||
        })
 | 
						||
      }else if(layerType === 'zkz'){
 | 
						||
        this.$open(ZKZDialog, {}, {
 | 
						||
          title: '质控站',
 | 
						||
          width: 2000,
 | 
						||
          onClose () {
 | 
						||
            console.log(1);
 | 
						||
          }
 | 
						||
        })
 | 
						||
      } else if(layerType === 'gbz'){
 | 
						||
        this.$open(GBZDialog, {}, {
 | 
						||
          title: '国标站',
 | 
						||
          width: 2000,
 | 
						||
          onClose () {
 | 
						||
            console.log(1);
 | 
						||
          }
 | 
						||
        })
 | 
						||
      } else if(layerType === 'cems'){
 | 
						||
        this.$open(CEMSDialog, {}, {
 | 
						||
          title: 'CEMS',
 | 
						||
          width: 2000,
 | 
						||
          onClose () {
 | 
						||
            console.log(1);
 | 
						||
          }
 | 
						||
        })
 | 
						||
      } else if (layerType === 'jkd'){
 | 
						||
        this.$open(pointDialog, {}, {
 | 
						||
          title: '监控点',
 | 
						||
          width: 2000,
 | 
						||
          onClose () {
 | 
						||
            console.log(1);
 | 
						||
          }
 | 
						||
        })
 | 
						||
      }
 | 
						||
    },
 | 
						||
    getAutoStyle() {
 | 
						||
      const {scale, origin} = this.getScale()
 | 
						||
      this.autoStyle = {
 | 
						||
        transform: `scale(${scale})`,
 | 
						||
        transformOrigin: origin
 | 
						||
      }
 | 
						||
    },
 | 
						||
    getScale() {
 | 
						||
      let scale = 1
 | 
						||
      let origin = 'top center'
 | 
						||
      const baseWidth = 9450
 | 
						||
      const baseHeight = 3000
 | 
						||
      const innerWidth = window.innerWidth
 | 
						||
      const innerHeight = window.innerHeight
 | 
						||
      const widthScale = innerWidth / baseWidth
 | 
						||
      const scaleHeight = baseHeight * widthScale
 | 
						||
      if (scaleHeight <= innerHeight) {
 | 
						||
        origin = 'left top'
 | 
						||
        scale = widthScale
 | 
						||
        if (scale > 1) {
 | 
						||
          origin = 'left top'
 | 
						||
        }
 | 
						||
      } else {
 | 
						||
        scale = innerHeight / baseHeight
 | 
						||
      }
 | 
						||
      return {scale, origin}
 | 
						||
    },
 | 
						||
    selectItem (item) {
 | 
						||
      item.selected = !item.selected
 | 
						||
      this.$evBus.$emit('setVisibility',  item.id, item.selected)
 | 
						||
    },
 | 
						||
    onChange (text) {
 | 
						||
 | 
						||
    }
 | 
						||
  }
 | 
						||
}
 | 
						||
</script>
 | 
						||
<style>
 | 
						||
body, html, #__nuxt, #__layout {
 | 
						||
  width: 100%;
 | 
						||
  height: 100%;
 | 
						||
  background-color: #000;
 | 
						||
  overflow: hidden;
 | 
						||
}
 | 
						||
 | 
						||
.list-enter-active, .list-leave-active {
 | 
						||
  transition: all 0.5s;
 | 
						||
}
 | 
						||
 | 
						||
.list-enter, .list-leave-to
 | 
						||
  /* .list-leave-active for below version 2.1.8 */
 | 
						||
{
 | 
						||
  opacity: 0;
 | 
						||
  transform: translateY(30px);
 | 
						||
}
 | 
						||
</style>
 | 
						||
<style scoped lang="less">
 | 
						||
@import "assets/styles/mixin";
 | 
						||
 | 
						||
.peak-coal-content {
 | 
						||
  height: 3000px;
 | 
						||
  width: 9450px;
 | 
						||
  overflow: hidden;
 | 
						||
  position: relative;
 | 
						||
  user-select: none;
 | 
						||
 | 
						||
  .point-none {
 | 
						||
    pointer-events: none;
 | 
						||
  }
 | 
						||
  .point {
 | 
						||
    pointer-events: auto;
 | 
						||
  }
 | 
						||
  .container {
 | 
						||
    position: absolute;
 | 
						||
    left: 0;
 | 
						||
    top: 0;
 | 
						||
    bottom: 0;
 | 
						||
    right: 0;
 | 
						||
    z-index: 2;
 | 
						||
  }
 | 
						||
 | 
						||
  .header-content {
 | 
						||
    position: absolute;
 | 
						||
    top: 0px;
 | 
						||
    height: 507px;
 | 
						||
    width: 100%;
 | 
						||
    z-index: 2;
 | 
						||
    font-family: AlimamaShuHeiTi-Bold;
 | 
						||
    font-size: 116.67px;
 | 
						||
    color: #D8F0FF;
 | 
						||
    letter-spacing: 7.68px;
 | 
						||
    text-align: center;
 | 
						||
    text-shadow: 0 0 11px #000000;
 | 
						||
    font-weight: 700;
 | 
						||
    line-height: 148px;
 | 
						||
    padding-top: 110px;
 | 
						||
    .text {
 | 
						||
      position: absolute;
 | 
						||
      width: 100%;
 | 
						||
      z-index: 1;
 | 
						||
      top: 200px;
 | 
						||
      > p {
 | 
						||
        margin: 0;
 | 
						||
      }
 | 
						||
    }
 | 
						||
    .video {
 | 
						||
      height: 464px;
 | 
						||
      width: 100%;
 | 
						||
      object-fit: fill;
 | 
						||
    }
 | 
						||
 | 
						||
    .suntitle {
 | 
						||
      font-size: 80px;
 | 
						||
      line-height: 100px;
 | 
						||
    }
 | 
						||
 | 
						||
  }
 | 
						||
  .body-content {
 | 
						||
    position: absolute;
 | 
						||
    height: 100%;
 | 
						||
    width: 100%;
 | 
						||
 | 
						||
    .left-content {
 | 
						||
      position: absolute;
 | 
						||
      left: 0px;
 | 
						||
      top: 136px;
 | 
						||
      width: 2935px;
 | 
						||
      height: 2721px;
 | 
						||
      .bg("~/assets/peakCoalImages/left/left-content-bg.png", center, 60px);
 | 
						||
      padding: 300px 476px 100px 412px;
 | 
						||
      perspective: 1000px;
 | 
						||
      z-index: 2;
 | 
						||
      .left-data-panel {
 | 
						||
        height: 100%;
 | 
						||
        width: 100%;
 | 
						||
        transform: rotateY(2deg)  ;
 | 
						||
        transform-origin: left center;
 | 
						||
      }
 | 
						||
    }
 | 
						||
 | 
						||
    .right-content {
 | 
						||
      position: absolute;
 | 
						||
      right: 0px;
 | 
						||
      top: 136px;
 | 
						||
      width: 2935px;
 | 
						||
      height: 2721px;
 | 
						||
      .bg("~/assets/peakCoalImages/right/right-content-bg.png", center, 60px);
 | 
						||
      padding: 300px 476px 100px 480px;
 | 
						||
      perspective: 1000px;
 | 
						||
      z-index: 2;
 | 
						||
 | 
						||
      .right-data-panel {
 | 
						||
        height: 100%;
 | 
						||
        width: 100%;
 | 
						||
        transform: rotateY(-2deg);
 | 
						||
        transform-origin: right center;
 | 
						||
      }
 | 
						||
    }
 | 
						||
 | 
						||
    .center-content {
 | 
						||
      position: absolute;
 | 
						||
      left: 50%;
 | 
						||
      top: 411px;
 | 
						||
      transform: translateX(-50%);
 | 
						||
      width: 4383px;
 | 
						||
      height: 2628px;
 | 
						||
      z-index: 1;
 | 
						||
      .container {
 | 
						||
        position: absolute;
 | 
						||
        left: 50%;
 | 
						||
        transform: translateX(-50%);
 | 
						||
        top: -384px;
 | 
						||
        height: 3000px;
 | 
						||
        width: 9450px;
 | 
						||
        .bg("~/assets/peakCoalImages/bg.png");
 | 
						||
        z-index: 2;
 | 
						||
        pointer-events: none;
 | 
						||
 | 
						||
      }
 | 
						||
      .center-bg {
 | 
						||
        position: absolute;
 | 
						||
        width: 100%;
 | 
						||
        height: 100%;
 | 
						||
        left: 0;
 | 
						||
        top: 0;
 | 
						||
        right: 0;
 | 
						||
        bottom: 0;
 | 
						||
        z-index: 3;
 | 
						||
        pointer-events: none;
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  .footer-content {
 | 
						||
    position: absolute;
 | 
						||
    bottom: -44px;
 | 
						||
    width: 100%;
 | 
						||
    height: 220px;
 | 
						||
    z-index: 2;
 | 
						||
    .div {
 | 
						||
      position: absolute;
 | 
						||
      width: 100%;
 | 
						||
      z-index: 1;
 | 
						||
    }
 | 
						||
    .video {
 | 
						||
      height: 220px;
 | 
						||
      width: 100%;
 | 
						||
      object-fit: fill;
 | 
						||
    }
 | 
						||
    .footer-btn {
 | 
						||
      cursor: pointer;
 | 
						||
      position: absolute;
 | 
						||
      top: 66px;
 | 
						||
      font-family: AlimamaShuHeiTi-Bold;
 | 
						||
      font-size: 50px;
 | 
						||
      color: #D8F0FF;
 | 
						||
      letter-spacing: 3.29px;
 | 
						||
      text-shadow: 0 0 25px rgba(0,145,255,0.50);
 | 
						||
      font-weight: 700;
 | 
						||
      padding-left: 120px;
 | 
						||
      &.map-filter {
 | 
						||
        right: 3062px;
 | 
						||
        background: url('~/assets/images/map/filter/导航-点位.png') left center no-repeat;
 | 
						||
        background-size: 106px 111px;
 | 
						||
      }
 | 
						||
 | 
						||
      &.video-btn {
 | 
						||
        left: 3014px;
 | 
						||
        background: url('~/assets/images/map/filter/导航-监控.png') left center no-repeat;
 | 
						||
        background-size: 106px 111px;
 | 
						||
      }
 | 
						||
    }
 | 
						||
 | 
						||
    .camera-list {
 | 
						||
      position: absolute;
 | 
						||
      width: 2332px;
 | 
						||
      bottom: -40px;
 | 
						||
      left: 50%;
 | 
						||
      transform: translateX(-50%);
 | 
						||
      height: 370px;
 | 
						||
      display: flex;
 | 
						||
      justify-content: space-between;
 | 
						||
      align-items: center;
 | 
						||
      .camera-itm {
 | 
						||
        padding: 14px;
 | 
						||
        box-sizing: border-box;
 | 
						||
        height: 100%;
 | 
						||
        width: 524px;
 | 
						||
        background-image: linear-gradient(61deg, rgba(8,31,55,0.80) 0%, rgba(18,50,81,0.80) 100%);
 | 
						||
        .player {
 | 
						||
          background-color: #000;
 | 
						||
          width: 100%;
 | 
						||
          height: 100%;
 | 
						||
        }
 | 
						||
      }
 | 
						||
    }
 | 
						||
 | 
						||
    .filters {
 | 
						||
      position: absolute;
 | 
						||
      bottom: 20px;
 | 
						||
      right: 1470px * 2;
 | 
						||
      width: 528px;
 | 
						||
      .search {
 | 
						||
        height: 142px;
 | 
						||
        background: rgba(20, 64, 114, 0.7);
 | 
						||
        border: 1px solid rgba(31, 97, 173, 0.84);
 | 
						||
        ::v-deep {
 | 
						||
          .ant-select-auto-complete.ant-select .ant-input {
 | 
						||
            height: 142px;
 | 
						||
            font-family: MicrosoftYaHei-Bold;
 | 
						||
            font-size: 50px;
 | 
						||
            color: #37EAFF;
 | 
						||
            letter-spacing: 0;
 | 
						||
            line-height: 34.25px;
 | 
						||
            font-weight: 700;
 | 
						||
          }
 | 
						||
          .ant-select-selection {
 | 
						||
            background: transparent;
 | 
						||
          }
 | 
						||
          .ant-select-selection__rendered {
 | 
						||
            line-height: 142px;
 | 
						||
          }
 | 
						||
        }
 | 
						||
      }
 | 
						||
 | 
						||
      .filter-box {
 | 
						||
        margin-top: 20px;
 | 
						||
        background: rgba(20, 64, 114, 0.7);
 | 
						||
        border: 1px solid rgba(31, 97, 173, 0.84);
 | 
						||
        padding: 0 40px 40px;
 | 
						||
        box-sizing: border-box;
 | 
						||
        .filter-item {
 | 
						||
          font-family: MicrosoftYaHei;
 | 
						||
          font-size: 38.89px;
 | 
						||
          color: rgba(255, 255, 255, 0.55);
 | 
						||
          letter-spacing: 2.56px;
 | 
						||
          font-weight: 400;
 | 
						||
          display: flex;
 | 
						||
          justify-content: space-between;
 | 
						||
          align-items: center;
 | 
						||
          height: 52px;
 | 
						||
          line-height: 52px;
 | 
						||
          margin-top: 40px;
 | 
						||
          cursor: pointer;
 | 
						||
          &.selected {
 | 
						||
            color: #fff;
 | 
						||
          }
 | 
						||
        }
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
 | 
						||
  .left-icon {
 | 
						||
    z-index: 2;
 | 
						||
    position: absolute;
 | 
						||
    left: 0px;
 | 
						||
    width: 531px;
 | 
						||
    height: 100%;
 | 
						||
    .bg("~/assets/peakCoalImages/left/left-icon.png", center, center);
 | 
						||
  }
 | 
						||
 | 
						||
  .right-icon {
 | 
						||
    z-index: 2;
 | 
						||
    position: absolute;
 | 
						||
    right: 0px;
 | 
						||
    width: 531px;
 | 
						||
    height: 100%;
 | 
						||
    .bg("~/assets/peakCoalImages/right/right-icon.png", center, center);
 | 
						||
  }
 | 
						||
}
 | 
						||
</style>
 |