From d2f746bcee23d0f25d31a8b532926c7e4960c01a Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期五, 01 十二月 2023 16:15:10 +0800
Subject: [PATCH] 车间正品率+物料需求统计的前端开发

---
 src/views/cockpitPage/components/ChartTitle.vue      |    2 
 src/components/cockpitPage/BackgroundBoardLayout.vue |    1 
 src/views/cockpitPage/components/BarChart.vue        |  173 ++++++++++++++++++++----
 src/views/cockpitPage/components/MaterialChart.vue   |  200 ++++++++++++++++++++++++++++
 src/views/cockpitPage/index.vue                      |    5 
 5 files changed, 349 insertions(+), 32 deletions(-)

diff --git a/src/components/cockpitPage/BackgroundBoardLayout.vue b/src/components/cockpitPage/BackgroundBoardLayout.vue
index f049878..649790b 100644
--- a/src/components/cockpitPage/BackgroundBoardLayout.vue
+++ b/src/components/cockpitPage/BackgroundBoardLayout.vue
@@ -166,7 +166,6 @@
 }
 .right-middle-block {
   height: 35%;
-  background: #dd35a5;
 }
 .right-bottom-block {
   height: 35%;
diff --git a/src/views/cockpitPage/components/BarChart.vue b/src/views/cockpitPage/components/BarChart.vue
index cb22b0b..1d090ae 100644
--- a/src/views/cockpitPage/components/BarChart.vue
+++ b/src/views/cockpitPage/components/BarChart.vue
@@ -2,6 +2,14 @@
   <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>
@@ -18,15 +26,17 @@
   props: {},
   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],
