Newer
Older
baseResourceFront / src / views / statistics / maintainStatistics.vue
<template>
  <div class="app-container">
    <div class="statistic-container">
      <el-row class="chart-tools">
        <el-col :span="5" >
          <el-date-picker
            v-model="listQuery.year"
            type="year"
            placeholder="请选择统计年份"
            value-format="yyyy"
            size="small"
            @change="fetchData"/>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24" class="chart-body" >
          <div class="chart-body-title">年度养护数量统计</div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="16" class="chart-body" >
          <ve-histogram :data="chartList" :settings="chartSettings" />
        </el-col>
        <el-col :span="8" class="chart-body">
          <el-table :data="list" class="table" border height="400">
            <el-table-column v-for="column in columns" :key="column.value" :label="column.text" :width="column.width" :align="column.align">
              <template slot-scope="scope">
                <span>{{ scope.row[column.value] }}</span>
              </template>
            </el-table-column>
          </el-table>
        </el-col>
      </el-row>
    </div>
  </div>
</template>

<script>
import { countByMonth } from '@/api/system/statistics'

export default {
  name: 'MaintainStatistics',
  data() {
    return {
      listQuery: {
        year: ''
      },
      columns: [
        {
          text: '时间',
          value: 'month',
          align: 'center'
        },
        {
          text: '桥梁',
          value: 'bridge',
          align: 'center'
        },
        {
          text: '次数',
          value: 'count',
          align: 'center'
        }
      ], // 显示列
      list: [], // 列表数据
      chartList: {
        'columns': ['时间'],
        'rows': []
      },
      chartSettings: {
        stack: { '时间': [] }
      }
    }
  },
  watch: {},
  mounted() {
    this.listQuery.year = new Date().getFullYear().toString()
    this.fetchData()
  },
  methods: {
    // 获取统计数据
    fetchData() {
      countByMonth(this.listQuery).then(response => {
        if (response.code === 200) {
          console.log(response)

          const that = this
          this.chartList.rows = []
          for (let i = 1; i <= 12; i++) {
            if (i < 10) {
              this.chartList.rows.push({
                '时间': this.listQuery.year + '-0' + i
              })
            } else {
              this.chartList.rows.push({
                '时间': this.listQuery.year + '-' + i
              })
            }
          }

          response.data.forEach(bridge => {
            Object.keys(bridge).forEach(function(k) {
              if (parseInt(k) === that.baseConfig.bridges[0].id) {
                // columns属性
                that.chartList.columns.push(that.baseConfig.bridges[0].name)

                // rows属性
                bridge[k].forEach(count => {
                  const index = parseInt(count.name.substring(5, 7)) - 1
                  that.chartList.rows[index][that.baseConfig.bridges[0].name] = count.count

                  if (count.count > 0) {
                    that.list.push({
                      'month': count.name,
                      'bridge': that.baseConfig.bridges[0].name,
                      'count': count.count
                    })
                  }
                })

                // stack属性
                that.chartSettings.stack['时间'].push(that.baseConfig.bridges[0].name)
              } else if (parseInt(k) === that.baseConfig.bridges[1].id) {
                // columns属性
                that.chartList.columns.push(that.baseConfig.bridges[1].name)

                // rows属性
                bridge[k].forEach(count => {
                  const index = parseInt(count.name.substring(5, 7)) - 1
                  that.chartList.rows[index][that.baseConfig.bridges[1].name] = count.count

                  if (count.count > 0) {
                    that.list.push({
                      'month': count.name,
                      'bridge': that.baseConfig.bridges[1].name,
                      'count': count.count
                    })
                  }
                })

                // stack属性
                that.chartSettings.stack['时间'].push(that.baseConfig.bridges[1].name)
              } else if (parseInt(k) === that.baseConfig.bridges[2].id) {
                // columns属性
                that.chartList.columns.push(that.baseConfig.bridges[2].name)

                // rows属性
                bridge[k].forEach(count => {
                  const index = parseInt(count.name.substring(5, 7)) - 1
                  that.chartList.rows[index][that.baseConfig.bridges[2].name] = count.count

                  if (count.count > 0) {
                    that.list.push({
                      'month': count.name,
                      'bridge': that.baseConfig.bridges[2].name,
                      'count': count.count
                    })
                  }
                })

                // stack属性
                that.chartSettings.stack['时间'].push(that.baseConfig.bridges[2].name)
              } else if (parseInt(k) === that.baseConfig.bridges[3].id) {
                // columns属性
                that.chartList.columns.push(that.baseConfig.bridges[3].name)

                // rows属性
                bridge[k].forEach(count => {
                  const index = parseInt(count.name.substring(5, 7)) - 1
                  that.chartList.rows[index][that.baseConfig.bridges[3].name] = count.count

                  if (count.count > 0) {
                    that.list.push({
                      'month': count.name,
                      'bridge': that.baseConfig.bridges[3].name,
                      'count': count.count
                    })
                  }
                })

                // stack属性
                that.chartSettings.stack['时间'].push(that.baseConfig.bridges[3].name)
              }
            })
          })
        }
      })
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  .app-container{
    .statistic-container{
      background-color: #fffffb !important;
      height: auto;
      min-height: calc(100vh - 158px);
      padding:0px;
      border: 1px solid #d3dce6;
      .chart-tools{
        background-color: #f2f2f2;
        line-height: 40px;
        padding-left: 10px;
        padding-right: 5px;
        .chart-tool-text{
          padding: 5px;
          line-height: 16px;
          margin-top:5px;
          font-size:13px;
        }
        .chart-tool-button{
          padding: 5px;
          line-height: 16px;
          margin-top:5px;
          font-size:13px;
        }
        .chart-tool-button:hover{
          background-color: #8cc5ff;
          cursor: pointer;
          color:white
        }
        .chart-tool-button:active{
          background-color: #8cc5ff;
          color:white
        }
        .editor--datetimerange.el-input__inner{
          width: 300px;
        }
      }
      .chart-title{
        margin: auto;
        text-align: center;
        margin-top: 15px;
      }
    }
    .chart-body{
      padding:15px;
      .chart-body-title {
        font-size:22px;
        text-align: center;
        background-color: white;
        padding-top: 20px;
      }
      .chart-body-select{
        margin-top:20px;
        text-align: center;
        .select-label{
          font-size: 15px;
          color: #606266;
          line-height: 40px;
          font-weight:500;
          padding: 0 6px 0 0
        }
      }
    }
  }
</style>