| | |
| | | 季度至今 |
| | | </el-button> |
| | | </el-button-group> |
| | | <el-date-picker class="timeSearch" size="mini" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> |
| | | <el-date-picker |
| | | class="timeSearch" |
| | | size="mini" |
| | | v-model="dateTime" |
| | | type="daterange" |
| | | @change="timeChange" |
| | | range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"> |
| | | </el-date-picker> |
| | | </div> |
| | | <!-- 监测点 --> |
| | |
| | | </div> |
| | | </div> |
| | | <!-- 预警设备类型占比 --> |
| | | <div class="alarmEquipmentPro"> |
| | | <div class="alarmEquipmentPro" style="display:none"> |
| | | <div id="alarmEquipmentProEcharts"></div> |
| | | <div class="alarmEquipmentProStatis"> |
| | | <avue-crud :data="alarmEquipmentProStatisData" :option="alarmEquipmentProStatisOption"></avue-crud> |
| | |
| | | |
| | | <script> |
| | | import echarts from 'echarts' |
| | | import {selectIndexCount,selectAlertScount,selAlarmDayAveragePro} from "@/api/statis/statis"; |
| | | import alarmVue from '../alarm/alarm.vue'; |
| | | import {selectIndexCount,selectAlertScount,selAlarmDayAveragePro,selConfirmTimePro,selAlarmTimeDis} from "@/api/statis/statis"; |
| | | import alarmVue from '../alarm/alarm.vue'; |
| | | |
| | | export default { |
| | | data(){ |
| | |
| | | }, |
| | | |
| | | methods: { |
| | | //日期选好后触发 |
| | | timeChange(){ |
| | | //清空选项按钮标记 |
| | | var that = this; |
| | | that.activeClass = 0; |
| | | var data = {}; |
| | | data ={ |
| | | startTime:this.timeFormat(this.dateTime[0]), |
| | | endTime:this.timeFormat(this.dateTime[1]) |
| | | } |
| | | this.getStatisData(data); |
| | | }, |
| | | |
| | | //中国区时间格式转换 |
| | | timeFormat(date){ |
| | | let y = date.getFullYear() |
| | | let m = date.getMonth() + 1 |
| | | m = m < 10 ? ('0' + m) : m |
| | | let d = date.getDate() |
| | | d = d < 10 ? ('0' + d) : d |
| | | let h =date.getHours() |
| | | h = h < 10 ? ('0' + h) : h |
| | | let M =date.getMinutes() |
| | | M = M < 10 ? ('0' + M) : M |
| | | let s =date.getSeconds() |
| | | s = s < 10 ? ('0' + s) : s |
| | | let time= y + '-' + m + '-' + d + ' ' + h + ':' + M + ':' + s; |
| | | return time; |
| | | }, |
| | | |
| | | //警情统计总数 |
| | | getStatisTotalData(data){ |
| | | selectIndexCount(data).then(res => { |
| | |
| | | }, |
| | | title: '警情总数', |
| | | count: res.data.data[0].value, |
| | | icon: 'el-icon-warning', |
| | | icon: 'el-icon-message-solid', |
| | | color: '#F34A4A' |
| | | }, |
| | | { |
| | |
| | | }, |
| | | title: '违禁包裹数', |
| | | count: res.data.data[1].value, |
| | | icon: 'el-icon-warning', |
| | | icon: 'el-icon-shopping-bag-1', |
| | | color: '#FF9836' |
| | | }, |
| | | { |
| | |
| | | }, |
| | | title: '违禁物品数', |
| | | count: res.data.data[2].value, |
| | | icon: 'el-icon-setting', |
| | | icon: 'el-icon-warning', |
| | | color: '#8058A5' |
| | | }, |
| | | { |
| | |
| | | }, |
| | | title: '在线设备数', |
| | | count: res.data.data[3].value, |
| | | icon: 'el-icon-setting', |
| | | icon: 'el-icon-success', |
| | | color: '#29C093' |
| | | }, |
| | | { |
| | |
| | | }, |
| | | title: '客户数量', |
| | | count: res.data.data[4].value, |
| | | icon: 'el-icon-setting', |
| | | icon: 'el-icon-s-custom', |
| | | color: '#3AA7F0' |
| | | } |
| | | ]; |
| | |
| | | getAlarmNumberStatis(data){ |
| | | //调接口,获取数据 |
| | | selectAlertScount(data).then(res =>{ |
| | | console.log(res.data,111); |
| | | var typesArray = res.data.data.types; |
| | | var timesArray = res.data.data.times; |
| | | var dataArray = res.data.data.dataList; |
| | | console.log(dataArray,333); |
| | | var data = []; |
| | | dataArray.forEach(item => { |
| | | if (item.name == typesArray[0]) { |
| | |
| | | selAlarmDayAveragePro(data).then(res =>{ |
| | | var time = this.dateTime; |
| | | var day = this.getDaysBetween(time[0],time[1]); |
| | | |
| | | console.log(time,102); |
| | | console.log(Math.round(day),103); |
| | | var that = this; |
| | | that.alarmClassifyStatis.data = [ |
| | | { |
| | |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '访问来源', |
| | | type: 'pie', |
| | | radius: ['43%','60%'], |
| | | center: ['45%','53%'], |
| | |
| | | selAlarmDayAveragePro(data).then(res =>{ |
| | | var that = this; |
| | | var count = res.data.data[0]+res.data.data[1]+res.data.data[2]+res.data.data[3]; |
| | | console.log(count,1112); |
| | | that.alarmTypeProStatis.data = [ |
| | | { |
| | | click: function (item) { |
| | |
| | | color:'yellow', |
| | | target:'_blank', |
| | | name:res.data.data[0], |
| | | date:res.data.data[0]/count*100+'%' |
| | | date:(res.data.data[0]/count*100).toFixed(2)+'%' |
| | | }, |
| | | { |
| | | click: function (item) { |
| | |
| | | title:'违禁品', |
| | | color:'green', |
| | | name:res.data.data[1], |
| | | date:res.data.data[1]/count*100+'%' |
| | | date:(res.data.data[1]/count*100).toFixed(2)+'%' |
| | | }, |
| | | { |
| | | click: function (item) { |
| | |
| | | title:'红色健康码', |
| | | color:'#3fa1ff', |
| | | name:res.data.data[2], |
| | | date:res.data.data[2]/count*100+'%' |
| | | date:(res.data.data[2]/count*100).toFixed(2)+'%' |
| | | }, |
| | | { |
| | | click: function (item) { |
| | |
| | | title:'体温异常', |
| | | color:'red', |
| | | name:res.data.data[3], |
| | | date:res.data.data[3]/count*100+'%' |
| | | date:(res.data.data[3]/count*100).toFixed(2)+'%' |
| | | } |
| | | ]; |
| | | }) |
| | | |
| | | }, |
| | | |
| | | //预警设备类型占比统计 |
| | |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '访问来源', |
| | | type: 'pie', |
| | | radius: ['43%','60%'], |
| | | cneter: ['45%','53%'], |
| | |
| | | emphasis: { |
| | | label: { |
| | | show: true, |
| | | fontSize: '40', |
| | | fontSize: '18', |
| | | fontWeight: 'bold' |
| | | } |
| | | }, |
| | |
| | | |
| | | //确认时间占比统计 |
| | | getConfirmTimeProEcharts(data){ |
| | | selConfirmTimePro(data).then(res =>{ |
| | | var data = res.data.data; |
| | | let echarts = require('echarts'); |
| | | let myChart = echarts.init(document.getElementById('confirmTimeProEcharts')); |
| | | let option = { |
| | |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '访问来源', |
| | | type: 'pie', |
| | | radius: ['43%', '60%'], |
| | | center: ['45%','53%'], |
| | |
| | | emphasis: { |
| | | label: { |
| | | show: true, |
| | | fontSize: '40', |
| | | fontSize: '18', |
| | | fontWeight: 'bold' |
| | | } |
| | | }, |
| | |
| | | show: false |
| | | }, |
| | | data: [ |
| | | {value: 1048, name: '搜索引擎'}, |
| | | {value: 735, name: '直接访问'}, |
| | | {value: 580, name: '邮件营销'}, |
| | | {value: 484, name: '联盟广告'}, |
| | | {value: 300, name: '视频广告'} |
| | | {value: data[0], name: '0-5分钟'}, |
| | | {value: data[1], name: '5-10分钟'}, |
| | | {value: data[2], name: '10-30分钟'}, |
| | | {value: data[3], name: '30分钟以上'} |
| | | ] |
| | | } |
| | | ] |
| | | }; |
| | | myChart.setOption(option); |
| | | |
| | | //建议加上以下这一行代码,不加的效果图如下(当浏览器窗口缩小的时候)。超过了div的界限(红色边框) |
| | | window.addEventListener('resize',function() {myChart.resize()}); |
| | | }) |
| | | }, |
| | | |
| | | //确认时间占比(分类) |
| | | getConfirmTimeProStatis(data){ |
| | | var that = this; |
| | | that.confirmTimeProStatis.data = [ |
| | | { |
| | | click: function (item) { |
| | | }, |
| | | title:'小于5分钟', |
| | | color:'yellow', |
| | | target:'_blank', |
| | | name:'0', |
| | | }, |
| | | { |
| | | click: function (item) { |
| | | }, |
| | | title:'5-10分钟', |
| | | color:'green', |
| | | name:'0', |
| | | }, |
| | | { |
| | | click: function (item) { |
| | | }, |
| | | title:'10-30分钟', |
| | | color:'#3fa1ff', |
| | | name:'0', |
| | | }, |
| | | { |
| | | click: function (item) { |
| | | }, |
| | | title:'30分钟以上', |
| | | color:'red', |
| | | name:'0', |
| | | } |
| | | ]; |
| | | selConfirmTimePro(data).then(res =>{ |
| | | var data = res.data.data; |
| | | var that = this; |
| | | that.confirmTimeProStatis.data = [ |
| | | { |
| | | click: function (item) { |
| | | }, |
| | | title:'小于5分钟', |
| | | color:'yellow', |
| | | target:'_blank', |
| | | name:data[0]==0? 0:data[0]+"次", |
| | | }, |
| | | { |
| | | click: function (item) { |
| | | }, |
| | | title:'5-10分钟', |
| | | color:'green', |
| | | name:data[1]==0? 0:data[1]+"次", |
| | | }, |
| | | { |
| | | click: function (item) { |
| | | }, |
| | | title:'10-30分钟', |
| | | color:'#3fa1ff', |
| | | name:data[2]==0? 0:data[2]+"次", |
| | | }, |
| | | { |
| | | click: function (item) { |
| | | }, |
| | | title:'30分钟以上', |
| | | color:'red', |
| | | name:data[3]==0? 0:data[3]+"次", |
| | | } |
| | | ]; |
| | | }) |
| | | }, |
| | | |
| | | //预警平均速度排行(table) |
| | |
| | | |
| | | //预警时间分布 |
| | | getAlarmTimeDisEchars(data){ |
| | | let echarts = require('echarts'); |
| | | let myChart = echarts.init(document.getElementById('alarmTimeDisEchars')); |
| | | let option = { |
| | | title: { |
| | | textStyle: { |
| | | fontWeight: 'normal', |
| | | fontSize: 16, |
| | | color: '#000' |
| | | }, |
| | | left: '3%', |
| | | top: 25, |
| | | textAlign:'center', |
| | | text: '预警时间分布' |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis' |
| | | }, |
| | | legend: { |
| | | data: ['一键求助', '违禁品', '红色健康码', '体温异常'], |
| | | top:'10%', |
| | | right:'6%' |
| | | }, |
| | | grid: { |
| | | left: '1%', |
| | | right: '7%', |
| | | bottom: '10%', |
| | | top:'25%', |
| | | containLabel: true |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | boundaryGap: false, |
| | | data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle:{ |
| | | type:'dashed' |
| | | selAlarmTimeDis(data).then(res =>{ |
| | | var data = res.data; |
| | | let echarts = require('echarts'); |
| | | let myChart = echarts.init(document.getElementById('alarmTimeDisEchars')); |
| | | let option = { |
| | | title: { |
| | | textStyle: { |
| | | fontWeight: 'normal', |
| | | fontSize: 16, |
| | | color: '#000' |
| | | }, |
| | | left: '3%', |
| | | top: 25, |
| | | textAlign:'center', |
| | | text: '预警时间分布' |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis' |
| | | }, |
| | | legend: { |
| | | data: ['一键求助', '违禁品', '红色健康码', '体温异常'], |
| | | top:'10%', |
| | | right:'6%' |
| | | }, |
| | | grid: { |
| | | left: '1%', |
| | | right: '7%', |
| | | bottom: '10%', |
| | | top:'25%', |
| | | containLabel: true |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | boundaryGap: true, |
| | | axisLine: { |
| | | lineStyle:{ |
| | | type:'dashed' |
| | | } |
| | | }, |
| | | axisTick: { |
| | | show:false |
| | | }, |
| | | data: ['0-2', '2-4', '4-6', '6-8', '8-10', '10-12', '12-14','14-16','16-18','18-20','20-22','22-24'] |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | splitLine: { |
| | | show: true, |
| | | lineStyle:{ |
| | | type:'dashed' |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '一键求助', |
| | | type: 'line', |
| | | stack: '总量', |
| | | data: [120, 132, 101, 134, 90, 230, 210] |
| | | }, |
| | | { |
| | | name: '违禁品', |
| | | type: 'line', |
| | | stack: '总量', |
| | | data: [220, 182, 191, 234, 290, 330, 310] |
| | | }, |
| | | { |
| | | name: '红色健康码', |
| | | type: 'line', |
| | | stack: '总量', |
| | | data: [150, 232, 201, 154, 190, 330, 410] |
| | | }, |
| | | { |
| | | name: '体温异常', |
| | | type: 'line', |
| | | stack: '总量', |
| | | data: [320, 332, 301, 334, 390, 330, 320] |
| | | } |
| | | ] |
| | | }; |
| | | |
| | | myChart.setOption(option); |
| | | |
| | | //建议加上以下这一行代码,不加的效果图如下(当浏览器窗口缩小的时候)。超过了div的界限(红色边框) |
| | | window.addEventListener('resize',function() {myChart.resize()}); |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '一键求助', |
| | | type: 'line', |
| | | stack: '总量', |
| | | data: data.data.alarmTimeDis |
| | | }, |
| | | { |
| | | name: '违禁品', |
| | | type: 'line', |
| | | stack: '总量', |
| | | data: data.data.parcelTimeDis |
| | | }, |
| | | { |
| | | name: '红色健康码', |
| | | type: 'line', |
| | | stack: '总量', |
| | | data: data.data.healthcodeTimeDis |
| | | }, |
| | | { |
| | | name: '体温异常', |
| | | type: 'line', |
| | | stack: '总量', |
| | | data: data.data.animalTimeDis |
| | | } |
| | | ] |
| | | }; |
| | | myChart.setOption(option); |
| | | //建议加上以下这一行代码,不加的效果图如下(当浏览器窗口缩小的时候)。超过了div的界限(红色边框) |
| | | window.addEventListener('resize',function() {myChart.resize()}); |
| | | }) |
| | | }, |
| | | |
| | | //点击按钮获取不同时间段的数据 |
| | | getData(date){ |
| | | var that = this; |
| | | that.activeClass=date; |
| | | var data = this.getDate(date); |
| | | //调用方法 |
| | | //调用方法获取数据 |
| | | this.getStatisData(data); |
| | | }, |
| | | |
| | | getStatisData(data){ |
| | | //统计预警总数 |
| | | this.getStatisTotalData(data); |
| | | //预警数量统计 |
| | |
| | | this.getAlarmTypeProEcharts(data); |
| | | this.getAlarmTypeProStatis(data); |
| | | //预警设备类型占比统计 |
| | | this.getAlarmEquipmentProEcharts(data); |
| | | this.getAlarmEquipmentProStatis(data); |
| | | //this.getAlarmEquipmentProEcharts(data); |
| | | //this.getAlarmEquipmentProStatis(data); |
| | | //确认时间占比统计 |
| | | this.getConfirmTimeProEcharts(data); |
| | | this.getConfirmTimeProStatis(data); |
| | |
| | | return quarterStartMonth; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | }, |
| | | |
| | | } |
| | |
| | | |
| | | </script> |
| | | <style lang="scss"> |
| | | .el-button .btn-color { |
| | | color: rgb(255, 255, 255); |
| | | background-color: #29C093; |
| | | border-color: #29C093; |
| | | } |
| | | |
| | | @import '@/styles/alarmAnalysis/alarmAnalysis.scss' |
| | | |
| | | </style> |