| | |
| | | <template> |
| | | <div> |
| | | 问题数: {{ summary.proNum }},整改数: {{ summary.changeNum }},整改率: {{ summary.changePer }} |
| | | </div> |
| | | <el-row> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="9" :xl="9"> |
| | | <div v-show="mainProType"> |
| | | <el-text>突出问题</el-text> |
| | | <div ref="echartRef" class="pie-chart"></div> |
| | | </div> |
| | | <template v-if="mainProType"> |
| | | <div v-show="false" class="font-small"> |
| | | 突出问题:{{ mainProType.name }},问题数:{{ mainProType.count }},占比{{ |
| | | mainProType.per |
| | | }} |
| | | </div> |
| | | </template> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="colSpanLarge" :xl="colSpanLarge"> |
| | | <el-text>单日汇总</el-text> |
| | | <BaseTable :data="summary"> |
| | | <el-table-column |
| | | label="问题数" |
| | | prop="proNum" |
| | | :show-overflow-tooltip="true" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="整改数" |
| | | prop="changeNum" |
| | | :show-overflow-tooltip="true" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="整改率" |
| | | prop="changePer" |
| | | :show-overflow-tooltip="true" |
| | | ></el-table-column> |
| | | </BaseTable> |
| | | </el-col> |
| | | </el-row> |
| | | </template> |
| | | <script setup> |
| | | import { computed, ref } from 'vue' |
| | | import { computed, onMounted, ref, watch } from 'vue' |
| | | import dayjs from 'dayjs' |
| | | import * as echarts from 'echarts' |
| | | import { pieChartOption } from '@/utils/echart/chart-option' |
| | | |
| | | const props = defineProps({ |
| | | date: { |
| | | type: Date, |
| | | default: new Date() |
| | | }, |
| | | data: { |
| | | type: Array |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | proStatistic: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | loading: Boolean |
| | | }) |
| | | |
| | | const colSpanLarge = computed(() => { |
| | | return mainProType.value ? 15 : 24 |
| | | }) |
| | | |
| | | // 饼图 |
| | | let echart |
| | | const echartRef = ref(null) |
| | | |
| | | // 当日时间 |
| | | const timeObj = computed(() => { |
| | | const d = dayjs(props.date) |
| | | return { |
| | | year: d.year(), |
| | | month: d.month(), |
| | | date: d.date() |
| | | } |
| | | }) |
| | | |
| | | // 问题和整改数量统计 |
| | | const summary = computed(() => { |
| | | let proNum = 0, |
| | | changeNum = 0, |
| | |
| | | }) |
| | | |
| | | if (proNum > 0) { |
| | | changePer = Math.round((changeNum / proNum) * 100) / 100 + '%' |
| | | changePer = Math.round((changeNum / proNum) * 100) + '%' |
| | | } |
| | | |
| | | return { proNum, changeNum, changePer } |
| | | return [{ proNum, changeNum, changePer }] |
| | | }) |
| | | |
| | | // 突出问题统计 |
| | | const mainProType = computed(() => { |
| | | let res |
| | | let total = 0, |
| | | max = 0 |
| | | props.proStatistic.forEach((d) => { |
| | | total += d.count |
| | | }) |
| | | props.proStatistic.forEach((d) => { |
| | | if (total > 0) { |
| | | const per = d.count / total |
| | | if (per >= max) { |
| | | max = per |
| | | res = { |
| | | name: d.name, |
| | | count: d.count, |
| | | per: Math.round(per * 100) + '%' |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | refreshChart(props.proStatistic) |
| | | return res |
| | | }) |
| | | |
| | | function refreshChart(data) { |
| | | if (!data || !echart) return |
| | | const chartData = data |
| | | .map((item) => { |
| | | return { |
| | | value: item.count, |
| | | name: item.name |
| | | } |
| | | }) |
| | | // 正序排列 |
| | | .sort(function (a, b) { |
| | | return b.value - a.value |
| | | }) |
| | | const option = pieChartOption('问题分布', chartData, 1) |
| | | const series = option.series[0] |
| | | // series.radius = '50%' |
| | | series.center = ['10%', '50%'] |
| | | series.label.formatter = '{b}\n{c}个({d}%)' |
| | | echart.setOption(option) |
| | | setTimeout(() => { |
| | | echart.resize() |
| | | }, 100) |
| | | } |
| | | |
| | | // watch(props.proStatistic, (nV, oV) => { |
| | | // if (nV != oV) { |
| | | // refreshChart(nV) |
| | | // } |
| | | // }) |
| | | |
| | | onMounted(() => { |
| | | echart = echarts.init(echartRef.value) |
| | | }) |
| | | </script> |
| | | <style scoped> |
| | | .pie-chart { |
| | | /* width: 200px; */ |
| | | height: 70px; |
| | | } |
| | | </style> |