From da4d9e70d2c37f59a365b0fb88ad70e8c1ba79b4 Mon Sep 17 00:00:00 2001 From: yangfeng <wanwan926_4@163.com> Date: 星期一, 11 十二月 2023 10:25:01 +0800 Subject: [PATCH] 机器开机率优化 --- src/views/cockpitPage/components/PerSonnelProductivity.vue | 355 ++++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 216 insertions(+), 139 deletions(-) diff --git a/src/views/cockpitPage/components/PerSonnelProductivity.vue b/src/views/cockpitPage/components/PerSonnelProductivity.vue index 85bd057..94223a8 100644 --- a/src/views/cockpitPage/components/PerSonnelProductivity.vue +++ b/src/views/cockpitPage/components/PerSonnelProductivity.vue @@ -15,127 +15,148 @@ <script> import ChartTitle from "@/views/cockpitPage/components/ChartTitle.vue"; //寮曞叆echart -import * as echarts from 'echarts' +import * as echarts from "echarts"; +let myChart; +let myRightChart; export default { components: { ChartTitle, }, - props: {}, + props: { + chartData: { + type: Object, + require: true, + default: () => { + return { + datax: [], + datay: [], + }; + }, + }, + }, data() { return { - chartData: { - datax: ['浜哄憳1', '浜哄憳2', '浜哄憳3', '浜哄憳4', '浜哄憳5', '浜哄憳6'], - datay: [120, 200, 150, 380, 470, 150, 230], - }, + startValue: 0, + endValue: 5, + chartTimer: null, }; }, - mounted() { - this.pieChart('chart', this.chartData) - let chartData2 = [ - { value: 10, name: "涓�绫�" }, - { value: 20, name: "浜岀被" }, - { value: 60, name: "涓夌被" }, - { value: 10, name: "鍥涚被" }, - ]; - this.getChartRight('chart2', chartData2) + watch: { + "chartData.datay"(val) { + this.startValue = 0; + this.endValue = 5; + this.pieChart("chart", this.chartData); + }, }, - watch: {}, + mounted() {}, methods: { //鍦ㄨ亴 pieChart(chartName, data) { - let chartDom = this.$refs[chartName] - let myChart = echarts.init(chartDom); + let that = this; + clearInterval(this.chartTimer); + let chartDom = this.$refs[chartName]; + // let myChart = echarts.init(chartDom); + if (myChart != null && myChart != "" && myChart != undefined) { + myChart.dispose(); //閿�姣� + } + myChart = echarts.init(chartDom); let option; - let lineColor = '#35ddc74d' + let lineColor = "#35ddc74d"; + let spirit = "/cockpitPage/order-bg.png"; if (data) { option = { - color: ['#00FFFF', '#dcb018'], + color: ["#00FFFF", "#dcb018"], tooltip: { - trigger: 'axis', + trigger: "axis", axisPointer: { - type: 'none' + type: "none", + }, + textStyle: { + color: "#00FFFF", + }, + borderColor: "#00FFFF", + backgroundColor: "#238d8d6b", + valueFormatter: function (value) { + return value + "%"; }, }, grid: { right: "80px", - bottom: '60px', - left: '60px', - top: '30px', + bottom: "60px", + left: "70px", + top: "30px", }, dataZoom: [ { - type: 'inside', - // show: true, //鏄剧ず婊氬姩鏉� - start: 0, - end: 100, + type: "inside", 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 + show: false, + startValue: this.startValue, // 浠庡ご寮�濮� + endValue: this.endValue, // 涓�娆℃�у睍绀哄嚑涓� + zoomOnMouseWheel: false, + moveOnMouseWheel: true, + moveOnMouseMove: true, }, ], legend: { itemWidth: 8, itemHeight: 8, - itemGap: 35,//闂磋窛 - bottom: '5px', - left: 'center', + itemGap: 35, //闂磋窛 + bottom: "5px", + left: "center", }, yAxis: [ { - type: 'category', + type: "category", axisTick: { - show: false + show: false, }, axisLine: { show: true, lineStyle: { color: lineColor, - } + }, }, axisLabel: { // rotate:45, margin: 10, show: true, + fontSize: 12, textStyle: { color: function (params, index) { - let colorList = ['#dcb018', '#00FFFF'] + let colorList = ["#fec718", "#00FFFF"]; if (index % 2 == 0) { - return colorList[0] + return colorList[0]; } else { - return colorList[1] + return colorList[1]; } + }, + }, + formatter: function (value) { + if (value.length > 5) { + return `${value.slice(0, 4)}...`; } + return value; }, }, data: data.datax ? data.datax : [], - } + }, ], xAxis: [ { - type: '', - name: '鍗曚綅锛氫欢', + type: "value", + // 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', + 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', - } + color: "#0a112B", + }, }, nameTextStyle: { color: "#00FFFF", @@ -145,50 +166,83 @@ lineStyle: { // 浣跨敤娣辨祬鐨勯棿闅旇壊 color: lineColor, - } + }, }, axisTick: { - show: false + show: false, }, - axisLabel: { textStyle: { - color: '#00FFFF' + color: "#00FFFF", }, - - } + formatter: function (value) { + return `${value}%`; + }, + }, }, ], series: [ { - type: 'bar', - name: '', - barWidth: '15', + type: "pictorialBar", + name: "", + symbol: spirit, + symbolRepeat: true, + symbolMargin: "25%", + symbolClip: true, + symbolSize: [4, 11], + barCategoryGap: "40%", label: { show: true, - position: 'right', - color: '#00FFFF' + position: "right", + formatter: function (params) { + if (params.dataIndex % 2 == 0) { + return `{a|${params.value}%}`; + } else { + return `{b|${params.value}%}`; + } + }, + rich: { + a: { + color: "#00FFFF", + }, + b: { + color: "#fccd1d", + }, + }, }, itemStyle: { normal: { //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋� barBorderRadius: [4, 4, 0, 0], color: function (params) { - let colorList = ['#dcb018', '#00FFFF'] + let colorList = ["#fccd1d", "#00FFFF"]; if (params.dataIndex % 2 == 0) { - return colorList[0] + return colorList[0]; } else { - return colorList[1] + return colorList[1]; } - } + }, }, }, data: data.datay, }, - ] + ], }; + this.chartTimer = setInterval(function () { + if (option.dataZoom[0].endValue == data.datay.length) { + option.dataZoom[0].startValue = 0; + option.dataZoom[0].endValue = 5; + } else { + option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1; + option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1; + } + myChart.setOption(option); + }, 4000); option && myChart.setOption(option); + window.addEventListener("resize", function () { + myChart.resize(); + }); } else { option = {}; myChart.setOption(option, true); @@ -196,56 +250,78 @@ }, getChartRight(chartName, data) { let chartDom = this.$refs[chartName]; - let myChart = echarts.init(chartDom); - let img='/cockpitPage/dotted-circle.png' + if ( + myRightChart != null && + myRightChart != "" && + myRightChart != undefined + ) { + myRightChart.dispose(); //閿�姣� + } + myRightChart = echarts.init(chartDom); + let img = "/cockpitPage/dotted-circle.png"; + let height = myRightChart.getHeight() / 1; + let width = height + 5; let option; if (data) { option = { - color: ["#dcb018", "#735b09", "#ebd68e",'#FF3000'], + color: ["#dcb018", "#735b09", "#ebd68e", "#c7b36e"], tooltip: { trigger: "item", + textStyle: { + color: "#00FFFF", + }, + borderColor: "#00FFFF", + backgroundColor: "#238d8d6b", + valueFormatter: function (value) { + return value + "%"; + }, }, - graphic:{ - elements:[ + graphic: { + elements: [ { - type:'image', - z:3, - style:{ - image:img, - width:118, - height:118, + type: "image", + // z: 3, + style: { + image: img, + width: width, + height: height, }, - left:'center', - top:'center', - position:[10,10] - } - - ] + left: "center", + top: "center", + position: [10, 10], + }, + ], }, series: [ { name: "Access From", type: "pie", - // center: ['80%', '46%'], - radius: ['52%','65%'], - // minAngle: 20, - // startAngle: 60, + radius: ["52%", "62%"], avoidLabelOverlap: false, - label: { - normal:{ - position: 'outer', - paddding:[-100,70], - + normal: { + position: "outer", + padding: [0, -62], color: "#01f7fd", fontSize: 12, - borderWidth:20, - borderRadius:4, + borderWidth: 5, + borderRadius: 4, formatter: function (params) { - let str= - params.name+ - params.value+'%' - return str; + let label = + params.name.length > 4 + ? `${params.name.slice(0, 3)}...` + : params.name; + return `{a|${label}} {b|${params.value + "%"}}`; + }, + rich: { + a: { + color: "#00ffff", + fontSize: 14, + }, + b: { + color: "#fccd1d", + fontSize: 14, + }, }, }, }, @@ -254,30 +330,31 @@ show: true, fontSize: 12, fontWeight: "bold", - color:'#dcb018', + color: "#dcb018", }, }, labelLine: { show: true, - length: 20, - length2:10, - lineStyle:{ - color:'#dcb018', - } + length: 4, + length2: 70, + lineStyle: { + color: "#dcb018", + }, + }, + labelLayout: { + verticalAlign: "bottom", + dy: -5, }, data: data, }, ], }; - option && myChart.setOption(option); + option && myRightChart.setOption(option); } else { option = {}; - myChart.setOption(option, true); + myRightChart.setOption(option, true); } - - - }, }, }; @@ -286,7 +363,7 @@ <style scoped lang="scss"> .bar-chart { width: 100%; - height: calc(100% - 20px); + height: calc(100% - 10px); padding: 20px 0 0; .bar-contents { @@ -295,31 +372,31 @@ .chart-left { width: calc(60% - 20px); - height: 100%; - margin-right:20px; - float:left; - border: 1px solid #00FFFF; + height: calc(100% - 20px); + margin-right: 20px; + float: left; + border: 1px solid #00ffff; box-sizing: border-box; } .chart-right { width: 40%; - float:left; - height: 100%; - position:relative; - .chart-bg{ - width:100%; - position:absolute; - top:0; - right:0; - img{ - width:100%; + float: left; + height: calc(100% - 20px); + position: relative; + .chart-bg { + width: 100%; + position: absolute; + top: 0; + right: 0; + img { + width: 100%; } } - .chart{ - position:absolute; - top:0; - right:0; + .chart { + position: absolute; + top: 0; + right: 0; } } -- Gitblit v1.8.0