| | |
| | | this.getEfficiencyDataByApi() |
| | | this.getTechConditionAndWarrantyMalfunctionDataByApi() |
| | | this.getThirdMaintenanceConditionByApi() |
| | | this.getTwoMaintenanceChartDataByApi() |
| | | this.getSecondMaintenanceChartDataByApi() |
| | | this.getBarChartDataByApi() |
| | | this.getDoubleBarChartDataByApi() |
| | | this.getWorkshopProblemChartDataByApi() |
| | |
| | | this.runningStateChart.showLoading({ |
| | | text: '数据加载中 ...', |
| | | color: '#0696e1', // 加载动画颜色 |
| | | textColor: 'rgba(0, 0, 0, .45)', |
| | | maskColor: 'transparent' // 遮罩层 |
| | | textColor: 'rgba(0, 0, 0, .45)' |
| | | }) |
| | | signageApi.getEquipmentStatusStatisticsApi() |
| | | .then(res => { |
| | |
| | | this.efficiencyChart.showLoading({ |
| | | text: '数据加载中 ...', |
| | | color: '#0696e1', // 加载动画颜色 |
| | | textColor: 'rgba(0, 0, 0, .45)', |
| | | maskColor: 'transparent' // 遮罩层 |
| | | textColor: 'rgba(0, 0, 0, .45)' |
| | | }) |
| | | signageApi.getEquipmentUtilizationStatisticsApi() |
| | | .then(res => { |
| | |
| | | this.techConditionChart.showLoading({ |
| | | text: '数据加载中 ...', |
| | | color: '#0696e1', // 加载动画颜色 |
| | | textColor: 'rgba(0, 0, 0, .45)', |
| | | maskColor: 'transparent' // 遮罩层 |
| | | textColor: 'rgba(0, 0, 0, .45)' |
| | | }) |
| | | this.warrantyMalfunctionChart.showLoading({ |
| | | text: '数据加载中 ...', |
| | | color: '#0696e1', // 加载动画颜色 |
| | | textColor: 'rgba(0, 0, 0, .45)', |
| | | maskColor: 'transparent' // 遮罩层 |
| | | textColor: 'rgba(0, 0, 0, .45)' |
| | | }) |
| | | signageApi.getEquipmentTechnologyStatusAndReportRepairEquipmentListApi() |
| | | .then(res => { |
| | |
| | | technologyStatus: 'QUALIFIED' |
| | | }, |
| | | { |
| | | value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'PROHIBITED').value : 0, |
| | | name: '禁用', |
| | | technologyStatus: 'PROHIBITED' |
| | | }, |
| | | { |
| | | value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'RESTRICTED').value : 0, |
| | | name: '限用', |
| | | technologyStatus: 'RESTRICTED' |
| | | }, |
| | | { |
| | | value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'PROHIBITED').value : 0, |
| | | name: '禁用', |
| | | technologyStatus: 'PROHIBITED' |
| | | } |
| | | ] |
| | | this.warrantyMalfunctionData = [ |
| | | { |
| | | value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'bx').value : 0, |
| | | name: '报修', |
| | | code: 'bx' |
| | | value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'run').value : 0, |
| | | name: '运行', |
| | | code: 'run' |
| | | }, |
| | | { |
| | | value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'stop').value : 0, |
| | |
| | | code: 'stop' |
| | | }, |
| | | { |
| | | value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'run').value : 0, |
| | | name: '运行', |
| | | code: 'run' |
| | | value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'bx').value : 0, |
| | | name: '报修', |
| | | code: 'bx' |
| | | } |
| | | ] |
| | | this.techConditionChartRequireFinished = true |
| | |
| | | }, |
| | | |
| | | /* 调用接口获取二保计划 */ |
| | | getTwoMaintenanceChartDataByApi() { |
| | | signageApi.getTwoMaintenancePlanListApi() |
| | | getSecondMaintenanceChartDataByApi() { |
| | | signageApi.getSecondMaintenancePlanListApi() |
| | | .then(res => { |
| | | if (res.success && res.result.length > 0) this.twoMaintenanceChartData = res.result.map(item => [item.factoryName, item.monthPlan, '二级保养']) |
| | | this.drawMaintenanceChart() |
| | |
| | | this.barChart.showLoading({ |
| | | text: '数据加载中 ...', |
| | | color: '#0696e1', // 加载动画颜色 |
| | | textColor: 'rgba(0, 0, 0, .45)', |
| | | maskColor: 'transparent' // 遮罩层 |
| | | textColor: 'rgba(0, 0, 0, .45)' |
| | | }) |
| | | signageApi.getEquipmentOEEStatistics() |
| | | .then(res => { |
| | |
| | | this.doubleBarChart.showLoading({ |
| | | text: '数据加载中 ...', |
| | | color: '#0696e1', // 加载动画颜色 |
| | | textColor: 'rgba(0, 0, 0, .45)', |
| | | maskColor: 'transparent' // 遮罩层 |
| | | textColor: 'rgba(0, 0, 0, .45)' |
| | | }) |
| | | signageApi.getEquipmentMonthStatisticsApi() |
| | | .then(res => { |
| | |
| | | itemGap: 15, |
| | | textStyle: { |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 14, |
| | | padding: [0, 0, 0, 0] |
| | | fontSize: 14 |
| | | }, |
| | | data: ['关机', '报警', '待机', '运行'] |
| | | data: ['运行', '待机', '报警', '关机'] |
| | | }, |
| | | grid: { |
| | | containLabel: true |
| | |
| | | { |
| | | type: 'pie', |
| | | roseType: 'angle', // 玫瑰图 |
| | | // selectedMode: "single", |
| | | radius: this.pieChartRadius, |
| | | center: ['50%', '60%'], |
| | | color: [ |
| | |
| | | position: 'outside', |
| | | show: true, |
| | | color: 'rgba(0,0,0,.45)', |
| | | // textBorderColor: 'inherit', |
| | | // textBorderWidth: 1, |
| | | fontSize: 16, |
| | | formatter: function(params) { |
| | | if (params.name !== '') { |
| | |
| | | |
| | | /* 绘制设备利用率胶囊图 */ |
| | | drawEfficiencyChart() { |
| | | const data = this.efficiencyData |
| | | const colorArray = [ |
| | | { |
| | | top: '#EA967B', |
| | |
| | | bottom: '#8DCCEF' |
| | | } |
| | | ] |
| | | const data = this.efficiencyData |
| | | const defaultData = [] |
| | | const dataMax = data.length > 0 ? +data.sort((x, y) => +y.value - +x.value)[0].value : 0 |
| | | let yAxisMax |
| | | if (dataMax === 0) yAxisMax = 1 // 若数据中最大值为0,则将背景默认值设置为1 |
| | | else yAxisMax = Math.ceil(dataMax / 5) * 5 // 设置柱图背景阴影默认值,思路为数据最大值最接近的能被5整除的数字 |
| | | const yAxisInterval = yAxisMax / 5 // 同时将刻度值分成5份 |
| | | data.forEach(item => defaultData.push(yAxisMax)) |
| | | const option = { |
| | | title: { |
| | | show: true, // 是否显示标题,默认为true |
| | |
| | | }, |
| | | show: true, |
| | | min: 0, |
| | | max: 'dataMax', |
| | | max: dataMax, |
| | | interval: yAxisInterval, |
| | | type: 'value', |
| | | axisTick: { |
| | |
| | | top: 25, |
| | | orient: 'vertical', |
| | | right: 0, |
| | | // bottom: "0", |
| | | itemWidth: 14, |
| | | itemHeight: 14, |
| | | icon: 'roundRect', |
| | | itemGap: 15, |
| | | textStyle: { |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 14, |
| | | padding: [0, 0, 0, 0] |
| | | fontSize: 14 |
| | | }, |
| | | data: ['合格', '禁用', '限用'] |
| | | data: ['合格', '限用', '禁用'] |
| | | }, |
| | | grid: { |
| | | containLabel: true |
| | |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | // selectedMode: "single", |
| | | radius: this.pieChartRadius, |
| | | center: ['45%', '60%'], |
| | | color: [ |
| | |
| | | position: 'outside', |
| | | show: true, |
| | | color: 'rgba(0,0,0,.45)', |
| | | // textBorderColor: 'inherit', |
| | | // textBorderWidth: 1, |
| | | fontSize: 16, |
| | | formatter: function(params) { |
| | | if (params.name !== '') { |
| | |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | // selectedMode: "single", |
| | | radius: this.pieChartRadius, |
| | | center: ['45%', '60%'], |
| | | color: [ |
| | |
| | | |
| | | /* 绘制单柱图 */ |
| | | drawBarChart() { |
| | | const defaultData = [] |
| | | const dataMax = this.barChartData.length > 0 ? +this.barChartData.sort((x, y) => +y.value - +x.value)[0].value : 0 |
| | | let yAxisMax |
| | | if (dataMax === 0) yAxisMax = 1 // 若数据中最大值为0,则将背景默认值设置为1 |
| | | else yAxisMax = Math.ceil(dataMax / 5) * 5 // 设置柱图背景阴影默认值,思路为数据最大值最接近的能被5整除的数字 |
| | | const yAxisInterval = yAxisMax / 5 // 同时将刻度值分成5份 |
| | | this.barChartData.forEach(item => defaultData.push(yAxisMax)) |
| | | console.log('bar', this.barChartData) |
| | | let barTopColor = ['#EA967B', '#62AC75', '#32ACBF', '#7196CE'] |
| | | let barBottomColor = ['#F8E18B', '#A8D07C', '#7BCAC5', '#8DCCEF'] |
| | | const option = { |
| | |
| | | barWidth: 26, |
| | | barGap: '-100%', |
| | | data: this.barChartData |
| | | }] |
| | | } |
| | | ] |
| | | } |
| | | |
| | | option.title.text = moment().subtract(1, 'months').format('M月') + `OEE` |
| | |
| | | const option = { |
| | | color: ['#1890FF', '#2EC35C'], |
| | | tooltip: { |
| | | confine: true, |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | }, |
| | | formatter: function(params) { |
| | | return '<span style="font-weight:bolder;">' + params.name + '</span><br/>' + |
| | | '<span style="display:inline-block; width:10px; height:10px; border-radius:100px; margin-right:5px; background:' + params.color + '"></span>' + params.seriesName + ' : ' + params.value + '%' |
| | | let result = '' |
| | | params.forEach((item, index) => { |
| | | let dom = `<span style="display:inline-block;width:10px;height:10px;border-radius:100px;margin-right:5px;background:${item.color}"></span>${item.seriesName}:${item.value}%` |
| | | if (index === 0) { |
| | | result = `<span style="font-weight:bolder;">${item.name}</span>` |
| | | } |
| | | result += '<br />' + dom |
| | | }) |
| | | return result |
| | | } |
| | | }, |
| | | grid: { |
| | |
| | | show: false |
| | | } |
| | | }], |
| | | series: [{ |
| | | type: 'bar', |
| | | barWidth: 20, |
| | | barGap: '0%', |
| | | itemStyle: { barBorderRadius: 4 }, |
| | | name: 'OEE', |
| | | data: this.doubleBarChartData.oeeList, |
| | | label: { |
| | | show: true, |
| | | lineHeight: 10, |
| | | formatter: params => { |
| | | if (+params.value === 0) return '' |
| | | else return params.value |
| | | }, |
| | | position: 'top', |
| | | textStyle: { |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 10 |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | barWidth: 20, |
| | | barGap: '0%', |
| | | itemStyle: { barBorderRadius: 4 }, |
| | | name: 'OEE', |
| | | data: this.doubleBarChartData.oeeList, |
| | | label: { |
| | | show: true, |
| | | lineHeight: 10, |
| | | formatter: params => { |
| | | if (+params.value === 0) return '' |
| | | else return params.value |
| | | }, |
| | | position: 'top', |
| | | textStyle: { |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 10 |
| | | } |
| | | } |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | barWidth: 20, |
| | | barGap: '0%', |
| | | itemStyle: { barBorderRadius: 4 }, |
| | | name: 'TEEP', |
| | | data: this.doubleBarChartData.utilizationList, |
| | | label: { |
| | | show: true, |
| | | lineHeight: 10, |
| | | formatter: params => { |
| | | if (+params.value === 0) return '' |
| | | else return params.value |
| | | }, |
| | | position: 'inside', |
| | | textStyle: { |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 10 |
| | | } |
| | | } |
| | | } |
| | | }, { |
| | | type: 'bar', |
| | | barWidth: 20, |
| | | barGap: '0%', |
| | | itemStyle: { barBorderRadius: 4 }, |
| | | name: 'TEEP', |
| | | data: this.doubleBarChartData.utilizationList, |
| | | label: { |
| | | show: true, |
| | | lineHeight: 10, |
| | | formatter: params => { |
| | | if (+params.value === 0) return '' |
| | | else return params.value |
| | | }, |
| | | position: 'inside', |
| | | textStyle: { |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 10 |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | this.doubleBarChart.setOption(option, true) |
| | |
| | | |
| | | <style lang="less" scoped> |
| | | .page-container { |
| | | .page-title { |
| | | display: flex; |
| | | justify-content: space-evenly; |
| | | flex-wrap: wrap; |
| | | color: #fff; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .content-container { |
| | | padding-top: 5px; |
| | | display: flex; |