Newer
Older
eryuan_iris_temperature_front / src / views / dashboard / components / mapPicture.vue
[wangxitong] on 30 May 2022 12 KB first commit
<template>
  <el-row style="margin-bottom: 30px">
    <el-tabs v-model="activeName" type="card">
      <el-tab-pane v-for="item in tabList" :key="item.value" :label="item.label" :name="item.name" class="tab-pane">
        <div :style="item.style" class="y_bj">
          <div :style="item.cover" class="cover">{{ item.name }}</div>
          <div v-for="data in item.data" :key="data.index">
            <div style="float:left">
              <div :class="[data.tclass]" class="tip-div">
                <el-row class="tip-text">当日通行人数:{{ data.value.count }}</el-row>
              </div>
              <div :class="[data.pclass]" class="point point-flicker"/>
            </div>
          </div>
        </div>
      </el-tab-pane>
    </el-tabs>
    <!--</div>-->
  </el-row>
</template>

<script>
import { peopleCountByDevice } from '@/api/statistics'
import { getDayTime } from '@/utils/dateutils'
export default {
  name: 'MapPicture',
  data() {
    const tab1Img = {
      backgroundImage: 'url(' + require('@/assets/eryuan/B1.png') + ')',
      backgroundColor: '#304156',
      backgroundRepeat: 'no-repeat',
      backgroundSize: '100%'
      // width: '70%'
    }
    const tab2Img = {
      backgroundImage: 'url(' + require('@/assets/eryuan/4.png') + ')',
      backgroundColor: '#304156',
      backgroundRepeat: 'no-repeat',
      backgroundSize: '100%'
      // width: '70%'
    }
    const cover1 = {
      top: '188px',
      marginLeft: '368px',
      fontSize: '20px'
    }
    const cover2 = {
      top: '216px',
      marginLeft: '323px',
      fontSize: '18px'
    }
    return {
      tabList: [
        { name: 'B1', label: 'B1层', style: tab1Img, cover: cover1,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-l-loc', tclass: 'tip1-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-m-loc', tclass: 'tip1-m-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-r-loc', tclass: 'tip1-r-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-r-loc1', tclass: 'tip1-r-loc1' }
          ]
        },
        { name: 'B2', label: 'B2层', style: tab1Img, cover: cover1,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-l-loc', tclass: 'tip1-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-m-loc', tclass: 'tip1-m-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-r-loc', tclass: 'tip1-r-loc' }
          ]
        },
        { name: 'B3', label: 'B3层', style: tab1Img, cover: cover1,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-l-loc', tclass: 'tip1-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-m-loc', tclass: 'tip1-m-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab1-r-loc', tclass: 'tip1-r-loc' }
          ]
        },
        { name: '二', label: '二层', style: tab2Img, cover: cover2,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab2-l-loc', tclass: 'tip2-l-loc' }
          ] },
        { name: '三', label: '三层', style: tab2Img, cover: cover2,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-l-loc', tclass: 'tip3-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-r-loc', tclass: 'tip3-r-loc' }
          ] },
        { name: '四', label: '四层', style: tab2Img, cover: cover2,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab2-l-loc', tclass: 'tip2-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab4-l-loc', tclass: 'tip4-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab4-r-loc', tclass: 'tip4-r-loc' }
          ] },
        { name: '五', label: '五层', style: tab2Img, cover: cover2,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-l-loc', tclass: 'tip3-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-r-loc', tclass: 'tip3-r-loc' }
          ] },
        { name: '六', label: '六层', style: tab2Img, cover: cover2,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-l-loc', tclass: 'tip3-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-r-loc', tclass: 'tip3-r-loc' }
          ] },
        { name: '七', label: '七层', style: tab2Img, cover: cover2,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-l-loc', tclass: 'tip3-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-r-loc', tclass: 'tip3-r-loc' }
          ] },
        { name: '八', label: '八层', style: tab2Img, cover: cover2,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-l-loc', tclass: 'tip3-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-r-loc', tclass: 'tip3-r-loc' }
          ] },
        { name: '九', label: '九层', style: tab2Img, cover: cover2,
          data: [
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-l-loc', tclass: 'tip3-l-loc' },
            { value: { count: '-', normal: '0', abnormal: '0' }, pclass: 'point-tab3-r-loc', tclass: 'tip3-r-loc' }
          ] }
      ],
      activeName: 'B1',
      tab1: {
        left: {
          count: '-',
          normal: '0',
          abnormal: '0'
        },
        right: {
          temp: '0',
          normal: '0',
          abnormal: '0'
        }
      },
      tab2: {
        left: {
          count: '-',
          normal: '0',
          abnormal: '0'
        },
        right: {
          temp: '0',
          normal: '0',
          abnormal: '0'
        }
      },
      tab3: {
        left: {
          count: '-',
          countSeven: '0'
        },
        right: {
          count: '-',
          countSeven: '0'
        }
      },
      tab4: {
        print: '0',
        printSeven: '0'
      }
    }
  },
  mounted() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      const startTime = getDayTime(new Date().getTime()).Format('yyyy-MM-dd') + ' 00:00:00'
      const endTime = getDayTime(new Date().getTime()).Format('yyyy-MM-dd') + ' 23:59:59'
      const listQuery = {
        startTime: startTime,
        endTime: endTime
      }
      // 获取当日数据
      peopleCountByDevice(listQuery).then(response => {
        const data = response.data
        for (const tab of this.tabList) {
          if (tab.name === '三' || tab.name === '五' || tab.name === '六' || tab.name === '七' || tab.name === '八' || tab.name === '九') {
            tab.data[0].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '8') !== -1
            })[0].count
            tab.data[1].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '9') !== -1
            })[0].count
          } else if (tab.name === '四') {
            tab.data[0].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '信展') !== -1
            })[0].count
            tab.data[1].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '8') !== -1
            })[0].count
            tab.data[2].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '9') !== -1
            })[0].count
          } else if (tab.name === 'B1') {
            tab.data[0].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '8') !== -1
            })[0].count
            tab.data[1].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '9号西闸机') !== -1
            })[0].count
            tab.data[2].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '9号东闸机') !== -1
            })[0].count
            tab.data[3].value.count = data.filter(item => {
              return item.deviceName.indexOf(tab.label + '9号西-1') !== -1
            })[0].count
          } else if (tab.name === '二') {
            if (data.filter(item => {
              return item.deviceName.indexOf(tab.label) !== -1
            }).length !== 0) {
              tab.data[0].value.count = data.filter(item => {
                return item.deviceName.indexOf(tab.label) !== -1
              })[0].count
            }
          } else if (tab.name === 'B2' || tab.name === 'B3') {
            if (data.filter(item => {
              return item.deviceName.indexOf(tab.label) !== -1
            }).length !== 0) {
              tab.data[0].value.count = data.filter(item => {
                return item.deviceName.indexOf(tab.label + '8') !== -1
              })[0].count
              tab.data[1].value.count = data.filter(item => {
                return item.deviceName.indexOf(tab.label + '9号西闸机') !== -1
              })[0].count
              tab.data[2].value.count = data.filter(item => {
                return item.deviceName.indexOf(tab.label + '9号东闸机') !== -1
              })[0].count
            }
          }
        }
      })

      // 获取七日数据
      // const startTime1 = getDayTime(new Date().getTime() - 24 * 6 * 60 * 60 * 1000).Format('yyyy-MM-dd') + ' 00:00:00'
      // const endTime1 = getDayTime(new Date().getTime()).Format('yyyy-MM-dd') + ' 23:59:59'
      // const listQuery1 = {
      //   startTime: startTime1,
      //   endTime: endTime1
      // }
    }
  }
}
</script>

