<template> <div class="hiddenStat"> <el-form :model="queryParams" :inline="true" label-width="100px" style="margin-top: 10px"> <el-form-item label="隐患级别" prop="hiddenLevel"> <el-select v-model="queryParams.troubleLevel" placeholder="请选择隐患级别" clearable> <el-option v-for="dict in troubleLevelOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="parseInt(dict.dictValue)" ></el-option> </el-select> </el-form-item> <el-form-item label="隐患发现时间" prop="hiddenTime"> <el-date-picker v-model="findTime" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" @change="dateFormat"> </el-date-picker> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="search">搜索</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> </el-form-item> </el-form> <div class="stat"> <div id="barChar" :style="{width: '50%', height: '100%'}"></div> <div id="pieChar" :style="{width: '50%', height: '100%'}"></div> </div> </div> </template> <script> import { hiddenStat } from "@/api/system/book"; export default { name: "index", data(){ return{ queryParams:{ hiddenLevel: null, beginTime: null, endTime: null }, monthData: [], hiddenBarData: [], closeHiddenBarData: [], pieData: [], troubleLevelOptions: [], findTime: [new Date().getFullYear() + "-01-01 00:00:00",new Date().getFullYear() + "-12-31 23:59:59"] } }, mounted(){ this.getHiddenData(); this.getDicts("t_trouble_level").then(response => { this.troubleLevelOptions = response.data; }); }, methods:{ //初始化柱状图 initBarEchars(){ let echar = this.$echarts.init(document.getElementById('barChar')); let option = { title: { text: "隐患数量统计", left: "20" }, legend: { type: "plain", align: "left", right: "50" }, xAxis: { type: 'category', axisLabel: { //x轴文字的配置 show: true, interval: 0,//使x轴文字显示全 rotate: -270 }, //data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] data: this.monthData }, yAxis: { type: 'value', axisLabel: { interval: 0, }, }, series: [ { name: '发现数量', type: 'bar', //data: [120, 200, 150, 80, 70, 110, 130], data: this.hiddenBarData }, { name: '闭环数量', type: 'bar', data: this.closeHiddenBarData, /*itemStyle: { color: "rgba(0, 30, 255, 1)" }*/ }, ] } echar.setOption(option); }, //初始化环状图 initPieEchars(){ let echar = this.$echarts.init(document.getElementById('pieChar')); let option = { title: { text: "隐患整改率", left: "20" }, tooltip: { trigger: 'item', formatter: '{b}:{c} ({d}%)' }, legend: { type: "plain", align: "left", right: "50" }, series: [ { name: '隐患整改率', type: 'pie', radius: ['40%', '70%'], /*data: [ { value: 50, name: '已整改' }, { value: 50, name: '未整改' } ],*/ data: this.pieData } ] } echar.setOption(option); }, getHiddenData(){ hiddenStat(this.queryParams).then(res =>{ if(res.code = 200){ this.monthData = res.data.months; this.hiddenBarData = res.data.hiddens; this.closeHiddenBarData = res.data.rectifieds; this.pieData = res.data.pieData; //柱状图初始化 this.initBarEchars(); //环状图初始化 this.initPieEchars(); } }) }, dateFormat(picker){ if(!picker){ this.findTime = []; this.queryParams.beginTime = null; this.queryParams.endTime = null; }else{ this.queryParams.beginTime = picker[0]; this.queryParams.endTime = picker[1]; } }, search(){ this.getHiddenData(); }, resetQuery(){ this.reset(); this.getHiddenData(); }, reset(){ this.queryParams = { hiddenLevel: null, beginTime: null, endTime: null }; this.findTime = ""; } } } </script> <style scoped lang="scss"> .hiddenStat{ height: calc(100vh - 50px); width: 100%; } .stat{ height: 90%; width: 100%; display: inline-flex; } </style>