riku
2024-09-11 89ab2ec7f8790c5cc184de98682af032c69c2afc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<template>
  <el-row justify="space-between">
    <el-col :span="24">
      <el-text size="small">
        场景数:{{ sceneNum }},问题总数:{{ proNum }},单场景问题均值:{{ proEachSceneNum }},
      </el-text>
      <el-text size="small">
        整改总数:{{ changeNum }},有效整改数:{{ changePassNum }},问题整改率:{{
          changePer
        }},有效整改率:{{ changePassPer }}
      </el-text>
    </el-col>
    <!-- <el-col :span="6">
      <el-row justify="end">
        <OptionTime v-model="time"></OptionTime>
      </el-row>
    </el-col> -->
  </el-row>
  <div ref="echart" class="line-chart"></div>
</template>
<script>
import * as echarts from 'echarts'
import { barChartOption } from '@/utils/echart/bar-chart-option'
import { useSubtaskStore } from '@/stores/subtask.js'
import { mapStores } from 'pinia'
import dayjs from 'dayjs'
 
export default {
  data() {
    return {
      sceneNum: 0,
      proNum: 0,
      changeNum: 0,
      changePassNum: 0
    }
  },
  computed: {
    ...mapStores(useSubtaskStore),
    proEachSceneNum() {
      return Math.round((this.proNum / this.sceneNum) * 10) / 10
    },
    changePer() {
      if (this.proNum > 0) {
        return Math.round((this.changeNum / this.proNum) * 100) + '%'
      } else {
        return '/'
      }
    },
    changePassPer() {
      if (this.proNum > 0) {
        return Math.round((this.changePassNum / this.proNum) * 100) + '%'
      } else {
        return '/'
      }
    }
  },
  methods: {
    fetchData() {
      this.subtaskStore.getSummaryMap((map) => {
        this.refresh(map)
      })
    },
    refresh(map) {
      let sceneNum = 0,
        proNum = 0,
        changeNum = 0,
        changePassNum = 0
      const chartData = {
        xAxis: [],
        yAxis: [
          {
            name: '问题数',
            data: []
          },
          {
            name: '整改数',
            data: []
          }
        ]
      }
      const list = []
      for (const key of map.keys()) {
        const value = map.get(key)
        list.push({ name: key, value: value })
      }
      // 按日期正序排列
      list
        .sort(function (a, b) {
          return b.name - a.name
        })
        .forEach((e) => {
          chartData.xAxis.push(dayjs(e.name).format('DD日'))
          let pNum = 0,
            cNum = 0
 
          e.value.forEach((s) => {
            sceneNum++
            pNum += s.proNum
            cNum += s.changeNum
            changePassNum += s.changeCheckedNum
          })
          chartData.yAxis[0].data.push(pNum)
          chartData.yAxis[1].data.push(cNum)
          proNum += pNum
          changeNum += cNum
        })
      const option = barChartOption(chartData)
      this.echart.setOption(option)
 
      this.sceneNum = sceneNum
      this.proNum = proNum
      this.changeNum = changeNum
      this.changePassNum = changePassNum
    }
  },
  mounted() {
    this.echart = echarts.init(this.$refs.echart)
    this.fetchData()
  }
}
</script>
<style scoped>
.line-chart {
  /* width: 200px; */
  height: 200px;
}
</style>