From 93d04e35d6ff02470687b73ff7494b62bdc85f2c Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期三, 06 十二月 2023 16:32:38 +0800
Subject: [PATCH] 页面背景图及饼图显示优化

---
 src/views/cockpitPage/components/BarChart.vue |  462 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 311 insertions(+), 151 deletions(-)

diff --git a/src/views/cockpitPage/components/BarChart.vue b/src/views/cockpitPage/components/BarChart.vue
index cb22b0b..15e3d29 100644
--- a/src/views/cockpitPage/components/BarChart.vue
+++ b/src/views/cockpitPage/components/BarChart.vue
@@ -2,6 +2,10 @@
   <div class="bar-chart">
     <ChartTitle name="杞﹂棿姝e搧鐜�"></ChartTitle>
     <div class="bar-contents">
+      <div class="bar-total">
+        <div class="bar-item">褰撴棩鍚堣鐢熶骇锛歿{ chartData.total }}</div>
+        <div class="bar-item">姝e搧鐜囷細{{ chartData.rate }}</div>
+      </div>
       <div class="chart" ref="chart"></div>
     </div>
   </div>
@@ -10,177 +14,333 @@
 <script>
 import ChartTitle from "@/views/cockpitPage/components/ChartTitle.vue";
 //寮曞叆echart
