var vms = Vue.component("amplify-cbcsfb", { template: `
`, props: { }, data() { return { show:false, infoNav:0, dayStartTime:'', dayEndTime:'', weekStartTime:'', weekEndTime:'', monthStartTime:'', monthEndTime:'', typeDistributionData:[], text:'累计超标', height:401 } }, created(){ this.getTime() }, mounted(){ }, methods: { openAmplify() { this.show = true this.getTypeDistributionData() }, closeAmplify() { this.show = false }, closeAmplifyAll(e) { if (e.target.className == 'amplify-fixed') { this.show = false } }, getTime() { var that = this this.uploadTime = that.dateFormat("yyyy-MM-dd HH:mm:ss",new Date()); //今日 that.dayStartTime = that.dateFormat("yyyy-MM-dd HH:mm:ss",new Date(new Date().setHours(0,0,0))); that.dayEndTime = that.dateFormat("yyyy-MM-dd HH:mm:ss",new Date(new Date().setHours(23,59,59))); // //本周 let now = new Date(); let day = now.getDay() || 7; that.weekStartTime = that.dateFormat("yyyy-MM-dd HH:mm:ss",new Date(new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1 - day).setHours(0,0,0))) that.weekEndTime = that.dateFormat("yyyy-MM-dd HH:mm:ss",new Date(new Date(now.getFullYear(), now.getMonth(), now.getDate() + 7 - day).setHours(23,59,59))) // //本月 let now2 = new Date(); let day1 = new Date(now2.getFullYear(),now2.getMonth()+1,0).getDate(); that.monthStartTime= that.dateFormat("yyyy-MM-dd HH:mm:ss",new Date(new Date(now2.getFullYear(), now2.getMonth(), 1).setHours(0,0,0))) that.monthEndTime= that.dateFormat("yyyy-MM-dd HH:mm:ss",new Date(new Date(now2.getFullYear(),now2.getMonth(),day1).setHours(23,59,59))) }, dateFormat(fmt, date) { let ret; const opt = { "y+": date.getFullYear().toString(), // 年 "M+": (date.getMonth() + 1).toString(), // 月 "d+": date.getDate().toString(), // 日 "H+": date.getHours().toString(), // 时 "m+": date.getMinutes().toString(), // 分 "s+": date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (let k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) }; }; return fmt; }, //当日预警信息 onWarningInfoNav(n) { this.infoNav = n this.getTypeDistributionData() }, //超标次数分布 getTypeDistributionData() { var startTime = this.dayStartTime; var endTime = this.dayEndTime; if (this.infoNav == 0) { startTime = this.dayStartTime; endTime = this.dayEndTime; } else if (this.infoNav == 1) { startTime = this.weekStartTime; endTime = this.weekEndTime; } else if (this.infoNav == 2) { startTime = this.monthStartTime; endTime = this.monthEndTime; } //今日超标次数分布 axios.get("/mkl/api/getEnvironmentWaringNumber", { params: { projectId: JSON.parse(localStorage.getItem("data")).id, startTime: startTime, endTime: endTime } }).then(res => { if (res.data.code == "200") { var tempData = [ // { name:'PM2.5', value:'30' }, {name: 'PM10', value: '20'}, {name: '噪音', value: '20'}, // { name:'风速', value:'10' }, {name: '温度', value: '10'}, {name: '湿度', value: '20'} ] tempData.map(x => { if (x.name == "PM2.5") { x.value = res.data.data.PM25WaringNumber } else if (x.name == "PM10") { x.value = res.data.data.PM10WaringNumber } else if (x.name == "噪音") { x.value = res.data.data.noiseNumber } else if (x.name == "风速") { x.value = res.data.data.windSpeedNumber } else if (x.name == "温度") { x.value = res.data.data.temperatureWaringNumber } else if (x.name == "湿度") { x.value = res.data.data.humidityNumber } }) this.typeDistributionData = tempData this.getChartData() } }).catch(err => { }) }, //数据图渲染接口 getChartData() { //品类金额占比 饼图 var chChartPie = echarts.init(this.$refs.warningPieChart); this.echartPie(chChartPie, this.typeDistributionData) }, echartPie(chChart, chartData) { var that = this let newPromise = new Promise((resolve) => { resolve() }) //然后异步执行echarts的初始化函数 newPromise.then(() => { var total_datas = 0; var data = []; var legendData = []; var color = ['#4974ff', '#52aef7', '#6863d7', '#1d5d89', '#20e6ff', '#67feef'] for (let i = 0; i < chartData.length; i++) { total_datas += Number(chartData[i].value); legendData.push(chartData[i].name) data.push( { value: chartData[i].value, name: chartData[i].name, itemStyle: { normal: { //颜色渐变 color: color[i] }, }, }, ) } /* let total = chartData.reduce((a, b) => { return a + b.value; }, 0);*/ let legendOption = { top: "center", orient: "vertical", icon: "circle", itemWidth: 25, itemGap: 16, textStyle: { fontSize: 25, rich: { name: { color: "#c3dbfd", padding: [25, 10, 40, 10], // align: 'right' // width: '300px' fontSize: 25, }, percent: { color: "#18DB9F", fontSize: 25, padding: [0, 10, 0, 10], // align: 'right' }, }, }, formatter: function (name) { let res = chartData.filter((v) => v.name === name); let percent = total_datas == 0 ? 0 : (((res[0].value * 100) / total_datas).toFixed(1)); return "{name| " + name + "}\n{percent|" + res[0].value + "}{percent|" + percent + "%}"; }, }; this.option = { title: { text: total_datas, subtext: this.text, x: "180", y: "150", textStyle: { color: "#0dd2fd", fontSize: 48, fontWeight: "bold", align: "center", width: "200px", }, subtextStyle: { color: "#a5b5f0", fontSize: 25, align: "center", }, }, tooltip: { show: false, trigger: 'item', formatter: "{b}
{c} ({d}%)" }, legend: [ { right: 20, data: legendData, align: "left", ...legendOption, }, ], series: [ { name: "品类金额占比", type: "pie", center: ["25%", "50%"], radius: ["46%", "63%"], data: data, label: { show: false, }, itemStyle: { normal: { borderWidth: 10, borderColor: "#051a36" } }, }, { name: "外边框", type: "pie", clockWise: false, //顺时加载 hoverAnimation: false, //鼠标移入变大 center: ["25%", "50%"], radius: ["70%", "70%"], label: { normal: { show: false, }, }, data: [ { value: 9, name: "", itemStyle: { normal: { borderWidth: 6, borderColor: "#152c65", }, }, }, ], }, ], } chChart.setOption(this.option); window.onresize = chChart.resize; chChart.off('click') chChart.on('click', function (params) { for (let i = 0; i < chartData.length; i++) { if (params.name == chartData[i].name) { that.$emit('ledger', chartData[i]); break } } }) }) }, }, watch:{ }, })