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