-import * as echarts from 'echarts'
+import * as echarts from "echarts";
+let myChart;
 export default {
   components: {
     ChartTitle,
   },
-  props: {},
+  props: {
+    chartData: {
+      type: Object,
+      require: true,
+      default: () => {
+        return {
+          total: 0,
+          rate: "0",
+          datax: [],
+          datay: [],
+          datay2: [],
+        };
+      },
+    },
+  },
   data() {
     return {
-
+      // chartData: {
+      //   total: 1000,
+      //   rate: "99%",
+      //   datax: [
+      //     "绗竴杞﹂棿",
+      //     "绗簩杞﹂棿",
+      //     "绗笁杞﹂棿",
+      //     "绗洓杞﹂棿",
+      //     "绗簲杞﹂棿",
+      //     "绗叚杞﹂棿",
+      //     "绗竷杞﹂棿",
+      //     "绗叓杞﹂棿",
+      //     "绗節杞﹂棿",
+      //   ],
+      //   datay: [120, 200, 150, 180, 170, 150, 130, 180, 140],
+      //   datay2: [20, 30, 50, 40, 70, 50, 30, 80, 40],
+      // },
+      startValue: 0,
+      endValue: 5,
+      chartTimer: null,
     };
   },
-  mounted() {
-    let chartData={
-      datax:['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-      datay:[120, 200, 150, 80, 70, 110, 130]
-    }
-    this.pieChart('chart',chartData)
+  watch: {
+    "chartData.datay"(val) {
+      this.startValue = 0;
+      this.endValue = 5;
+      this.pieChart("chart", this.chartData);
+    },
   },
-  watch: {},
+  mounted() {
+    // this.pieChart("chart", this.chartData);
+  },
   methods: {
     //鍦ㄨ亴
-    pieChart(chartName,data){
-          let chartDom = this.$refs[chartName]
-          let myChart = echarts.init(chartDom);
-          let option;
-          if(data){
-            option = {
-              color:['#618DF8'],
-              tooltip: {
-                trigger: 'axis',
-                axisPointer: {
-                  type: 'none'
-                }
-              },
-              grid: {
-                right: "11%",
-                bottom:'21%',
-              },
-              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: 12,
-                itemHeight: 12,
-                itemGap: 35,//闂磋窛
-                // data:data.legend?[
-                //   {
-                //     name:data.legend.data[0],
-                //     icon: 'roundRect',
-                //   },
-                // ]:[]
-              },
-              xAxis: [
-                {
-                  type: 'category',
-                  axisTick: {
-                    show: false
-                  },
-                  axisLine: {
-                    show: true,
-                    lineStyle: {
-                      color:'#EAEAEA',
-                    }
-                  },
-                  axisLabel:{
-                    rotate:45,
-                    margin: 12,
-                    show: true,
-                    textStyle: {
-                      color: '#9B9B9B'
-                    },
-                  },
-                  data: data.datax?data.datax:[],
-                }
-              ],
-              yAxis: [
-                {
-                  type: '',
-                  name: 'yyy',
-                  // 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})`)/5)*5 / 5,
-                  position: 'left',
-                  axisLine: {
-                    show: true,
-                    lineStyle: {
-                      color:'#EAEAEA',
-                    }
-                  },
-                  nameTextStyle:{
-                    color:"#9B9B9B",
-                  },
-                  splitLine: {
-                    show: true,
-                    lineStyle: {
-                      // 浣跨敤娣辨祬鐨勯棿闅旇壊
-                      color: '#EAEAEA',
-                    }
-                  },
-                  axisTick: {
-                    show: false
-                  },
-                  axisLabel: {
-                    textStyle: {
-                      color: '#9B9B9B'
-                    },
-                    formatter: ''
-                  }
-                }
-              ],
-              series:[
-                {
-                  type: '',
-                  name: 'y',
-                  barWidth: '20%',
-                  itemStyle: {
-                    normal: {
-                      //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋�
-                      barBorderRadius:[4, 4, 0, 0],
-                    }
-                  },
-                  data: data.datay,
-                }
-              ]
-            };
+    pieChart(chartName, data) {
+      let that = this;
+      clearInterval(this.chartTimer);
+      let chartDom = this.$refs[chartName];
+      if (myChart != null && myChart != "" && myChart != undefined) {
+        myChart.dispose(); //閿�姣�
+      }
+      myChart = echarts.init(chartDom);
+      let option;
+      let lineColor = "#35ddc74d";
+      if (data) {
+        option = {
+          color: ["#dcb018", "#00FFFF"],
+          tooltip: {
+            trigger: "axis",
+            axisPointer: {
+              type: "none",
+            },
+            textStyle: {
+              color: "#00FFFF",
+            },
+            borderColor: "#00FFFF",
+            backgroundColor: "#238d8d6b",
+            formatter: function (a) {
+              let list = [];
+              let listItem = "";
+              let firstString =
+                '<span style=width:70px;display:inline-block">' +
+                "鐢熶骇鎬绘暟" +
+                "</span>&nbsp;" +
+                data.total;
+              list.push(firstString);
+              for (let i in a) {
+                let str =
+                  '<span style=width:70px;display:inline-block">' +
+                  a[i].seriesName +
+                  "</span>&nbsp;" +
+                  a[i].value;
 
-            option && myChart.setOption(option);
-          }else{
-            option={};
-            myChart.setOption(option,true);
+                list.push(str);
+              }
+              let lastString =
+                '<span style=width:70px;display:inline-block">' +
+                "姝e搧鐜�" +
+                "</span>&nbsp;" +
+                data.rate;
+              list.push(lastString);
+              listItem = list.join("<br>");
+              return '<div class="showBox">' + listItem + "</div>";
+            },
+          },
+          grid: {
+            right: "10px",
+            bottom: "60px",
+            left: "10px",
+            top: "10px",
+          },
+          dataZoom: [
+            {
+              type: "inside",
+              xAxisIndex: 0,
+              show: false,
+              startValue: that.startValue, // 浠庡ご寮�濮�
+              endValue: that.endValue, // 涓�娆℃�у睍绀哄嚑涓�
+              zoomOnMouseWheel: false,
+              moveOnMouseWheel: true,
+              moveOnMouseMove: true,
+            },
+          ],
+          legend: {
+            itemWidth: 8,
+            itemHeight: 8,
+            itemGap: 35, //闂磋窛
+            bottom: "5px",
+            left: "center",
+            data: [
+              {
+                name: "姝e搧鏁伴噺",
+                icon: "circle",
+                textStyle: {
+                  color: "#dcb018",
+                },
+              },
+              {
+                name: "娆″搧鏁伴噺",
+                icon: "circle",
+                textStyle: {
+                  color: "#00FFFF",
+                },
+              },
+            ],
+          },
+          xAxis: [
+            {
+              type: "category",
+              axisTick: {
+                show: false,
+              },
+              axisLine: {
+                show: true,
+                lineStyle: {
+                  color: lineColor,
+                },
+              },
+              axisLabel: {
+                margin: 10,
+                show: true,
+                textStyle: {
+                  color: "#00FFFF",
+                },
+                formatter: function (value) {
+                  if (value.length > 4) {
+                    return `${value.slice(0, 3)}...`;
+                  }
+                  return value;
+                },
+              },
+              data: data.datax ? data.datax : [],
+            },
+          ],
+          yAxis: [
+            {
+              type: "value",
+              name: "",
+              minInterval: 1, //鍧愭爣杞存槸鏁存暟
+              max: Math.ceil(eval(`Math.max(${data.datay})`) / 5) * 5, //鏁版嵁鏈�澶у�煎姞3
+              interval:
+                (Math.ceil(eval(`Math.max(${data.datay})`) / 5) * 5) / 5,
+              position: "left",
+              axisLine: {
+                show: true,
+                lineStyle: {
+                  color: lineColor,
+                },
+              },
+              nameTextStyle: {
+                color: "#00FFFF",
+              },
+              splitLine: {
+                show: true,
+                lineStyle: {
+                  // 浣跨敤娣辨祬鐨勯棿闅旇壊
+                  color: lineColor,
+                },
+              },
+              axisTick: {
+                show: false,
+              },
+              axisLabel: {
+                textStyle: {
+                  color: "#9B9B9B",
+                },
+                formatter: "",
+              },
+            },
+            {
+              type: "value",
+              name: "",
+              // min: data.yAxis[0].min?data.yAxis.min:0,
+              minInterval: 1, //鍧愭爣杞存槸鏁存暟
+              max: Math.ceil(eval(`Math.max(${data.datay2})`) / 5) * 5, //鏁版嵁鏈�澶у�煎姞3
+              interval:
+                (Math.ceil(eval(`Math.max(${data.datay2})`) / 5) * 5) / 5,
+              position: "right",
+              axisLine: {
+                show: true,
+                lineStyle: {
+                  color: lineColor,
+                },
+              },
+              nameTextStyle: {
+                color: "#00FFFF",
+              },
+              splitLine: {
+                show: true,
+                lineStyle: {
+                  // 浣跨敤娣辨祬鐨勯棿闅旇壊
+                  color: lineColor,
+                },
+              },
+              axisTick: {
+                show: false,
+              },
+              axisLabel: {
+                textStyle: {
+                  color: "#9B9B9B",
+                },
+                formatter: "",
+              },
+            },
+          ],
+          series: [
+            {
+              type: "bar",
+              name: "姝e搧鏁伴噺",
+              barWidth: "15",
+              itemStyle: {
+                normal: {
+                  //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋�
+                  barBorderRadius: [4, 4, 0, 0],
+                },
+              },
+              data: data.datay,
+            },
+            {
+              type: "bar",
+              name: "娆″搧鏁伴噺",
+              barWidth: "15",
+              itemStyle: {
+                normal: {
+                  //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋�
+                  barBorderRadius: [4, 4, 0, 0],
+                },
+              },
+              data: data.datay2,
+            },
+          ],
+        };
+        this.chartTimer = setInterval(function () {
+          // 姣忔鍚戝乏婊戝姩涓�涓紝鏈�鍚庝竴涓粠澶村紑濮嬨��
+          if (option.dataZoom[0].endValue == that.chartData.datay.length) {
+            option.dataZoom[0].startValue = that.startValue;
+            option.dataZoom[0].endValue = that.endValue;
+          } else {
+            option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1;
+            option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1;
           }
-        },
+          myChart.setOption(option);
+        }, 3000);
+
+        option && myChart.setOption(option);
+        window.addEventListener("resize", function () {
+          myChart.resize();
+        });
+      } else {
+        option = {};
+        myChart.setOption(option, true);
+      }
+    },
   },
 };
 </script>
 
 <style scoped lang="scss">
-.bar-chart{
-  width:100%;
-  height:calc(100% - 10px);
-  padding:10px 0 0;
-  .bar-contents{
-    width:100%;
-    height:calc(100% - 60px);
-    border:1px solid #00FFFF;
+.bar-chart {
+  width: 100%;
+  height: calc(100% - 20px);
+  padding: 20px 0 0;
+  .bar-contents {
+    width: 100%;
+    height: calc(100% - 60px);
+    border: 1px solid #00ffff;
     box-sizing: border-box;
-    .chart{
-        width: 100%;
-        height:100%;
+    .bar-total {
+      width: 100%;
+      height: 30px;
+      line-height: 30px;
+      color: #dcb018;
+      font-size: 14px;
+      margin-top: 10px;
+      .bar-item {
+        width: 50%;
+        text-align: center;
+        float: left;
       }
+    }
+    .chart {
+      width: 100%;
+      height: calc(100% - 40px);
+    }
   }
 }
 </style>

--
Gitblit v1.8.0