| | |
| | | <template> |
| | | <el-row> 巡查汇总 </el-row> |
| | | <el-segmented v-model="value" :options="options" block /> |
| | | <div v-show="value == '今日汇总'"> |
| | | <div ref="echart1" class="bar-chart"></div> |
| | | </div> |
| | | <div v-show="value == '本周汇总'"> |
| | | <div ref="echart2" class="bar-chart"></div> |
| | | </div> |
| | | <div v-show="value == '上周汇总'"> |
| | | <div ref="echart3" class="bar-chart"></div> |
| | | </div> |
| | | <div v-show="value == '月度汇总'"> |
| | | <div ref="echart4" class="bar-chart"></div> |
| | | </div> |
| | | <BaseCard title="巡查汇总"> |
| | | <!-- <el-row> 巡查汇总 </el-row> --> |
| | | <el-segmented v-model="value" :options="options" block /> |
| | | <div v-show="value == '今日汇总'"> |
| | | <div ref="echart1" class="bar-chart"></div> |
| | | </div> |
| | | <div v-show="value == '本周汇总'"> |
| | | <div ref="echart2" class="bar-chart"></div> |
| | | </div> |
| | | <div v-show="value == '上周汇总'"> |
| | | <div ref="echart3" class="bar-chart"></div> |
| | | </div> |
| | | <div v-show="value == '本月汇总'"> |
| | | <div ref="echart4" class="bar-chart"></div> |
| | | </div> |
| | | </BaseCard> |
| | | </template> |
| | | |
| | | <script setup> |
| | | /** |
| | | * 1. 区域分类统计更加灵活 |
| | | */ |
| | | import * as echarts from 'echarts' |
| | | import { ref, onMounted } from 'vue' |
| | | import dayjs from 'dayjs' |
| | |
| | | |
| | | const emits = defineEmits(['update:height']) |
| | | |
| | | const value = ref('月度汇总') |
| | | const options = ['今日汇总', '本周汇总', '上周汇总', '月度汇总'] |
| | | const value = ref('本月汇总') |
| | | const options = ['今日汇总', '本周汇总', '上周汇总', '本月汇总'] |
| | | |
| | | const subtaskToday = ref([]) |
| | | const subtaskWeek = ref([]) |
| | |
| | | |
| | | function fetchSubtaskThisWeek() { |
| | | const area = getParams('week') |
| | | // 修改时段为周一到周日 |
| | | area.starttime = dayjs(area.starttime).add(1, 'day').format('YYYY-MM-DD HH:mm:ss') |
| | | area.endtime = dayjs(area.endtime).add(1, 'day').format('YYYY-MM-DD HH:mm:ss') |
| | | taskApi.fetchSubtaskSummaryByArea(area).then((res) => { |
| | | subtaskWeek.value = res.data |
| | | const series = refreshChartData(res.data) |
| | |
| | | |
| | | function fetchSubtaskLastWeek() { |
| | | const area = getParams('week') |
| | | area.starttime = dayjs(area.starttime).add(-7, 'day').format('YYYY-MM-DD HH:mm:ss') |
| | | area.endtime = dayjs(area.endtime).add(-7, 'day').format('YYYY-MM-DD HH:mm:ss') |
| | | // 修改时段为周一到周日 |
| | | area.starttime = dayjs(area.starttime).add(-6, 'day').format('YYYY-MM-DD HH:mm:ss') |
| | | area.endtime = dayjs(area.endtime).add(-6, 'day').format('YYYY-MM-DD HH:mm:ss') |
| | | taskApi.fetchSubtaskSummaryByArea(area).then((res) => { |
| | | subtaskLastWeek.value = res.data |
| | | const series = refreshChartData(res.data) |
| | |
| | | yAxis: [ |
| | | { |
| | | type: 'category', |
| | | data: ['整改数', '问题数', '完成量'] |
| | | data: ['复核数', '整改数', '问题数', '完成量'] |
| | | } |
| | | ], |
| | | series: series |
| | |
| | | const totalCount = { |
| | | numByTotal: {}, |
| | | numByDistrict: {}, |
| | | numByStreet: {}, |
| | | numByScene: {}, |
| | | numByUser: {} |
| | | } |
| | |
| | | const proCount = { |
| | | numByTotal: {}, |
| | | numByDistrict: {}, |
| | | numByStreet: {}, |
| | | numByScene: {}, |
| | | numByUser: {} |
| | | } |
| | |
| | | const changeCount = { |
| | | numByTotal: {}, |
| | | numByDistrict: {}, |
| | | numByStreet: {}, |
| | | numByScene: {}, |
| | | numByUser: {} |
| | | } |
| | | // // 按用户分类 |
| | | // const userCount = { |
| | | // numByTotal: {}, |
| | | // numByDistrict: {}, |
| | | // numByScene: {}, |
| | | // numByUser: {} |
| | | // } |
| | | // 复核数 |
| | | const reCheckCount = { |
| | | numByTotal: {}, |
| | | numByDistrict: {}, |
| | | numByStreet: {}, |
| | | numByScene: {}, |
| | | numByUser: {} |
| | | } |
| | | const historySceneId = [] |
| | | |
| | | dataList.forEach((d) => { |
| | | const tName = '总计' |
| | | const dName = d.subtask.districtname |
| | | const townName = d.scene.townname |
| | | const sType = d.sceneType |
| | | const uName = d.subtask.deployerrealname |
| | | |
| | |
| | | // 任务量分区县 |
| | | totalCount.numByDistrict[dName] = totalCount.numByDistrict[dName] |
| | | ? totalCount.numByDistrict[dName] + 1 |
| | | : 1 |
| | | // 任务量分街镇 |
| | | totalCount.numByStreet[townName] = totalCount.numByStreet[townName] |
| | | ? totalCount.numByStreet[townName] + 1 |
| | | : 1 |
| | | // 任务量分场景类型 |
| | | totalCount.numByScene[sType] = totalCount.numByScene[sType] |
| | |
| | | // 问题数分区县 |
| | | proCount.numByDistrict[dName] = proCount.numByDistrict[dName] |
| | | ? proCount.numByDistrict[dName] + d.proCheckedNum |
| | | : d.proCheckedNum |
| | | // 问题数分街镇 |
| | | proCount.numByStreet[townName] = proCount.numByStreet[townName] |
| | | ? proCount.numByStreet[townName] + d.proCheckedNum |
| | | : d.proCheckedNum |
| | | // 问题数分场景类型 |
| | | proCount.numByScene[sType] = proCount.numByScene[sType] |
| | |
| | | changeCount.numByDistrict[dName] = changeCount.numByDistrict[dName] |
| | | ? changeCount.numByDistrict[dName] + d.changeCheckedNum |
| | | : d.changeCheckedNum |
| | | // 整改数分街镇 |
| | | changeCount.numByStreet[townName] = changeCount.numByStreet[townName] |
| | | ? changeCount.numByStreet[townName] + d.changeCheckedNum |
| | | : d.changeCheckedNum |
| | | // 整改数分场景类型 |
| | | changeCount.numByScene[sType] = changeCount.numByScene[sType] |
| | | ? changeCount.numByScene[sType] + d.changeCheckedNum |
| | |
| | | changeCount.numByUser[uName] = changeCount.numByUser[uName] |
| | | ? changeCount.numByUser[uName] + d.changeCheckedNum |
| | | : d.changeCheckedNum |
| | | |
| | | if (historySceneId.length == 0) { |
| | | reCheckCount.numByTotal[tName] = 0 |
| | | reCheckCount.numByDistrict[dName] = 0 |
| | | reCheckCount.numByScene[sType] = 0 |
| | | reCheckCount.numByUser[uName] = 0 |
| | | } else if (historySceneId.indexOf(d.sceneId) != -1) { |
| | | // 复核数总计 |
| | | reCheckCount.numByTotal[tName] = reCheckCount.numByTotal[tName] |
| | | ? reCheckCount.numByTotal[tName] + 1 |
| | | : 1 |
| | | // 复核数分区县 |
| | | reCheckCount.numByDistrict[dName] = reCheckCount.numByDistrict[dName] |
| | | ? reCheckCount.numByDistrict[dName] + 1 |
| | | : 1 |
| | | // 复核数分街镇 |
| | | reCheckCount.numByStreet[townName] = reCheckCount.numByStreet[townName] |
| | | ? reCheckCount.numByStreet[townName] + 1 |
| | | : 1 |
| | | // 复核数分场景类型 |
| | | reCheckCount.numByScene[sType] = reCheckCount.numByScene[sType] |
| | | ? reCheckCount.numByScene[sType] + 1 |
| | | : 1 |
| | | // 复核数分用户 |
| | | reCheckCount.numByUser[uName] = reCheckCount.numByUser[uName] |
| | | ? reCheckCount.numByUser[uName] + 1 |
| | | : 1 |
| | | } else { |
| | | historySceneId.push(d.sceneId) |
| | | } |
| | | }) |
| | | |
| | | let series = {} |
| | | totalCount |
| | | proCount |
| | | changeCount |
| | | parseSeries(series, reCheckCount) |
| | | parseSeries(series, changeCount) |
| | | parseSeries(series, proCount) |
| | | parseSeries(series, totalCount) |
| | |
| | | label: { |
| | | show: true, |
| | | formatter: '{c}' |
| | | // position: [0, 10], |
| | | // position: 'top', |
| | | }, |
| | | data: [value] |
| | | } |
| | | } |
| | | } |
| | | // for (const key in c.numByStreet) { |
| | | // const value = c.numByStreet[key] |
| | | // if (series[key]) { |
| | | // series[key].data.push(value) |
| | | // } else { |
| | | // series[key] = { |
| | | // name: `街镇:${key}`, |
| | | // type: 'bar', |
| | | // stack: 'street', |
| | | // emphasis: { |
| | | // focus: 'series' |
| | | // }, |
| | | // label: { |
| | | // show: true, |
| | | // formatter: '{c}' |
| | | // // position: 'top', |
| | | // }, |
| | | // data: [value] |
| | | // } |
| | | // } |
| | | // } |
| | | for (const key in c.numByScene) { |
| | | const value = c.numByScene[key] |
| | | if (series[key]) { |
| | |
| | | |
| | | .bar-chart { |
| | | width: 400px; |
| | | height: 600px; |
| | | height: 400px; |
| | | } |
| | | </style> |