riku
2025-06-20 a030cd7ebede3762fda4dcb6511f43712a417a58
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<template>
  <el-row justify="space-between">
    <el-col :span="24">
      <el-row justify="space-between" class="p-h-16">
        <el-statistic title="场景数" :value="sceneNum" />
        <el-statistic title="问题/整改" :value="proNum + '/' + changePassNum" />
        <el-statistic title="单场景问题均值" :value="proEachSceneNum" />
        <!-- <el-statistic title="整改数" :value="changeNum" /> -->
        <!-- <el-statistic title="整改通过数" :value="changePassNum" /> -->
        <!-- <el-statistic title="整改提交率" :value="changePer" /> -->
        <el-statistic title="整改率/(提交率)" :value="changePassPer + '/' + changePer" />
      </el-row>
      <!-- <el-row justify="space-between" class="p-h-16">
        <el-statistic title="整改通过数" :value="changePassNum" />
        <el-statistic title="问题整改率" :value="changePer" />
        <el-statistic title="整改通过率" :value="changePassPer" />
      </el-row> -->
      <!-- <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-statistic title="有效整改率" :value="changePassPer" /> -->
    <!-- <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>