+      }
     };
   },
   mounted() {
-    let chartData={
-      datax:['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
-      datay:[120, 200, 150, 80, 70, 110, 130]
-    }
-    this.pieChart('chart',chartData)
+    this.pieChart('chart',this.chartData)
   },
   watch: {},
   methods: {
@@ -35,18 +45,50 @@
           let chartDom = this.$refs[chartName]
           let myChart = echarts.init(chartDom);
           let option;
+          let lineColor='#35ddc74d'
           if(data){
             option = {
-              color:['#618DF8'],
+              color:['#dcb018','#00FFFF'],
               tooltip: {
                 trigger: 'axis',
                 axisPointer: {
                   type: 'none'
+                },
+                textStyle:{
+                  color:'#00FFFF',
+                },
+                borderColor:'#00FFFF',
+                backgroundColor:'rbga(1,247,253,0.6)',
+                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
+                      
+                    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: "11%",
-                bottom:'21%',
+                right: "10px",
+                bottom:'60px',
+                left:'10px',
+                top:'10px',
               },
               dataZoom: [
                 {
@@ -72,15 +114,27 @@
                 },
               ],
               legend: {
-                itemWidth: 12,
-                itemHeight: 12,
+                itemWidth: 8,
+                itemHeight: 8,
                 itemGap: 35,//闂磋窛
-                // data:data.legend?[
-                //   {
-                //     name:data.legend.data[0],
-                //     icon: 'roundRect',
-                //   },
-                // ]:[]
+                bottom:'5px',
+                left:'center',
+                data:[
+                  {
+                    name:'姝e搧鏁伴噺',
+                    icon:'circle',
+                    textStyle:{
+                      color:'#dcb018'
+                    }
+                  },
+                  {
+                    name:'娆″搧鏁伴噺',
+                    icon:'circle',
+                    textStyle:{
+                      color:'#00FFFF'
+                    }
+                  },
+                ],
               },
               xAxis: [
                 {
@@ -91,15 +145,15 @@
                   axisLine: {
                     show: true,
                     lineStyle: {
-                      color:'#EAEAEA',
+                      color:lineColor,
                     }
                   },
                   axisLabel:{
-                    rotate:45,
-                    margin: 12,
+                    // rotate:45,
+                    margin: 10,
                     show: true,
                     textStyle: {
-                      color: '#9B9B9B'
+                      color: '#00FFFF'
                     },
                   },
                   data: data.datax?data.datax:[],
@@ -108,7 +162,7 @@
               yAxis: [
                 {
                   type: '',
-                  name: 'yyy',
+                  name: '',
                   // min: data.yAxis[0].min?data.yAxis.min:0,
                   minInterval: 1,//鍧愭爣杞存槸鏁存暟
                   max:Math.ceil(eval(`Math.max(${data.datay})`)/5)*5,//鏁版嵁鏈�澶у�煎姞3
@@ -117,17 +171,51 @@
                   axisLine: {
                     show: true,
                     lineStyle: {
-                      color:'#EAEAEA',
+                      color:lineColor,
                     }
                   },
                   nameTextStyle:{
-                    color:"#9B9B9B",
+                    color:"#00FFFF",
                   },
                   splitLine: {
                     show: true,
                     lineStyle: {
                       // 浣跨敤娣辨祬鐨勯棿闅旇壊
-                      color: '#EAEAEA',
+                      color: lineColor,
+                    }
+                  },
+                  axisTick: {
+                    show: false
+                  },
+                  axisLabel: {
+                    textStyle: {
+                      color: '#9B9B9B'
+                    },
+                    formatter: ''
+                  }
+                },
+                {
+                  type: '',
+                  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: {
@@ -143,8 +231,8 @@
               ],
               series:[
                 {
-                  type: '',
-                  name: 'y',
+                  type: 'bar',
+                  name: '姝e搧鏁伴噺',
                   barWidth: '20%',
                   itemStyle: {
                     normal: {
@@ -153,6 +241,18 @@
                     }
                   },
                   data: data.datay,
+                },
+                {
+                  type: 'bar',
+                  name: '娆″搧鏁伴噺',
+                  barWidth: '20%',
+                  itemStyle: {
+                    normal: {
+                      //鏌卞舰鍥惧渾瑙掞紝鍒濆鍖栨晥鏋�
+                      barBorderRadius:[4, 4, 0, 0],
+                    }
+                  },
+                  data: data.datay2,
                 }
               ]
             };
@@ -170,16 +270,29 @@
 <style scoped lang="scss">
 .bar-chart{
   width:100%;
-  height:calc(100% - 10px);
-  padding:10px 0 0;
+  height:calc(100% - 20px);
+  padding:20px 0 0;
   .bar-contents{
     width:100%;
     height:calc(100% - 60px);
     border:1px solid #00FFFF;
     box-sizing: border-box;
+    .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:100%;
+        height:calc(100% - 40px);
       }
   }
 }
diff --git a/src/views/cockpitPage/components/ChartTitle.vue b/src/views/cockpitPage/components/ChartTitle.vue
index 02aed46..2709c63 100644
--- a/src/views/cockpitPage/components/ChartTitle.vue
+++ b/src/views/cockpitPage/components/ChartTitle.vue
@@ -32,7 +32,7 @@
   width:100%;
   height:40px;
   margin-bottom:20px;
-  font-size:18px;
+  font-size:16px;
   color:#00FFFF;
   position:relative;
   .title-left-tip{
diff --git a/src/views/cockpitPage/components/MaterialChart.vue b/src/views/cockpitPage/components/MaterialChart.vue
new file mode 100644
index 0000000..3102763
--- /dev/null
+++ b/src/views/cockpitPage/components/MaterialChart.vue
@@ -0,0 +1,200 @@
+<template>
+  <div class="bar-chart">
+    <ChartTitle name="鐗╂枡闇�姹傜粺璁�"></ChartTitle>
+    <div class="bar-contents">
+      <div class="chart" ref="chart"></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,
+                  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:[],
+                }
+              ],
+              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: '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,
+                },
+              ]
+            };
+
+            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);
+    border:1px solid #00FFFF;
+    box-sizing: border-box;
+    .chart{
+        width: 100%;
+        height:100%;
+      }
+  }
+}
+</style>
diff --git a/src/views/cockpitPage/index.vue b/src/views/cockpitPage/index.vue
index dd707b9..cdbdd18 100644
--- a/src/views/cockpitPage/index.vue
+++ b/src/views/cockpitPage/index.vue
@@ -3,6 +3,9 @@
     <template #leftBlock1>
       <StatisticalBox></StatisticalBox>
     </template>
+    <template #rightBlock2>
+      <MaterialChart @should-reload="reloadAllData"></MaterialChart>
+    </template>
     <template #rightBlock3>
       <BarChart @should-reload="reloadAllData"></BarChart>
     </template>
@@ -12,11 +15,13 @@
 <script>
 import StatisticalBox from "@/views/cockpitPage/components/StatisticalBox";
 import BackgroundBoardLayout from "@/components/cockpitPage/BackgroundBoardLayout.vue";
+import MaterialChart from "@/views/cockpitPage/components/MaterialChart.vue";
 import BarChart from "@/views/cockpitPage/components/BarChart.vue";
 export default {
   components: {
     StatisticalBox,
     BackgroundBoardLayout,
+    MaterialChart,
     BarChart,
   },
   props: {},

--
Gitblit v1.8.0