Newer
Older
baseResourceFront / src / views / dataCockpit / dataPanel.vue
yangqianqian on 23 Mar 2021 12 KB 修改UI
<template>
  <div class="data-panel">
    <div class="sub-data-block first-block">
      <div class="subTitle">
        <span v-text="counts.labelText"/>采集量(人)
      </div>

      <div class="statisBlock">
        <span class="bigSize" v-text="counts.collect"/>
      </div>

      <div class="statisBlockCompare">
        同比去年<span :class="collectGrowthYear?'positiveGrowth':'negativeGrowth'" v-text="comp.collectLastYear" />
      </div>
      <div class="statisBlockCompare">
        环比上月<span :class="collectGrowthMonth?'positiveGrowth':'negativeGrowth'" v-text="comp.collectLastMonth" />
      </div>
    </div>

    <div class="sub-data-block">
      <div class="subTitle">
        <span v-text="counts.labelText"/>识别量(人)
      </div>

      <div class="statisBlock">
        <span class="bigSize" v-text="counts.check"/>
      </div>

      <div class="statisBlockCompare">
        同比去年<span :class="checkGrowthYear?'positiveGrowth':'negativeGrowth'" v-text="comp.checkLastYear" />
      </div>
      <div class="statisBlockCompare">
        环比上月<span :class="checkGrowthMonth?'positiveGrowth':'negativeGrowth'" v-text="comp.checkLastMonth" />
      </div>
    </div>

    <div class="sub-data-block">
      <div class="subTitle">
        <span v-text="counts.labelText"/>虹膜入库量(人)
      </div>

      <div class="statisBlock">
        <span class="bigSize" v-text="counts.regist"/>
      </div>

      <div class="statisBlockCompare">
        同比去年<span :class="registGrowthYear?'positiveGrowth':'negativeGrowth'" v-text="comp.registLastYear" />
      </div>
      <div class="statisBlockCompare">
        环比上月<span :class="registGrowthMonth?'positiveGrowth':'negativeGrowth'" v-text="comp.registLastMonth" />
      </div>
    </div>

    <div class="sub-data-block">
      <div class="subTitle">
        <span v-text="counts.labelText"/>报警量(人)
      </div>

      <div class="statisBlock" style="margin-top: 50px;">
        采集报警量:<span class="middleSize" v-text="counts.collectAlarm"/>
      </div>
      <div class="statisBlock">
        识别报警量:<span class="middleSize" v-text="counts.checkAlarm"/>
      </div>
    </div>

    <div class="sub-data-block last-block">
      <div class="subTitle">
        <span v-text="counts.labelText"/>报警量占比
      </div>

      <div class="statisBlock" style="margin-top: 50px;">
        采集报警占比:<span class="middleSize" v-text="comp.collectAlarmRate"/>
      </div>
      <div class="statisBlock">
        识别报警占比:<span class="middleSize" v-text="comp.checkAlarmRate"/>
      </div>
    </div>
  </div>
</template>

