From ac5ea4c47689788facb2471995621c720a06abc8 Mon Sep 17 00:00:00 2001 From: haoxuan <haoxuan> Date: 星期五, 01 十二月 2023 17:31:34 +0800 Subject: [PATCH] 设备负荷对比分析的组件开发 --- src/views/cockpitPage/components/ChartTitle.vue | 2 src/views/cockpitPage/components/DeviceChart.vue | 350 +++++++++++++++++++---------------- src/components/cockpitPage/BackgroundBoardLayout.vue | 1 src/views/cockpitPage/components/BarChart.vue | 4 src/views/cockpitPage/components/PerSonnelProductivity.vue | 219 +++++++++++++++++++++ src/views/cockpitPage/components/MaterialChart.vue | 6 src/views/cockpitPage/index.vue | 6 7 files changed, 422 insertions(+), 166 deletions(-) diff --git a/src/components/cockpitPage/BackgroundBoardLayout.vue b/src/components/cockpitPage/BackgroundBoardLayout.vue index 3022f4e..08c04fc 100644 --- a/src/components/cockpitPage/BackgroundBoardLayout.vue +++ b/src/components/cockpitPage/BackgroundBoardLayout.vue @@ -142,6 +142,7 @@ .left-bottom-right-block { width: $leftBottomRightWidth; height: 100%; + padding-right:20px; .right-bottom-top-block { height: 60%; } diff --git a/src/views/cockpitPage/components/BarChart.vue b/src/views/cockpitPage/components/BarChart.vue index 1d090ae..d494732 100644 --- a/src/views/cockpitPage/components/BarChart.vue +++ b/src/views/cockpitPage/components/BarChart.vue @@ -233,7 +233,7 @@ { type: 'bar', name: '姝e搧鏁伴噺', - barWidth: '20%', + barWidth: '15', itemStyle: { normal: { //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋� @@ -245,7 +245,7 @@ { type: 'bar', name: '娆″搧鏁伴噺', - barWidth: '20%', + barWidth: '15', itemStyle: { normal: { //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋� diff --git a/src/views/cockpitPage/components/ChartTitle.vue b/src/views/cockpitPage/components/ChartTitle.vue index 2709c63..1ca2814 100644 --- a/src/views/cockpitPage/components/ChartTitle.vue +++ b/src/views/cockpitPage/components/ChartTitle.vue @@ -41,7 +41,7 @@ top:0; } .title-bg{ - width:100%; + width:calc(100% - 20px); height:30px; padding-left:20px; display:inline-block; diff --git a/src/views/cockpitPage/components/DeviceChart.vue b/src/views/cockpitPage/components/DeviceChart.vue index 8e65081..be8a045 100644 --- a/src/views/cockpitPage/components/DeviceChart.vue +++ b/src/views/cockpitPage/components/DeviceChart.vue @@ -1,6 +1,11 @@ <template> <div class="bar-chart"> - <ChartTitle name="璁惧璐熻嵎瀵规瘮鍒嗘瀽"></ChartTitle> + <div class="top-view"> + <img src="/cockpitPage/machine-top.png" alt="" /> + <div class="top-title"> + <span>璁惧璐熻嵎瀵规瘮鍒嗘瀽</span> + </div> + </div> <div class="bar-contents"> <div class="chart" ref="chart"></div> </div> @@ -8,193 +13,218 @@ </template> <script> -import ChartTitle from "@/views/cockpitPage/components/ChartTitle.vue"; //寮曞叆echart import * as echarts from 'echarts' export default { components: { - ChartTitle, }, props: {}, data() { return { - chartData:{ - datax:['浜у搧1', '浜у搧2', '浜у搧3', '浜у搧4','浜у搧5', '浜у搧6'], - datay:[120, 200, 150, 380, 470, 150, 230], + chartData: { + datax: ['璁惧1', '璁惧2', '璁惧3', '璁惧4', '璁惧5', '璁惧6'], + datay: [10, 20, 15, 38, 47, 50, 20], } }; }, mounted() { - this.pieChart('chart',this.chartData) + this.pieChart('chart', this.chartData) }, watch: {}, methods: { //鍦ㄨ亴 - pieChart(chartName,data){ - let chartDom = this.$refs[chartName] - let myChart = echarts.init(chartDom); - let option; - let lineColor='#35ddc74d' - if(data){ - option = { - color:['#00FFFF','#dcb018'], - tooltip: { - trigger: 'axis', - axisPointer: { - type: 'none' - }, + pieChart(chartName, data) { + let chartDom = this.$refs[chartName] + let myChart = echarts.init(chartDom); + let option; + let lineColor = '#35ddc74d' + if (data) { + option = { + color: ['#00FFFF', '#dcb018'], + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'none' + }, + }, + grid: { + right: "80px", + bottom: '60px', + left: '60px', + top: '30px', + }, + dataZoom: [ + { + type: 'inside', + // show: true, //鏄剧ず婊氬姩鏉� + start: 0, + end: 100, + yAxisIndex: 0, + minSpan: 20, + maxSpan: 100, + // handleSize: 8 + }, + { + // type: 'slider', //涓や釜涓�涓槸slider锛屼竴涓槸inside锛宻lider鏄鍔犳粴鍔ㄦ潯浠ュ強榧犳爣鎷栧姩婊氬姩鏉″姛鑳斤紝inside鍒欐槸榧犳爣婊氳疆婊氬姩婊氬姩鏉°�� + type: 'inside', + // show: true, + // realtime : true, + yAxisIndex: 0, + minSpan: 20, + maxSpan: 100, + start: 0, + end: 100 + }, + ], + legend: { + itemWidth: 8, + itemHeight: 8, + itemGap: 35,//闂磋窛 + bottom: '5px', + left: 'center', + }, + yAxis: [ + { + type: 'category', + axisTick: { + show: false }, - grid: { - right: "80px", - bottom:'60px', - left:'60px', - top:'30px', - }, - dataZoom: [ - { - type: 'inside', - // show: true, //鏄剧ず婊氬姩鏉� - start:0, - end: 100, - xAxisIndex: 0, - minSpan:20, - maxSpan:100, - // handleSize: 8 - }, - { - // type: 'slider', //涓や釜涓�涓槸slider锛屼竴涓槸inside锛宻lider鏄鍔犳粴鍔ㄦ潯浠ュ強榧犳爣鎷栧姩婊氬姩鏉″姛鑳斤紝inside鍒欐槸榧犳爣婊氳疆婊氬姩婊氬姩鏉°�� - type: 'inside', - // show: true, - // realtime : true, - xAxisIndex: 0, - minSpan:20, - maxSpan:100, - start: 0, - end: 100 - }, - ], - legend: { - itemWidth: 8, - itemHeight: 8, - itemGap: 35,//闂磋窛 - bottom:'5px', - left:'center', - }, - yAxis: [ - { - type: 'category', - axisTick: { - show: false - }, - axisLine: { - show: true, - lineStyle: { - color:lineColor, - } - }, - axisLabel:{ - // rotate:45, - margin: 10, - show: true, - textStyle: { - color:function(params,index){ - let colorList=['#dcb018','#00FFFF'] - if(index % 2 == 0){ - return colorList[0] - }else{ - return colorList[1] - } - } - }, - }, - data: data.datax?data.datax:[], + axisLine: { + show: true, + lineStyle: { + color: lineColor, } - ], - xAxis: [ - { - type: '', - name: '鍗曚綅锛氫欢', - // min: data.yAxis[0].min?data.yAxis.min:0, - minInterval: 1,//鍧愭爣杞存槸鏁存暟 - max:Math.ceil(eval(`Math.max(${data.datay})`)/5)*5,//鏁版嵁鏈�澶у�煎姞3 - interval: Math.ceil(eval( `Math.max(${data.datay})`)/7)*7 / 7, - position: 'left', - axisLine: { - show: true, - lineStyle: { - color:'#0a112B', + }, + axisLabel: { + // rotate:45, + margin: 10, + show: true, + textStyle: { + color: function (params, index) { + let colorList = ['#dcb018', '#00FFFF'] + if (index % 2 == 0) { + return colorList[0] + } else { + return colorList[1] } - }, - nameTextStyle:{ - color:"#00FFFF", - }, - splitLine: { - show: true, - lineStyle: { - // 浣跨敤娣辨祬鐨勯棿闅旇壊 - color: lineColor, - } - }, - axisTick: { - show: false - }, - - axisLabel: { - textStyle: { - color: '#00FFFF' - }, - } }, - ], - series:[ - { - type: 'bar', - name: '', - barWidth: '20%', - itemStyle: { - normal: { - //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋� - barBorderRadius:[4, 4, 0, 0], - color:function(params){ - let colorList=['#dcb018','#00FFFF'] - if(params.dataIndex % 2 == 0){ - return colorList[0] - }else{ - return colorList[1] - } - } - }, - }, - data: data.datay, - }, - ] - }; + }, + data: data.datax ? data.datax : [], + } + ], + xAxis: [ + { + type: '', + name: '', + // min: data.yAxis[0].min?data.yAxis.min:0, + minInterval: 1,//鍧愭爣杞存槸鏁存暟 + max: Math.ceil(eval(`Math.max(${data.datay})`) / 5) * 5,//鏁版嵁鏈�澶у�煎姞3 + interval: Math.ceil(eval(`Math.max(${data.datay})`) / 6) * 6 / 6, + position: 'left', + axisLine: { + show: true, + lineStyle: { + color: '#0a112B', + } + }, + nameTextStyle: { + color: "#00FFFF", + }, + splitLine: { + show: true, + lineStyle: { + // 浣跨敤娣辨祬鐨勯棿闅旇壊 + color: lineColor, + } + }, + axisTick: { + show: false + }, - option && myChart.setOption(option); - }else{ - option={}; - myChart.setOption(option,true); - } - }, + axisLabel: { + textStyle: { + color: '#00FFFF' + }, + formatter: '{value}%' + } + }, + ], + series: [ + { + type: 'bar', + name: '', + barWidth: '15', + label:{ + show:true, + position:'right', + color: '#00FFFF' + }, + itemStyle: { + normal: { + //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋� + barBorderRadius: [4, 4, 0, 0], + color: function (params) { + let colorList = ['#dcb018', '#00FFFF'] + if (params.dataIndex % 2 == 0) { + return colorList[0] + } else { + return colorList[1] + } + } + }, + }, + data: data.datay, + }, + ] + }; + + option && myChart.setOption(option); + } else { + option = {}; + myChart.setOption(option, true); + } + }, }, }; </script> <style scoped lang="scss"> -.bar-chart{ - width:100%; - height:calc(100% - 0px); - padding:0px 0 0; - .bar-contents{ - width:100%; - height:calc(100% - 60px); - border:1px solid #00FFFF; - box-sizing: border-box; - .chart{ - width: 100%; - height:100%; +.bar-chart { + width: 100%; + height: calc(100% - 0px); + padding: 0px 0 0; + border: 1px solid #00FFFF; + box-sizing: border-box; + position: relative; + .top-view { + height:38px; + margin-top: -1px; + margin-left: -1px; + position: relative; + left:0; + top:0; + .top-title { + width: calc(100% - 10px); + margin: auto; + height:38px; + line-height:38px; + position:absolute; + top:0; + left:10px; + color: #01f7fd; + font-size: 14px; + font-family: "Arial Negreta", "Arial Normal", "Arial"; + font-weight: 700; } + } + .bar-contents { + width: 100%; + height: calc(100% - 40px); + .chart { + width: 100%; + height: 100%; + } } } </style> diff --git a/src/views/cockpitPage/components/MaterialChart.vue b/src/views/cockpitPage/components/MaterialChart.vue index 3102763..56c5eaf 100644 --- a/src/views/cockpitPage/components/MaterialChart.vue +++ b/src/views/cockpitPage/components/MaterialChart.vue @@ -56,7 +56,7 @@ // show: true, //鏄剧ず婊氬姩鏉� start:0, end: 100, - xAxisIndex: 0, + yAxisIndex: 0, minSpan:20, maxSpan:100, // handleSize: 8 @@ -66,7 +66,7 @@ type: 'inside', // show: true, // realtime : true, - xAxisIndex: 0, + yAxisIndex: 0, minSpan:20, maxSpan:100, start: 0, @@ -151,7 +151,7 @@ { type: 'bar', name: '', - barWidth: '20%', + barWidth: '15', itemStyle: { normal: { //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋� diff --git a/src/views/cockpitPage/components/PerSonnelProductivity.vue b/src/views/cockpitPage/components/PerSonnelProductivity.vue new file mode 100644 index 0000000..bde5d14 --- /dev/null +++ b/src/views/cockpitPage/components/PerSonnelProductivity.vue @@ -0,0 +1,219 @@ +<template> + <div class="bar-chart"> + <ChartTitle name="浜哄憳鐢熶骇鏁堢巼瀵规瘮"></ChartTitle> + <div class="bar-contents"> + <div class="chart-left"> + <div class="chart" ref="chart"></div> + </div> + <div class="chart-right"> + <div class="chart" ref="chart2"></div> + </div> + </div> + </div> +</template> + +<script> +import ChartTitle from "@/views/cockpitPage/components/ChartTitle.vue"; +//寮曞叆echart +import * as echarts from 'echarts' +export default { + components: { + ChartTitle, + }, + props: {}, + data() { + return { + chartData:{ + datax:['浜哄憳1', '浜哄憳2', '浜哄憳3', '浜哄憳4','浜哄憳5', '浜哄憳6'], + datay:[120, 200, 150, 380, 470, 150, 230], + } + }; + }, + mounted() { + this.pieChart('chart',this.chartData) + }, + watch: {}, + methods: { + //鍦ㄨ亴 + pieChart(chartName,data){ + let chartDom = this.$refs[chartName] + let myChart = echarts.init(chartDom); + let option; + let lineColor='#35ddc74d' + if(data){ + option = { + color:['#00FFFF','#dcb018'], + tooltip: { + trigger: 'axis', + axisPointer: { + type: 'none' + }, + }, + grid: { + right: "80px", + bottom:'60px', + left:'60px', + top:'30px', + }, + dataZoom: [ + { + type: 'inside', + // show: true, //鏄剧ず婊氬姩鏉� + start:0, + end: 100, + yAxisIndex: 0, + minSpan:20, + maxSpan:100, + // handleSize: 8 + }, + { + // type: 'slider', //涓や釜涓�涓槸slider锛屼竴涓槸inside锛宻lider鏄鍔犳粴鍔ㄦ潯浠ュ強榧犳爣鎷栧姩婊氬姩鏉″姛鑳斤紝inside鍒欐槸榧犳爣婊氳疆婊氬姩婊氬姩鏉°�� + type: 'inside', + // show: true, + // realtime : true, + yAxisIndex: 0, + minSpan:20, + maxSpan:100, + start: 0, + end: 100 + }, + ], + legend: { + itemWidth: 8, + itemHeight: 8, + itemGap: 35,//闂磋窛 + bottom:'5px', + left:'center', + }, + yAxis: [ + { + type: 'category', + axisTick: { + show: false + }, + axisLine: { + show: true, + lineStyle: { + color:lineColor, + } + }, + axisLabel:{ + // rotate:45, + margin: 10, + show: true, + textStyle: { + color:function(params,index){ + let colorList=['#dcb018','#00FFFF'] + if(index % 2 == 0){ + return colorList[0] + }else{ + return colorList[1] + } + } + }, + }, + data: data.datax?data.datax:[], + } + ], + xAxis: [ + { + type: '', + name: '鍗曚綅锛氫欢', + // min: data.yAxis[0].min?data.yAxis.min:0, + minInterval: 1,//鍧愭爣杞存槸鏁存暟 + max:Math.ceil(eval(`Math.max(${data.datay})`)/5)*5,//鏁版嵁鏈�澶у�煎姞3 + interval: Math.ceil(eval( `Math.max(${data.datay})`)/7)*7 / 7, + position: 'left', + axisLine: { + show: true, + lineStyle: { + color:'#0a112B', + } + }, + nameTextStyle:{ + color:"#00FFFF", + }, + splitLine: { + show: true, + lineStyle: { + // 浣跨敤娣辨祬鐨勯棿闅旇壊 + color: lineColor, + } + }, + axisTick: { + show: false + }, + + axisLabel: { + textStyle: { + color: '#00FFFF' + }, + + } + }, + ], + series:[ + { + type: 'bar', + name: '', + barWidth: '15', + label:{ + show:true, + position:'right', + color: '#00FFFF' + }, + itemStyle: { + normal: { + //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋� + barBorderRadius:[4, 4, 0, 0], + color:function(params){ + let colorList=['#dcb018','#00FFFF'] + if(params.dataIndex % 2 == 0){ + return colorList[0] + }else{ + return colorList[1] + } + } + }, + }, + data: data.datay, + }, + ] + }; + + option && myChart.setOption(option); + }else{ + option={}; + myChart.setOption(option,true); + } + }, + }, +}; +</script> + +<style scoped lang="scss"> +.bar-chart{ + width:100%; + height:calc(100% - 20px); + padding:20px 0 0; + .bar-contents{ + width:100%; + height:calc(100% - 60px); + + .chart-left{ + width: 50%; + height:100%; + border:1px solid #00FFFF; + box-sizing: border-box; + } + .chart-right{ + width: 50%; + height:100%; + } + .chart{ + width:100%; + height:100%; + } + } +} +</style> diff --git a/src/views/cockpitPage/index.vue b/src/views/cockpitPage/index.vue index f5b44ca..476bc4b 100644 --- a/src/views/cockpitPage/index.vue +++ b/src/views/cockpitPage/index.vue @@ -9,6 +9,10 @@ <template #leftBlock3> <CountView></CountView> </template> + + <template #leftBlock6> + <PerSonnelProductivity @should-reload="reloadAllData"></PerSonnelProductivity> + </template> <template #rightBlock1> <DeviceChart @should-reload="reloadAllData"></DeviceChart> </template> @@ -26,6 +30,7 @@ import MachineStartupRate from "@/views/cockpitPage/components/MachineStartupRate"; import CountView from "@/views/cockpitPage/components/CountView"; import BackgroundBoardLayout from "@/components/cockpitPage/BackgroundBoardLayout.vue"; +import PerSonnelProductivity from "@/views/cockpitPage/components/PerSonnelProductivity.vue"; import DeviceChart from "@/views/cockpitPage/components/DeviceChart.vue"; import MaterialChart from "@/views/cockpitPage/components/MaterialChart.vue"; import BarChart from "@/views/cockpitPage/components/BarChart.vue"; @@ -33,6 +38,7 @@ components: { StatisticalBox, BackgroundBoardLayout, + PerSonnelProductivity, DeviceChart, MaterialChart, BarChart, -- Gitblit v1.8.0