<template> <!-- 监控日志 --> <div class="jktjDetail form-clues"> <!-- 头部搜索 --> <div class="from-clues-header"> <el-form ref="form" :model="form" label-width="100px"> <el-form-item> <Breadcrumb /> </el-form-item> <el-row> <el-col :span="4"> <el-form-item label="行政区"> <el-select v-model="form.qxdm" class="width100" clearable placeholder="行政区"> <el-option v-for="item in dicData['A20']" :key="item.DCODE" :label="item.DNAME" :value="item.DCODE"> </el-option> </el-select> </el-form-item> </el-col> <el-col :span="4"> <el-form-item label="开始日期"> <el-date-picker class="width100" :clearable="false" type="date" placeholder="开始日期" :picker-options="pickerOptionsStart" v-model="form.startTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> </el-form-item> </el-col> <el-col :span="4"> <el-form-item label="结束日期"> <el-date-picker class="width100" :clearable="false" type="date" placeholder="结束日期" :picker-options="pickerOptionsEnd" v-model="form.endTime" value-format="yyyy-MM-dd HH:mm:ss" @change="endTimeChange"></el-date-picker> </el-form-item> </el-col> <!-- 操作按钮 --> <el-col :span="12" class="btnColRight"> <btn nativeType="cz" @click="resetForm">重置</btn> <btn nativeType="cx" @click="getProcessCounts">查询</btn> </el-col> </el-row> </el-form> </div> <!-- 图表 --> <div class="form-clues-content echarts-box" v-if="chartData.length"> <div id="myChart" class="chart"></div> </div> <div class="form-clues-content echarts-box center" v-else>暂无数据</div> </div> </template> <script> import { mapGetters } from "vuex"; import efficient from "@/api/efficient"; import { getFirstDayOfSeason, timeFormat } from "@/utils/operation"; export default { name: "jktj", data () { return { // 开始日期限制 pickerOptionsStart: { disabledDate: (time) => { if (this.form.endTime) { return time.getTime() > new Date(this.form.endTime).getTime(); } }, }, // 结束日期限制 pickerOptionsEnd: { disabledDate: (time) => { if (this.form.startTime) { return time.getTime() < new Date(this.form.startTime).getTime(); } }, }, // 搜索表单 valueTime: "", // 搜索表单 form: { startTime: getFirstDayOfSeason(), endTime: timeFormat(new Date(), true), qxdm: "", }, chartData: [] }; }, mounted () { // 查询业务量 this.getProcessCounts(); }, computed: { ...mapGetters(["dicData"]), }, methods: { endTimeChange (val) { this.form.endTime = timeFormat(new Date(val), true) }, async getProcessCounts () { this.chartData = []; let { result: res } = await efficient.getProcessCounts( this.form.startTime, this.form.endTime, this.form.qxdm ); //获取图表配置项需要的数据 this.chartData = res; this.$nextTick(() => { // 初始化图表 this.chartData.length && this.echartInit(this.chartData) }); }, // 重置 resetForm () { this.form = { startTime: getFirstDayOfSeason(), endTime: timeFormat(new Date(), true), qxdm: "" }; this.getProcessCounts(); }, //图表渲染 echartInit (chartArr) { // 基于准备好的dom,初始化echarts实例 let myChart = this.$echarts.init(document.getElementById("myChart")); // 绘制图表 myChart.setOption({ color: ["#13E5FF"], tooltip: { show: true, trigger: "axis", textStyle: { fontSize: 16, // 字体大小 }, }, grid: { top: 120, }, xAxis: [ { type: "category", data: chartArr.map(item => item.recTypeName), axisLabel: { interval: 0, formatter: function (val) { let c = document.createElement("canvas"); const ctx = c.getContext("2d"); const arr = val.split(""); arr .map((item) => ctx.measureText(item).width) .reduce((pre, next, index) => { const nLen = pre + next; if (nLen > 60) { arr[index - 1] += "..."; return next; } else { return nLen; } }); c = null; let ind = arr.findIndex((i) => { return i.indexOf("...") > -1; }); let newArr = ind > 0 ? arr.splice(0, ind + 1) : arr; return newArr.join(""); }, textStyle: { show: true, color: "#fff", fontSize: "16", }, }, }, ], yAxis: [ { type: "value", name: "数量/个", nameTextStyle: { color: "#fff", fontSize: "16", }, axisLabel: { textStyle: { show: true, color: "#fff", fontSize: "16", }, }, }, ], series: [ { type: "bar", //显示数值 itemStyle: { normal: { label: { show: true, //开启显示 position: "top", //在上方显示 }, }, }, barMaxWidth: '60', data: chartArr.map(item => item.counts), }, ], }); }, }, }; </script> <style scoped lang="scss"> // @import "~@/styles/public.scss"; .jktjDetail { height: 100%; display: flex; flex-direction: column; .rows { margin-left: 100px; } .center { line-height: 50vh; text-align: center; color: #b6b5b5 } .echarts-box { display: flex; justify-content: center; height: 500px; .chart { width: 100%; height: 100%; } } .form-clues-content { flex: 1; height: 100%; } } </style> <style scoped lang="scss"> // @import "~@/styles/public.scss"; </style>