<script>
import request from '@/utils/request'
import { formatToString, format, getLastMonth, getLastMonthDate } from '@/utils/calendarUtil'
export default {
  name: 'DataPanel',
  data() {
    return {
      dateShortcuts: {
        today: '', // 今日日期字符串
        thisMonth: '', // 本月月初字符串
        lastMonthStart: '', // 上月月初字符串
        lastMonth: '', // 上月今日字符串
        lastYearMonthStart: '', // 上年同期月初字符串
        lastYearMonth: '' // 上年同期字符串
      },
      counts: {
        labelText: '本月',
        collect: 0, // 本期采集人数
        check: 0, // 本期识别人数
        regist: 0, // 本期虹膜入库人数
        collectAlarm: 0, // 本期采集报警数
        checkAlarm: 0 // 本期识别报警数
      },
      comp: {
        collectLastYear: '12%', // 采集量同比
        collectLastMonth: '-16%', // 采集量环比
        checkLastYear: '12%', // 识别量同比
        checkLastMonth: '-16%', // 识别量环比
        registLastYear: '12%', // 入库量同比
        registLastMonth: '-16%', // 入库量环比
        collectAlarmRate: '11.6%', // 采集报警占比
        checkAlarmRate: '5.1%' // 识别报警占比
      },
      collectGrowthYear: '',
      collectGrowthMonth: '',
      checkGrowthYear: '',
      checkGrowthMonth: '',
      registGrowthYear: '',
      registGrowthMonth: ''
    }
  },
  mounted() {
    this.initDateShortcuts()
  },
  methods: {
    // 初始化查询的日期
    initDateShortcuts() {
      const now = new Date()
      const lastYear = now.getFullYear() - 1
      const thisMonth = now.getMonth() + 1
      let lastMonth = now.getMonth()
      if (lastMonth === 0) {
        lastMonth = 12
      }

      this.dateShortcuts.today = formatToString(now, 'DATE') // 今日
      this.dateShortcuts.thisMonth = formatToString(now, 'MONTH') + '-01' // 月初

      this.dateShortcuts.lastMonthStart = getLastMonth() + '-01' // 上月初
      this.dateShortcuts.lastMonth = getLastMonthDate() // 上月同期

      this.dateShortcuts.lastYearMonthStart = lastYear + '-' + format(thisMonth) + '-01' // 上年同期月初
      this.dateShortcuts.lastYearMonth = this.dateShortcuts.lastYearMonthStart.substring(0, 8) + this.dateShortcuts.today.substring(8, 10)

      // 初始化日期之后查询当月数据
      this.queryDataThisMonth()
    },
    // 查询本月数据
    queryDataThisMonth() {
      const that = this
      request({
        url: '/bigScreen/getMonthAnalysis',
        method: 'post',
        params: {
          startDate: this.dateShortcuts.thisMonth,
          endDate: this.dateShortcuts.today
        }
      }).then(response => {
        if (response.code === 200) {
          that.counts.collect = response.data.colCount
          that.counts.check = response.data.recCount
          that.counts.regist = response.data.colSaveCount
          that.counts.collectAlarm = response.data.colAlarmCount
          that.counts.checkAlarm = response.data.recAlarmCount

          if (that.counts.collect === 0) {
            that.comp.collectAlarmRate = '0.0%'
          } else {
            that.comp.collectAlarmRate = ((that.counts.collectAlarm / that.counts.collect) * 100).toFixed(1) + '%'
          }
          if (that.counts.check === 0) {
            that.comp.checkAlarmRate = '0.0%'
          } else {
            that.comp.checkAlarmRate = ((that.counts.checkAlarm / that.counts.check) * 100).toFixed(1) + '%'
          }

          // 查询上月和上年数据
          that.queryDataLastMonth()
          that.queryDataLastYearMonth()
        }
      })
    },
    // 查询上月数据
    queryDataLastMonth() {
      const that = this
      request({
        url: '/bigScreen/getMonthAnalysis',
        method: 'post',
        params: {
          startDate: this.dateShortcuts.lastMonthStart,
          endDate: this.dateShortcuts.lastMonth
        }
      }).then(response => {
        if (response.code === 200) {
          // 上月数据
          const lastCollect = response.data.colCount
          const lastCheck = response.data.recCount
          const lastRegist = response.data.colSaveCount

          // 计算环比数据
          that.collectGrowthMonth = that.counts.collect - lastCollect >= 0
          if (lastCollect === 0) {
            that.comp.collectLastMonth = '+∞'
          } else {
            that.comp.collectLastMonth = ((that.counts.collect - lastCollect) / lastCollect * 100).toFixed(2) + '%'
          }

          that.checkGrowthMonth = that.counts.check - lastCheck >= 0
          if (lastCheck === 0) {
            that.comp.checkLastMonth = '+∞'
          } else {
            that.comp.checkLastMonth = ((that.counts.check - lastCheck) / lastCheck * 100).toFixed(2) + '%'
          }

          that.registGrowthMonth = that.counts.regist - lastRegist >= 0
          if (lastRegist === 0) {
            that.comp.registLastMonth = '+∞'
          } else {
            that.comp.registLastMonth = ((that.counts.regist - lastRegist) / lastRegist * 100).toFixed(2) + '%'
          }
        }
      })
    },
    // 查询去年同期数据
    queryDataLastYearMonth() {
      const that = this
      request({
        url: '/bigScreen/getMonthAnalysis',
        method: 'post',
        params: {
          startDate: this.dateShortcuts.lastYearMonthStart,
          endDate: this.dateShortcuts.lastYearMonth
        }
      }).then(response => {
        if (response.code === 200) {
          // 上年同期数据
          const lastCollect = response.data.colCount
          const lastCheck = response.data.recCount
          const lastRegist = response.data.colSaveCount

          // 计算同比数据
          that.collectGrowthYear = that.counts.collect - lastCollect >= 0
          if (lastCollect === 0) {
            that.comp.collectLastYear = '+∞'
          } else {
            that.comp.collectLastYear = ((that.counts.collect - lastCollect) / lastCollect * 100).toFixed(2) + '%'
          }

          that.checkGrowthYear = that.counts.check - lastCheck >= 0
          if (lastCheck === 0) {
            that.comp.checkLastYear = '+∞'
          } else {
            that.comp.checkLastYear = ((that.counts.check - lastCheck) / lastCheck * 100).toFixed(2) + '%'
          }

          that.registGrowthYear = that.counts.regist - lastRegist >= 0
          if (lastRegist === 0) {
            that.comp.registLastYear = '+∞'
          } else {
            that.comp.registLastYear = ((that.counts.regist - lastRegist) / lastRegist * 100).toFixed(2) + '%'
          }
        }
      })
    }
  }
}
</script>