<style lang="scss" scoped>
  .y_bj {
    width: 800px;
    height: 460px;
    margin-left: 15%;
    /*text-align: center;*/
    overflow:hidden;
  }
  .tab-pane {
    text-align: center;
    background-color: #304156;
  }
  .tip-text {
    color: white;
    font-size: 8pt;
  }
  .tip-text-margin {
    margin: 3px;
  }
  .cover{
    position: absolute;
    background-color: #304156;
    color: #02fafb;
    font-weight: bolder;
    left: 15%;
    width: 25px;
    height: 25px;
    font-family: inherit;
  }
  .tip-div {
    border: 1pt solid lime;
    position: relative;
    background-color: #304156dd;
    padding: 10px;
    width: 135px;
  }
  .point {
    width: 12px;
    height: 12px;
    background-color: lime;
    border-radius: 50%;
    position: relative;
    /*display: inline-block;*/
  }
  .tip1-l-loc { margin-top: 260px; margin-left: 325px; }
  .tip1-m-loc { margin-top: 310px;margin-left: -25px }
  .tip1-r-loc { margin-top: 250px;margin-left: 10px }
  .tip1-r-loc1 { margin-top: -68px;margin-left: 463px }

  .tip2-l-loc { margin-top: 325px; margin-left: 190px; }

  .tip3-l-loc { margin-top: 253px; margin-left: 325px; }
  .tip3-r-loc { margin-top: 248px;margin-left: 115px }

  .tip4-l-loc { margin-top: 253px; margin-left: 0px; }
  .tip4-r-loc { margin-top: 248px;margin-left: 115px }

  .point-tab1-l-loc { margin-left: 468px;}
  .point-tab1-m-loc { margin-top: -50px; margin-left: 110px; }
  .point-tab1-r-loc { margin-top: 10px; margin-left: 0px; }
  .point-tab1-r-loc1 { margin-top: 5px; margin-left: 590px; }

  .point-tab2-l-loc { margin-left: 175px; }

  .point-tab3-l-loc { margin-left: 483px;}
  .point-tab3-r-loc { margin-top: 5px; margin-left: 112px; }

  .point-tab4-l-loc { margin-left: 158px;}
  .point-tab4-r-loc { margin-top: 5px; margin-left: 112px; }

  /* 设置动画前颜色 */
  .point-flicker:after {
    background-color: chartreuse;
  }

  /* 设置动画后颜色 */
  .point-flicker:before {
    background-color: rgba(0, 168, 253, 0.2);
  }

  /* 设置动画 */
  .point-flicker:before,
  .point-flicker:after {
    content: '';
    width: 20px;
    height: 20px;
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -10px;
    margin-top: -10px;
    border-radius: 50%;
    /* CSS3 animation 属性 网址 */
    /* https://www.w3school.com.cn/cssref/pr_animation.asp */
    animation: warn 1.5s ease-out 0s infinite;
  }

  /* @keyframes 规则用于创建动画。在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果。 */
  @keyframes warn {
    0% {
      transform: scale(0.5);
      opacity: 1;
    }

    30% {
      opacity: 1;
    }

    100% {
      transform: scale(1.4);
      opacity: 0;
    }
  }
</style>