| | |
| | | if (res.success && res.result) { |
| | | this.techConditionData = [ |
| | | { |
| | | value: res.result.jszt.find(item => item.code === 'QUALIFIED').value, |
| | | value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'QUALIFIED').value : 0, |
| | | name: '合格', |
| | | technologyStatus: 'QUALIFIED' |
| | | }, |
| | | { |
| | | value: res.result.jszt.find(item => item.code === 'PROHIBITED').value, |
| | | value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'PROHIBITED').value : 0, |
| | | name: '禁用', |
| | | technologyStatus: 'PROHIBITED' |
| | | }, |
| | | { |
| | | value: res.result.jszt.find(item => item.code === 'RESTRICTED').value, |
| | | value: res.result.jszt.length > 0 ? res.result.jszt.find(item => item.code === 'RESTRICTED').value : 0, |
| | | name: '限用', |
| | | technologyStatus: 'RESTRICTED' |
| | | } |
| | | ] |
| | | this.warrantyMalfunctionData = [ |
| | | { value: res.result.bxqk.find(item => item.code === 'bx').value, name: '报修', code: 'bx' }, |
| | | { value: res.result.bxqk.find(item => item.code === 'stop').value, name: '停机', code: 'stop' }, |
| | | { value: res.result.bxqk.find(item => item.code === 'run').value, name: '运行', code: 'run' } |
| | | { |
| | | 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 === 'stop').value : 0, |
| | | name: '停机', |
| | | code: 'stop' |
| | | }, |
| | | { |
| | | value: res.result.bxqk.length > 0 ? res.result.bxqk.find(item => item.code === 'run').value : 0, |
| | | name: '运行', |
| | | code: 'run' |
| | | } |
| | | ] |
| | | this.techConditionChartRequireFinished = true |
| | | this.warrantyMalfunctionChartRequireFinished = true |
| | |
| | | icon: 'roundRect', |
| | | itemGap: 15, |
| | | textStyle: { |
| | | color: 'inherit', |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 14, |
| | | padding: [0, 0, 0, 0] |
| | | }, |
| | |
| | | color: [ |
| | | '#686869', |
| | | '#AA6349', |
| | | '#EAEA7C', |
| | | '#FFFF88', |
| | | '#5D975D' |
| | | ], |
| | | label: { |
| | | position: 'outside', |
| | | show: true, |
| | | color: 'inherit', |
| | | color: 'rgba(0,0,0,.45)', |
| | | // textBorderColor: 'inherit', |
| | | // textBorderWidth: 1, |
| | | fontSize: 16, |
| | |
| | | labelLine: { |
| | | show: true, |
| | | length2: 10, |
| | | length: 10 |
| | | length: 10, |
| | | lineStyle: { |
| | | color: 'rgba(0,0,0,.45)' |
| | | } |
| | | }, |
| | | data: this.runningStateData |
| | | } |
| | |
| | | drawEfficiencyChart() { |
| | | const colorArray = [ |
| | | { |
| | | top: '#79CEAA', |
| | | bottom: '#79CEAA' |
| | | top: '#EA967B', |
| | | bottom: '#F8E18B' |
| | | }, |
| | | { |
| | | top: '#F589A2', |
| | | bottom: '#F589A2' |
| | | top: '#62AC75', |
| | | bottom: '#A8D07C' |
| | | }, |
| | | { |
| | | top: '#6FBF9D', |
| | | bottom: '#6FBF9D' |
| | | top: '#32ACBF', |
| | | bottom: '#7BCAC5' |
| | | }, |
| | | { |
| | | top: '#66DFE2', |
| | | bottom: '#66DFE2' |
| | | }, { |
| | | top: '#A7F0C1', |
| | | bottom: '#A7F0C1' |
| | | }, |
| | | { |
| | | top: '#FAE893', |
| | | bottom: '#FAE893' |
| | | }, |
| | | { |
| | | top: '#F7B7A0', |
| | | bottom: '#F7B7A0' |
| | | top: '#7196CE', |
| | | bottom: '#8DCCEF' |
| | | } |
| | | ] |
| | | const data = this.efficiencyData |
| | |
| | | icon: 'roundRect', |
| | | itemGap: 15, |
| | | textStyle: { |
| | | color: 'inherit', |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 14, |
| | | padding: [0, 0, 0, 0] |
| | | }, |
| | |
| | | label: { |
| | | position: 'outside', |
| | | show: true, |
| | | color: 'inherit', |
| | | color: 'rgba(0,0,0,.45)', |
| | | // textBorderColor: 'inherit', |
| | | // textBorderWidth: 1, |
| | | fontSize: 16, |
| | |
| | | labelLine: { |
| | | show: true, |
| | | length2: 10, |
| | | length: 10 |
| | | length: 10, |
| | | lineStyle: { |
| | | color: 'rgba(0,0,0,.45)' |
| | | } |
| | | }, |
| | | data: this.techConditionData |
| | | } |
| | |
| | | icon: 'roundRect', |
| | | itemGap: 15, |
| | | textStyle: { |
| | | color: 'inherit', |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 14, |
| | | padding: [0, 0, 0, 0] |
| | | }, |
| | |
| | | color: [ |
| | | '#00CED1', |
| | | '#B85B38', |
| | | '#EAEA7C' |
| | | '#FFFF88' |
| | | ], |
| | | label: { |
| | | position: 'outside', |
| | | show: true, |
| | | color: 'inherit', |
| | | color: 'rgba(0,0,0,.45)', |
| | | // textBorderColor: 'inherit', |
| | | // textBorderWidth: 1, |
| | | fontSize: 16, |
| | |
| | | labelLine: { |
| | | show: true, |
| | | length2: 10, |
| | | length: 10 |
| | | length: 10, |
| | | lineStyle: { |
| | | color: 'rgba(0,0,0,.45)' |
| | | } |
| | | }, |
| | | data: this.warrantyMalfunctionData |
| | | } |
| | |
| | | this.maintenanceConfig = { |
| | | indexHeader: '序号', |
| | | header: ['车间', '日期', '内容'], |
| | | headerBGC: '#266C86', |
| | | oddRowBGC: '#003B51', |
| | | evenRowBGC: '#0A2732', |
| | | headerBGC: '#46B7E3', |
| | | oddRowBGC: '#0383AF', |
| | | evenRowBGC: '#0395C9', |
| | | data: this.twoMaintenanceChartData, |
| | | index: true, |
| | | columnWidth: [100, 300, 300, 300], |
| | |
| | | |
| | | /* 绘制单柱图 */ |
| | | drawBarChart() { |
| | | const colorArray = ['#79CEAA', '#F589A2', '#6FBF9D', '#66DFE2', '#A7F0C1', '#FAE893', '#F7B7A0'] |
| | | const defaultData = [] |
| | | const dataMax = this.barChartData.length > 0 ? +this.barChartData.sort((x, y) => +y.value - +x.value)[0].value : 0 |
| | | let yAxisMax |
| | |
| | | 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 = { |
| | | title: { |
| | | show: true, // 是否显示标题,默认为true |
| | |
| | | formatter: function(params) { |
| | | return '<span style="font-weight:bolder;">' + params[0].name + '</span><br/>' + |
| | | '<span style="display:inline-block; width:10px; height:10px; border-radius:100px; margin-right:5px; background:' + params[0].color + '"></span>' + ' OEE: ' + params[0].value + '%' |
| | | }, |
| | | // backgroundColor: 'rgba(9, 24, 48, 0.5)', |
| | | borderColor: 'rgba(75, 253, 238, 0.4)', |
| | | textStyle: { |
| | | // color: '#CFE3FC' |
| | | }, |
| | | borderWidth: 1 |
| | | } |
| | | }, |
| | | grid: { |
| | | top: '15%', |
| | | left: '10%' |
| | | }, |
| | | xAxis: [{ |
| | | name: '', |
| | | nameLocation: 'middle', |
| | | nameGap: 40, // x轴name与横坐标轴线的间距 |
| | | type: 'category', |
| | | data: this.barChartData.map(item => item.productionId), |
| | | xAxis: { |
| | | data: this.barChartData.map(item => item.name), |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | axisLine: { |
| | | show: true, |
| | | lineStyle: { |
| | | color: 'rgba(0,0,0,.45)' |
| | | } |
| | | }, |
| | | axisLabel: { |
| | | show: true, // 是否显示刻度标签,默认显示 |
| | | interval: 0, // 坐标轴刻度标签的显示间隔,在类目轴中有效;默认会采用标签不重叠的策略间隔显示标签;可以设置成0强制显示所有标签;如果设置为1,表示『隔一个标签显示一个标签』,如果值为2,表示隔两个标签显示一个标签,以此类推。 |
| | | rotate: this.barChartData.length >= 6 ? -30 : 0, // 刻度标签旋转的角度,在类目轴的类目标签显示不下的时候可以通过旋转防止标签之间重叠;旋转的角度从-90度到90度 |
| | | inside: false, // 刻度标签是否朝内,默认朝外 |
| | | margin: 10, // 刻度标签与轴线之间的距离 |
| | | formatter: value => { |
| | | return `${this.barChartData.find(item => item.productionId === value).name}` |
| | | }, |
| | | fontSize: 14 |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | alignWithLabel: true |
| | | } |
| | | }], |
| | | yAxis: [{ |
| | | rotate: 20, |
| | | margin: 25, |
| | | textStyle: { |
| | | fontSize: 14, |
| | | color: 'rgba(0,0,0,.45)', |
| | | align: 'center' |
| | | } |
| | | }, |
| | | interval: 0 |
| | | }, |
| | | yAxis: { |
| | | name: '%', |
| | | min: 0, |
| | | max: yAxisMax, |
| | | interval: yAxisInterval, |
| | | axisLabel: { |
| | | formatter: '{value}', |
| | | fontSize: 14 |
| | | splitLine: { |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | axisLine: { |
| | | show: false, |
| | | show: true, |
| | | lineStyle: { |
| | | color: 'rgba(0,0,0,.45)' |
| | | } |
| | | }, |
| | | splitLine: { |
| | | show: false, |
| | | lineStyle: { |
| | | color: 'rgba(255,255,255,0.12)' |
| | | axisLabel: { |
| | | show: true, |
| | | margin: 10, |
| | | textStyle: { |
| | | fontSize: 14, |
| | | color: 'rgba(0,0,0,.45)' |
| | | } |
| | | } |
| | | }], |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | data: this.barChartData, |
| | | barWidth: this.barChartData.length > 5 ? '40%' : 30, |
| | | type: 'pictorialBar', |
| | | symbolSize: [26, 10], |
| | | symbolOffset: [0, -5], |
| | | z: 12, |
| | | itemStyle: { |
| | | color: function(params) { |
| | | let num = colorArray.length |
| | | return colorArray[params.dataIndex % num] |
| | | return barBottomColor[params.dataIndex % barBottomColor.length] |
| | | } |
| | | // color: new echarts.graphic.LinearGradient( |
| | | // 0, 0, 0, 1, [{ |
| | | // offset: 0, |
| | | // color: '#83bff6' |
| | | // }, |
| | | // { |
| | | // offset: 0.5, |
| | | // color: '#188df0' |
| | | // }, |
| | | // { |
| | | // offset: 1, |
| | | // color: '#188df0' |
| | | // } |
| | | // ] |
| | | // ) |
| | | }, |
| | | zlevel: 1, |
| | | label: { |
| | | show: false, |
| | | lineHeight: 10, |
| | | formatter: params => { |
| | | if (+params.value === 0) return '' |
| | | else return params.value |
| | | }, |
| | | show: true, |
| | | position: 'top', |
| | | textStyle: { |
| | | color: '#fff', |
| | | fontSize: 16 |
| | | } |
| | | } |
| | | fontSize: 12, |
| | | color: 'rgba(0,0,0,.45)' |
| | | }, |
| | | symbolPosition: 'end', |
| | | data: this.barChartData |
| | | }, |
| | | { |
| | | name: '背景', |
| | | type: 'bar', |
| | | barWidth: this.barChartData.length > 5 ? '40%' : 30, |
| | | barGap: '-100%', |
| | | data: defaultData, |
| | | type: 'pictorialBar', |
| | | symbolSize: [26, 10], |
| | | symbolOffset: [0, 5], |
| | | z: 12, |
| | | itemStyle: { |
| | | color: 'rgba(0,0,0,.05)' |
| | | } |
| | | color: function(params) { |
| | | return barTopColor[params.dataIndex % barTopColor.length] |
| | | } |
| | | }, |
| | | data: this.barChartData |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | itemStyle: { |
| | | color: function(params) { |
| | | return new echarts.graphic.LinearGradient( |
| | | 0, 0, 0, 1, |
| | | [{ |
| | | offset: 1, |
| | | color: barTopColor[params.dataIndex % barTopColor.length] |
| | | }, |
| | | { |
| | | offset: 0, |
| | | color: barBottomColor[params.dataIndex % barBottomColor.length] |
| | | } |
| | | ] |
| | | ) |
| | | }, |
| | | opacity: .9 |
| | | }, |
| | | z: 16, |
| | | barWidth: 26, |
| | | barGap: '-100%', |
| | | data: this.barChartData |
| | | }] |
| | | // aria: { |
| | | // enabled: true, |
| | | // decal: { |
| | | // show: true, |
| | | // decals: [ |
| | | // { |
| | | // color: 'rgba(0,0,0,.2)', |
| | | // dashArrayX: [20, 0], |
| | | // dashArrayY: [1, 2], |
| | | // symbol: 'rect', |
| | | // rotation: Math.PI / 4 |
| | | // }, |
| | | // { |
| | | // symbol: 'none' |
| | | // } |
| | | // ] |
| | | // } |
| | | // } |
| | | } |
| | | |
| | | option.title.text = moment().subtract(1, 'months').format('M月') + `OEE` |
| | | this.barChart.setOption(option, true) |
| | | this.barChart.hideLoading() |
| | | |
| | | this.barChart.on('click', params => { |
| | | let productionId |
| | | // 点击的是柱体的值,否则点击的为柱体背景阴影 |
| | | if (params.seriesIndex === 0) productionId = params.data.productionId |
| | | else productionId = params.name |
| | | console.log('params', params) |
| | | productionId = params.data.productionId |
| | | |
| | | this.$router.push({ |
| | | name: 'mdc-base-OEEAnalysis', |
| | |
| | | /* 绘制双柱图 */ |
| | | drawDoubleBarChart() { |
| | | const option = { |
| | | color: ['#4992FF', '#4DC0B1'], |
| | | color: ['#1890FF', '#2EC35C'], |
| | | tooltip: { |
| | | confine: true, |
| | | formatter: function(params) { |
| | |
| | | series: [{ |
| | | type: 'bar', |
| | | barWidth: 20, |
| | | barGap: '0%', |
| | | itemStyle: { barBorderRadius: 4 }, |
| | | name: 'OEE', |
| | | data: this.doubleBarChartData.oeeList, |
| | | label: { |
| | | show: false, |
| | | show: true, |
| | | lineHeight: 10, |
| | | formatter: params => { |
| | | if (+params.value === 0) return '' |
| | | else return params.value |
| | | }, |
| | | position: 'inside', |
| | | position: 'top', |
| | | textStyle: { |
| | | color: '#fff', |
| | | fontSize: 12 |
| | | 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: false, |
| | | show: true, |
| | | lineHeight: 10, |
| | | formatter: params => { |
| | | if (+params.value === 0) return '' |
| | |
| | | }, |
| | | position: 'inside', |
| | | textStyle: { |
| | | color: '#fff', |
| | | fontSize: 12 |
| | | color: 'rgba(0,0,0,.45)', |
| | | fontSize: 10 |
| | | } |
| | | } |
| | | } |
| | |
| | | this.problemConfig = { |
| | | indexHeader: '序号', |
| | | header: ['时间', '问题内容'], |
| | | headerBGC: '#83B883', |
| | | oddRowBGC: '#556955', |
| | | evenRowBGC: '#556955', |
| | | headerBGC: '#A5CCE6', |
| | | oddRowBGC: '#6B9FCD', |
| | | evenRowBGC: '#5A7D9A', |
| | | data: this.workshopProblemChartData, |
| | | index: true, |
| | | columnWidth: [100, 200, 300], |
| | | align: ['center'] |
| | | align: ['center', 'center', 'center'] |
| | | } |
| | | }, |
| | | |
| | |
| | | } else { |
| | | this.pieChartRadius = this.normalPieChartRadius.map(item => item = (+item.slice(0, -1) * (clientWidth / this.firstEnterClientWidth)) + '%') |
| | | } |
| | | console.log('pieChartRadius', this.pieChartRadius) |
| | | this.$nextTick(() => { |
| | | if (this.runningStateChartDataRequireFinished) this.drawRunningStateChart(this.currentPageProductionId) |
| | | if (this.techConditionChartRequireFinished) this.drawTechConditionChart() |