<style scoped>
  .data-panel {
    height: 320px;
  }

  .sub-data-block {
    width: calc((100vw - 120px) / 5);
    height: 300px;
    border: 2px solid #3370E3;
    background-color: rgba(41, 85, 252, 0.2);
    float: left;
    margin: 20px 10px 0px 10px;
  }
  .first-block {
    margin-left: 20px;
  }
  .last-block {
    margin-right: 20px;
  }

  .subTitle {
    font-weight: bold;
    font-family: '微软雅黑',serif;
    color: #fff;
    font-size: 24px;
    padding: 10px 10px 10px 30px;
    background: url("images/sub-title-background.png") no-repeat;
  }

  .statisBlock {
    text-align: center;
    margin: 30px 10px 10px 10px;
    padding: 10px;
    color: #fff;
    font-weight: bold;
    letter-spacing: 1px;
    font-size: 24px;
  }

  .bigSize {
    font-size: 72px;
  }

  .middleSize {
    font-size: 36px;
  }

  .statisBlockCompare {
    text-align: left;
    margin: 10px 10px 10px 30px;
    padding: 5px;
    color: #fff;
    font-weight: bold;
    letter-spacing: 1px;
    font-size: 24px;
  }

  .positiveGrowth {
    color: #00ff00;
    padding-left: 20px;
    font-size: 30px;
  }
  .negativeGrowth {
    color: #ff0000;
    padding-left: 20px;
    font-size: 30px;
  }

  @media(max-width: 1440px) {
    .data-panel {
      height: 285px;
    }

    .sub-data-block {
      width: calc((100vw - 108px) / 5);
      margin: 15px 9px 0px 9px;
      height: 270px;
    }
    .first-block {
      margin-left: 18px;
    }
    .last-block {
      margin-right: 18px;
    }

    .subTitle {
      font-size: 20px;
      padding: 9px 9px 9px 24px;
    }

    .statisBlock {
      margin: 24px 9px 9px 9px;
      padding: 9px 0px;
      font-size: 20px;
    }

    .bigSize {
      font-size: 64px;
    }

    .middleSize {
      font-size: 27px;
    }

    .statisBlockCompare {
      margin: 9px 9px 9px 27px;
      padding: 4px;
      font-size: 21px;
    }

    .positiveGrowth {
      padding-left: 15px;
      font-size: 27px;
    }
    .negativeGrowth {
      padding-left: 15px;
      font-size: 27px;
    }
  }

  @media(max-width: 1366px) {
    .data-panel {
      height: 225px;
    }

    .sub-data-block {
      width: calc((100vw - 96px) / 5);
      margin: 12px 8px 0px 8px; /* top right bottom left */
      height: 210px;
    }
    .first-block {
      margin-left: 16px;
    }
    .last-block {
      margin-right: 16px;
    }

    .subTitle {
      font-size: 16px;
      padding: 8px 8px 8px 20px;
    }

    .statisBlock {
      margin: 21px 8px 8px 8px;
      padding: 4px 0px;
      font-size: 16px;
    }

    .bigSize {
      font-size: 48px;
    }

    .middleSize {
      font-size: 28px;
    }

    .statisBlockCompare {
      margin: 8px 8px 8px 24px;
      padding: 4px 0px;
      font-size: 15px;
    }

    .positiveGrowth {
      padding-left: 10px;
      font-size: 20px;
    }
    .negativeGrowth {
      padding-left: 10px;
      font-size: 20px;
    }
  }
</style>