Newer
Older
smartcity_merchant_front / src / views / statistics / case.vue
wangxitong on 22 Feb 2024 4 KB first commit
<template>
  <app-container>
    <div class="search-div">
      <search-area :need-clear="false" :need-search-more="false" type="seperate" size="small" search-more-type="default" @search="fetchData" >
        <!--一般查询条件-->
        <search-item>
          <el-date-picker
            v-model="registerTime"
            type="daterange"
            format="yyyy-MM-dd"
            value-format="yyyy-MM-dd"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          />
        </search-item>
        <search-item>
          <el-select v-model="listQuery.caseType" clearable placeholder="案卷类型">
            <el-option
              v-for="item in caseTypeList"
              :key="item.typeCode"
              :label="item.typeName"
              :value="item.typeCode"
            />
          </el-select>
        </search-item>
      </search-area>
    </div>
    <el-row style="margin-top: 40px;margin-bottom: 50px">
      <el-col :span="8">
        <div ref="chart" class="chart-body" style="width:100%;"/>
      </el-col>
      <el-col :span="16">
        <div ref="chart2" class="chart-body" />
      </el-col>
    </el-row>
  </app-container>
</template>

<script>
import echarts from 'echarts'
import { getCaseType } from '@/api/seo/seo'
import { highCaseEventList } from '@/api/assess/assessDept'
import { highCaseEventByStreet } from '@/api/assess/assessDept'
export default {
  name: 'CaseStatistics',
  data() {
    return {
      query: {
        begTime: '',
        endTime: ''
      },
      listQuery: {
        begTime: '',
        endTime: '',
        caseType: ''
      },
      caseTypeList: [],
      registerTime: '',
      list: [],
      list1: []
    }
  },
  computed: {
    pieData() {
      const tmp = []
      this.list.forEach((item, index) => {
        if (item.caseMajorType) {
          const obj = {}
          obj.name = item.caseMajorType
          obj.value = item.caseNum
          tmp.push(obj)
        }
      })
      console.log(tmp)
      return tmp
    }
  },
  watch: {
    registerTime(val) {
      if (val && val.length > 0) {
        this.listQuery.begTime = val[0]
        this.listQuery.endTime = val[1]
      } else {
        this.listQuery.begTime = ''
        this.listQuery.endTime = ''
      }
    }
  },
  mounted() {
    getCaseType().then(res => {
      this.caseTypeList = res.data
    })
    this.fetchData()
  },
  methods: {
    fetchData() {
      highCaseEventList(this.listQuery).then(res => {
        this.list = res.data
        this.initChart()
      })
      // this.list1 = [{ streetName: '222222', caseNum: '22' }]
      // this.initChart1()
      highCaseEventByStreet(this.listQuery).then(res => {
        this.list1 = res.data
        this.initChart1()
      })
    },
    initChart() {
      this.chart = echarts.init(this.$refs.chart)
      this.chart.setOption({
        tooltip: {
          show: true
        },
        title: {
          text: '各大类案卷数量及占比',
          left: 'center'
        },
        color: [
          '#19d4ae', '#5ab1ef', '#fa6e86',
          '#ffb980', '#0067a6', '#c4b4e4',
          '#d87a80', '#9cbbff', '#d9d0c7',
          '#87a997', '#d49ea2', '#5b4947',
          '#7ba3a8'
        ],
        legend: {
          orient: 'vertical',
          right: 0,
          data: this.pieData.map(item => item.name)
        },
        series: [{
          name: '各大类案卷数量及占比',
          type: 'pie',
          radius: 120,
          data: this.pieData,
          label: {
            show: false
          },
          tooltip: {
            formatter: '{b}<br/>上报数: {c}({d}%)'
          }
        }]
      })
      this.chart.resize()
    },
    initChart1() {
      this.chart = echarts.init(this.$refs.chart2)
      this.chart.setOption({
        tooltip: {
          show: true
        },
        title: {
          text: '各街道案卷数量统计',
          left: 'center'
        },
        color: [
          '#19d4ae', '#5ab1ef', '#fa6e86',
          '#ffb980', '#0067a6', '#c4b4e4',
          '#d87a80', '#9cbbff', '#d9d0c7',
          '#87a997', '#d49ea2', '#5b4947',
          '#7ba3a8'
        ],
        xAxis: {
          type: 'category',
          data: this.list1.map(item => item.streetName)
        },
        yAxis: {
          type: 'value'
        },
        series: [{
          barMaxWidth: 50, // 柱图宽度
          data: this.list1.map(item => item.caseNum),
          type: 'bar',
          tooltip: {
            formatter: '{b}<br/>案卷数: {c}'
          }
        }]
      })
      this.chart.resize()
    }
  }
}
</script>

<style scoped>
.chart-container{
}
.chart-body{
  /*text-align: center;*/
  height: 50vh;
  width: 80%;
  margin-right: auto;
  margin-left: auto;
}
.form-container{
  margin-bottom: 20px;
  background-color: white;
}
</style>