From d55fef9c7205b412cadc99c2bb2dea9329b7a2c9 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期三, 31 七月 2024 09:39:19 +0800
Subject: [PATCH] 1、公司级与分厂级看板调整OEE图表样式 2、各看板中的饼图图表增加随分辨率变化而改变自身半径功能,从而更清晰的展示内容标题指示箭头 3、OEE综合效率分析页面新增车间字段

---
 src/views/dashboard/EquipmentSignage.vue                   |    5 
 src/views/dashboard/BranchFactorySignage.vue               |  111 +++++++++++----
 src/views/dashboard/IndexSignage.vue                       |  122 +++++++++++-----
 src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue |   30 +++
 src/views/dashboard/WorkshopSectionSignage.vue             |  127 +++++++++++++----
 5 files changed, 282 insertions(+), 113 deletions(-)

diff --git a/src/views/dashboard/BranchFactorySignage.vue b/src/views/dashboard/BranchFactorySignage.vue
index 50480b6..50cf1ed 100644
--- a/src/views/dashboard/BranchFactorySignage.vue
+++ b/src/views/dashboard/BranchFactorySignage.vue
@@ -69,7 +69,12 @@
     },
     data() {
       return {
+        firstEnterClientWidth: null,
+        pieChartRadius: ['40%', '60%'],
+        normalPieChartRadius: ['40%', '60%'],
+        currentPageProductionId: null,
         runningStateChart: '',
+        runningStateChartDataRequireFinished: false,
         runningStateData: [
           { value: '0', name: '鍏虫満' },
           { value: '0', name: '鎶ヨ' },
@@ -79,12 +84,14 @@
         efficiencyChart: '',
         efficiencyData: [],
         techConditionChart: '',
+        techConditionChartRequireFinished: false,
         techConditionData: [
           { value: '0', name: '鍚堟牸' },
           { value: '0', name: '绂佺敤' },
           { value: '0', name: '闄愮敤' }
         ],
         warrantyMalfunctionChart: '',
+        warrantyMalfunctionChartRequireFinished: false,
         warrantyMalfunctionData: [
           { value: '0', name: '鎶ヤ慨' },
           { value: '0', name: '鍋滄満' },
@@ -136,6 +143,7 @@
       }
     },
     mounted() {
+      this.firstEnterClientWidth = document.body.clientWidth || document.documentElement.clientWidth
       window.addEventListener('resize', this.handleWindowResize)
       this.getChartDataByApi()
     },
@@ -167,8 +175,12 @@
         })
         signageApi.getEquipmentStatusStatisticsApi(this.productionCode)
           .then(res => {
-            if (res.success) this.runningStateData = res.result.list
-            this.drawRunningStateChart(res.result.productionId)
+            if (res.success) {
+              this.runningStateData = res.result.list
+              this.currentPageProductionId = res.result.productionId
+              this.runningStateChartDataRequireFinished = true
+              this.drawRunningStateChart(res.result.productionId)
+            }
           })
       },
 
@@ -183,8 +195,10 @@
         })
         signageApi.getEquipmentUtilizationStatisticsApi(this.productionCode)
           .then(res => {
-            if (res.success) this.efficiencyData = res.result
-            this.drawEfficiencyChart()
+            if (res.success) {
+              this.efficiencyData = res.result
+              this.drawEfficiencyChart()
+            }
           })
       },
 
@@ -205,8 +219,9 @@
                 { value: res.result[0].disabledCount, name: '绂佺敤', technologyStatus: 'disabled' },
                 { value: res.result[0].limitedUseCount, name: '闄愮敤', technologyStatus: 'limitedUse' }
               ]
+              this.techConditionChartRequireFinished = true
+              this.drawTechConditionChart()
             }
-            this.drawTechConditionChart()
           })
       },
 
@@ -227,8 +242,9 @@
                 { value: res.result[0].stopCount, name: '鍋滄満', isStop: '2' },
                 { value: res.result[0].noStopCount, name: '杩愯', isStop: '1' }
               ]
+              this.warrantyMalfunctionChartRequireFinished = true
+              this.drawWarrantyMalfunctionChart()
             }
-            this.drawWarrantyMalfunctionChart()
           })
       },
 
@@ -272,8 +288,10 @@
         })
         signageApi.getEquipmentOEEStatistics(this.productionCode)
           .then(res => {
-            if (res.success) this.barChartData = res.result
-            this.drawBarChart()
+            if (res.success && res.result && res.result.length > 0) {
+              this.barChartData = res.result
+              this.drawBarChart()
+            }
           })
       },
 
@@ -288,8 +306,10 @@
         })
         signageApi.getEquipmentMonthStatisticsApi(this.productionCode)
           .then(res => {
-            if (res.success) this.doubleBarChartData = res.result
-            this.drawDoubleBarChart()
+            if (res.success) {
+              this.doubleBarChartData = res.result
+              this.drawDoubleBarChart()
+            }
           })
       },
 
@@ -301,7 +321,6 @@
             this.drawWorkshopProblemChart()
           })
       },
-
 
       /* 缁樺埗璁惧杩愯鐘舵�佺帿鐟伴ゼ鍥� */
       drawRunningStateChart(productionId) {
@@ -350,7 +369,7 @@
               type: 'pie',
               roseType: 'angle', // 鐜懓鍥�
               // selectedMode: "single",
-              radius: ['40%', '60%'],
+              radius: this.pieChartRadius,
               center: ['53%', '50%'],
               color: [
                 '#8B8B8B',
@@ -664,7 +683,7 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '60%'],
+              radius: this.pieChartRadius,
               center: ['50%', '60%'],
               color: [
                 '#0FC61A',
@@ -753,7 +772,7 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '60%'],
+              radius: this.pieChartRadius,
               center: ['50%', '60%'],
               color: [
                 '#24F2F5',
@@ -815,6 +834,7 @@
       /* 缁樺埗鍗曟煴鍥� */
       drawBarChart() {
         const defaultData = []
+        const colorArray = ['#79CEAA', '#F589A2', '#6FBF9D', '#66DFE2', '#A7F0C1', '#FAE893', '#F7B7A0']
         const dataMax = +this.barChartData.sort((x, y) => +y.value - +x.value)[0].value
         let yAxisMax
         if (dataMax === 0) yAxisMax = 1 // 鑻ユ暟鎹腑鏈�澶у�间负0锛屽垯灏嗚儗鏅粯璁ゅ�艰缃负1
@@ -868,11 +888,13 @@
             axisLabel: {
               show: true, // 鏄惁鏄剧ず鍒诲害鏍囩锛岄粯璁ゆ樉绀�
               interval: 0, // 鍧愭爣杞村埢搴︽爣绛剧殑鏄剧ず闂撮殧锛屽湪绫荤洰杞翠腑鏈夋晥锛涢粯璁や細閲囩敤鏍囩涓嶉噸鍙犵殑绛栫暐闂撮殧鏄剧ず鏍囩锛涘彲浠ヨ缃垚0寮哄埗鏄剧ず鎵�鏈夋爣绛撅紱濡傛灉璁剧疆涓�1锛岃〃绀恒�庨殧涓�涓爣绛炬樉绀轰竴涓爣绛俱�忥紝濡傛灉鍊间负2锛岃〃绀洪殧涓や釜鏍囩鏄剧ず涓�涓爣绛撅紝浠ユ绫绘帹銆�
-              rotate: this.barChartData.length >= 5 ? -30 : 0, // 鍒诲害鏍囩鏃嬭浆鐨勮搴︼紝鍦ㄧ被鐩酱鐨勭被鐩爣绛炬樉绀轰笉涓嬬殑鏃跺�欏彲浠ラ�氳繃鏃嬭浆闃叉鏍囩涔嬮棿閲嶅彔锛涙棆杞殑瑙掑害浠�-90搴﹀埌90搴�
+              rotate: this.barChartData.length >= 6 ? -30 : 0, // 鍒诲害鏍囩鏃嬭浆鐨勮搴︼紝鍦ㄧ被鐩酱鐨勭被鐩爣绛炬樉绀轰笉涓嬬殑鏃跺�欏彲浠ラ�氳繃鏃嬭浆闃叉鏍囩涔嬮棿閲嶅彔锛涙棆杞殑瑙掑害浠�-90搴﹀埌90搴�
               inside: false, // 鍒诲害鏍囩鏄惁鏈濆唴锛岄粯璁ゆ湞澶�
+              margin: 10, // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈
               formatter: value => {
                 return `${this.barChartData.find(item => item.productionId === value).name}`
-              }
+              },
+              fontSize: 14
             },
             axisTick: {
               show: true,
@@ -886,7 +908,8 @@
             interval: yAxisInterval,
             axisLabel: {
               formatter: '{value}',
-              color: '#fff'
+              color: '#fff',
+              fontSize: 14
             },
             axisTick: {
               show: false
@@ -907,37 +930,42 @@
           series: [{
             type: 'bar',
             data: this.barChartData,
-            barWidth: '15%',
+            barWidth: this.barChartData.length > 5 ? '40%' : 30,
             itemStyle: {
-              color: '#55D6A5'
+              color: function(params) {
+                let num = colorArray.length
+                return colorArray[params.dataIndex % num]
+              },
+              barBorderRadius: 100
             },
             zlevel: 1,
             label: {
-              show: true,
+              show: false,
               lineHeight: 10,
               formatter: params => {
                 if (+params.value === 0) return ''
                 else return params.value
               },
-              position: 'inside',
+              position: 'top',
               textStyle: {
                 color: '#fff',
-                fontSize: 18
+                fontSize: 16
               }
             }
           },
             {
               name: '鑳屾櫙',
               type: 'bar',
-              barWidth: '15%',
+              barWidth: this.barChartData.length > 5 ? '40%' : 30,
               barGap: '-100%',
               data: defaultData,
               itemStyle: {
-                color: '#11294d'
+                color: '#11294d',
+                barBorderRadius: 100
               }
             }]
         }
-        option.title.text = moment().subtract(1, 'months').format('M鏈�') + `OEE杞﹂棿`
+        option.title.text = moment().subtract(1, 'months').format('M鏈�') + `OEE`
         this.barChart.setOption(option, true)
         this.barChart.hideLoading()
 
@@ -958,7 +986,7 @@
       /* 缁樺埗鍙屾煴鍥� */
       drawDoubleBarChart() {
         const option = {
-          color: ['#409EFF', '#0FC61A'],
+          color: ['#66DFE2', '#79CEAA'],
           tooltip: {
             confine: true,
             formatter: function(params) {
@@ -1001,7 +1029,7 @@
               }
             },
             axisLabel: {
-              fontSize: 12,
+              fontSize: 14,
               color: '#fff'
             },
             axisTick: {
@@ -1031,7 +1059,7 @@
                 }
               },
               axisLabel: {
-                fontSize: 12,
+                fontSize: 14,
                 color: '#fff',
                 fontFamily: 'Bebas'
               }
@@ -1048,7 +1076,7 @@
                 show: false
               },
               axisLabel: {
-                fontSize: 12,
+                fontSize: 14,
                 formatter: '{value}%', // 鍙充晶Y杞存枃瀛楁樉绀�
                 fontFamily: 'Bebas',
                 color: '#6A93B9'
@@ -1060,11 +1088,11 @@
           series: [{
             type: 'bar',
             barWidth: 15,
-            itemStyle: { barBorderRadius: [3, 3, 0, 0] },
+            itemStyle: { barBorderRadius: 100 },
             name: 'OEE',
             data: this.doubleBarChartData.oeeList,
             label: {
-              show: true,
+              show: false,
               lineHeight: 10,
               formatter: params => {
                 if (+params.value === 0) return ''
@@ -1079,11 +1107,11 @@
           }, {
             type: 'bar',
             barWidth: 15,
-            itemStyle: { barBorderRadius: [3, 3, 0, 0] },
+            itemStyle: { barBorderRadius: 100 },
             name: '鍒╃敤鐜�',
             data: this.doubleBarChartData.utilizationList,
             label: {
-              show: true,
+              show: false,
               lineHeight: 10,
               formatter: params => {
                 if (+params.value === 0) return ''
@@ -1130,11 +1158,28 @@
         this.modalVisible = true
       },
 
+      re_drawPieChart() {
+        const clientWidth = document.body.clientWidth || document.documentElement.clientWidth
+        if (this.firstEnterClientWidth != 1920) {
+          this.pieChartRadius = this.normalPieChartRadius.map(item => item = (+item.slice(0, -1) * (clientWidth / 1920)) + '%')
+        } else {
+          this.pieChartRadius = this.normalPieChartRadius.map(item => item = (+item.slice(0, -1) * (clientWidth / this.firstEnterClientWidth)) + '%')
+        }
+        console.log('pieChartRadius', this.pieChartRadius)
+        this.$nextTick(() => {
+          // 鏁版嵁鏈姞杞藉畬鎴愭棤闇�閲嶇粯鍥捐〃锛屼笉鐒舵棤娉曞尯鍒嗘帴鍙h繑鍥炴甯镐笌鍚�
+          if (this.runningStateChartDataRequireFinished) this.drawRunningStateChart(this.currentPageProductionId)
+          if (this.techConditionChartRequireFinished) this.drawTechConditionChart()
+          if (this.warrantyMalfunctionChartRequireFinished) this.drawWarrantyMalfunctionChart()
+        })
+      },
+
       /**
        * 绐楀彛灏哄鍙樺寲鏃惰Е鍙�
        * 璋冩暣鍥捐〃灏哄浠ラ�傚簲鍒嗚鲸鐜�
        */
       handleWindowResize() {
+        this.re_drawPieChart()
         if (this.runningStateChart) this.runningStateChart.resize()
         if (this.efficiencyChart) this.efficiencyChart.resize()
         if (this.techConditionChart) this.techConditionChart.resize()
diff --git a/src/views/dashboard/EquipmentSignage.vue b/src/views/dashboard/EquipmentSignage.vue
index 82d1682..49db1cf 100644
--- a/src/views/dashboard/EquipmentSignage.vue
+++ b/src/views/dashboard/EquipmentSignage.vue
@@ -831,7 +831,7 @@
             axisLabel: {
               interval: 0,
               show: true,
-              fontSize: 12,
+              fontSize: 14,
               color: '#fff'
               // rotate: -30,
             },
@@ -880,7 +880,8 @@
               max: 100,
               axisLabel: {
                 show: true,
-                color: '#fff'
+                color: '#fff',
+                fontSize:14
               },
               axisLine: {
                 show: true,
diff --git a/src/views/dashboard/IndexSignage.vue b/src/views/dashboard/IndexSignage.vue
index 6785b75..98c3cd0 100644
--- a/src/views/dashboard/IndexSignage.vue
+++ b/src/views/dashboard/IndexSignage.vue
@@ -57,7 +57,12 @@
     components: { SignageModal },
     data() {
       return {
+        firstEnterClientWidth: null,
+        pieChartRadius: ['40%', '55%'],
+        normalPieChartRadius: ['40%', '55%'],
+        currentPageProductionId: null,
         runningStateChart: '',
+        runningStateChartDataRequireFinished: false,
         runningStateData: [
           { value: '0', name: '鍏虫満' },
           { value: '0', name: '鎶ヨ' },
@@ -67,16 +72,18 @@
         efficiencyChart: '',
         efficiencyData: [],
         techConditionChart: '',
+        techConditionChartRequireFinished: false,
         techConditionData: [
           { value: '0', name: '鍚堟牸' },
           { value: '0', name: '绂佺敤' },
           { value: '0', name: '闄愮敤' }
         ],
         warrantyMalfunctionChart: '',
+        warrantyMalfunctionChartRequireFinished: false,
         warrantyMalfunctionData: [
-          { value: '12', name: '鎶ヤ慨' },
-          { value: '10', name: '鍋滄満' },
-          { value: '8', name: '杩愯' }
+          { value: '0', name: '鎶ヤ慨' },
+          { value: '0', name: '鍋滄満' },
+          { value: '0', name: '杩愯' }
         ],
         supportPlanList: [
           {
@@ -125,7 +132,9 @@
       }
     },
     mounted() {
+      this.firstEnterClientWidth = document.body.clientWidth || document.documentElement.clientWidth
       window.addEventListener('resize', this.handleWindowResize)
+      this.re_drawPieChart()
       this.getChartDataByApi()
     },
     beforeDestroy() {
@@ -156,8 +165,12 @@
         })
         signageApi.getEquipmentStatusStatisticsApi()
           .then(res => {
-            if (res.success) this.runningStateData = res.result.list
-            this.drawRunningStateChart(res.result.productionId)
+            if (res.success) {
+              this.runningStateData = res.result.list
+              this.currentPageProductionId = res.result.productionId
+              this.runningStateChartDataRequireFinished = true
+              this.drawRunningStateChart(res.result.productionId)
+            }
           })
       },
 
@@ -172,8 +185,10 @@
         })
         signageApi.getEquipmentUtilizationStatisticsApi()
           .then(res => {
-            if (res.success) this.efficiencyData = res.result
-            this.drawEfficiencyChart()
+            if (res.success) {
+              this.efficiencyData = res.result
+              this.drawEfficiencyChart()
+            }
           })
       },
 
@@ -194,8 +209,9 @@
                 { value: res.result[0].disabledCount, name: '绂佺敤', technologyStatus: 'disabled' },
                 { value: res.result[0].limitedUseCount, name: '闄愮敤', technologyStatus: 'limitedUse' }
               ]
+              this.techConditionChartRequireFinished = true
+              this.drawTechConditionChart()
             }
-            this.drawTechConditionChart()
           })
       },
 
@@ -216,8 +232,9 @@
                 { value: res.result[0].stopCount, name: '鍋滄満', isStop: '2' },
                 { value: res.result[0].noStopCount, name: '杩愯', isStop: '1' }
               ]
+              this.warrantyMalfunctionChartRequireFinished = true
+              this.drawWarrantyMalfunctionChart()
             }
-            this.drawWarrantyMalfunctionChart()
           })
       },
 
@@ -261,8 +278,10 @@
         })
         signageApi.getEquipmentOEEStatistics()
           .then(res => {
-            if (res.success) this.barChartData = res.result
-            this.drawBarChart()
+            if (res.success && res.result && res.result.length > 0) {
+              this.barChartData = res.result
+              this.drawBarChart()
+            }
           })
       },
 
@@ -277,8 +296,10 @@
         })
         signageApi.getEquipmentMonthStatisticsApi()
           .then(res => {
-            if (res.success) this.doubleBarChartData = res.result
-            this.drawDoubleBarChart()
+            if (res.success) {
+              this.doubleBarChartData = res.result
+              this.drawDoubleBarChart()
+            }
           })
       },
 
@@ -290,7 +311,6 @@
             this.drawWorkshopProblemChart()
           })
       },
-
 
       /* 缁樺埗璁惧杩愯鐘舵�佺帿鐟伴ゼ鍥� */
       drawRunningStateChart(productionId) {
@@ -340,7 +360,7 @@
               type: 'pie',
               roseType: 'angle', // 鐜懓鍥�
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['50%', '60%'],
               color: [
                 '#8B8B8B',
@@ -651,7 +671,7 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['45%', '60%'],
               color: [
                 '#0FC61A',
@@ -739,7 +759,7 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['45%', '60%'],
               color: [
                 '#24F2F5',
@@ -799,6 +819,7 @@
       /* 缁樺埗鍗曟煴鍥� */
       drawBarChart() {
         const defaultData = []
+        const colorArray = ['#79CEAA', '#F589A2', '#6FBF9D', '#66DFE2', '#A7F0C1', '#FAE893', '#F7B7A0']
         const dataMax = +this.barChartData.sort((x, y) => +y.value - +x.value)[0].value
         let yAxisMax
         if (dataMax === 0) yAxisMax = 1 // 鑻ユ暟鎹腑鏈�澶у�间负0锛屽垯灏嗚儗鏅粯璁ゅ�艰缃负1
@@ -854,10 +875,11 @@
               interval: 0, // 鍧愭爣杞村埢搴︽爣绛剧殑鏄剧ず闂撮殧锛屽湪绫荤洰杞翠腑鏈夋晥锛涢粯璁や細閲囩敤鏍囩涓嶉噸鍙犵殑绛栫暐闂撮殧鏄剧ず鏍囩锛涘彲浠ヨ缃垚0寮哄埗鏄剧ず鎵�鏈夋爣绛撅紱濡傛灉璁剧疆涓�1锛岃〃绀恒�庨殧涓�涓爣绛炬樉绀轰竴涓爣绛俱�忥紝濡傛灉鍊间负2锛岃〃绀洪殧涓や釜鏍囩鏄剧ず涓�涓爣绛撅紝浠ユ绫绘帹銆�
               rotate: this.barChartData.length >= 6 ? -30 : 0, // 鍒诲害鏍囩鏃嬭浆鐨勮搴︼紝鍦ㄧ被鐩酱鐨勭被鐩爣绛炬樉绀轰笉涓嬬殑鏃跺�欏彲浠ラ�氳繃鏃嬭浆闃叉鏍囩涔嬮棿閲嶅彔锛涙棆杞殑瑙掑害浠�-90搴﹀埌90搴�
               inside: false, // 鍒诲害鏍囩鏄惁鏈濆唴锛岄粯璁ゆ湞澶�
-              margin: 6, // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈
+              margin: 10, // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈
               formatter: value => {
                 return `${this.barChartData.find(item => item.productionId === value).name}`
-              }
+              },
+              fontSize: 14
             },
             axisTick: {
               show: true,
@@ -871,7 +893,8 @@
             interval: yAxisInterval,
             axisLabel: {
               formatter: '{value}',
-              color: '#fff'
+              color: '#fff',
+              fontSize: 14
             },
             axisTick: {
               show: false
@@ -892,37 +915,42 @@
           series: [{
             type: 'bar',
             data: this.barChartData,
-            barWidth: '15%',
+            barWidth: this.barChartData.length > 5 ? '40%' : 30,
             itemStyle: {
-              color: '#55D6A5'
+              color: function(params) {
+                let num = colorArray.length
+                return colorArray[params.dataIndex % num]
+              },
+              barBorderRadius: 100
             },
             zlevel: 1,
             label: {
-              show: true,
+              show: false,
               lineHeight: 10,
               formatter: params => {
                 if (+params.value === 0) return ''
                 else return params.value
               },
-              position: 'inside',
+              position: 'top',
               textStyle: {
                 color: '#fff',
-                fontSize: 18
+                fontSize: 16
               }
             }
           },
             {
               name: '鑳屾櫙',
               type: 'bar',
-              barWidth: '15%',
+              barWidth: this.barChartData.length > 5 ? '40%' : 30,
               barGap: '-100%',
               data: defaultData,
               itemStyle: {
-                color: '#11294d'
+                color: '#11294d',
+                barBorderRadius: 100
               }
             }]
         }
-        option.title.text = moment().subtract(1, 'months').format('M鏈�') + `OEE杞﹂棿`
+        option.title.text = moment().subtract(1, 'months').format('M鏈�') + `OEE`
         this.barChart.setOption(option, true)
         this.barChart.hideLoading()
 
@@ -942,7 +970,7 @@
       /* 缁樺埗鍙屾煴鍥� */
       drawDoubleBarChart() {
         const option = {
-          color: ['#409EFF', '#0FC61A'],
+          color: ['#66DFE2', '#79CEAA'],
           tooltip: {
             confine: true,
             formatter: function(params) {
@@ -985,7 +1013,7 @@
               }
             },
             axisLabel: {
-              fontSize: 12,
+              fontSize: 14,
               color: '#fff'
             },
             axisTick: {
@@ -1001,9 +1029,6 @@
               type: 'value',
               min: 0,
               minInterval: 1,
-              splitArea: {
-                show: false
-              },
               axisLine: {
                 show: true
               },
@@ -1018,7 +1043,7 @@
                 }
               },
               axisLabel: {
-                fontSize: 12,
+                fontSize: 14,
                 color: '#fff',
                 fontFamily: 'Bebas'
               }
@@ -1035,10 +1060,10 @@
                 show: false
               },
               axisLabel: {
-                fontSize: 12,
+                fontSize: 14,
                 formatter: '{value}%', // 鍙充晶Y杞存枃瀛楁樉绀�
                 fontFamily: 'Bebas',
-                color: '#fff'
+                color: '#6A93B9'
               },
               splitArea: {
                 show: false
@@ -1047,11 +1072,11 @@
           series: [{
             type: 'bar',
             barWidth: 15,
-            itemStyle: { barBorderRadius: [3, 3, 0, 0] },
+            itemStyle: { barBorderRadius: 100 },
             name: 'OEE',
             data: this.doubleBarChartData.oeeList,
             label: {
-              show: true,
+              show: false,
               lineHeight: 10,
               formatter: params => {
                 if (+params.value === 0) return ''
@@ -1066,11 +1091,11 @@
           }, {
             type: 'bar',
             barWidth: 15,
-            itemStyle: { barBorderRadius: [3, 3, 0, 0] },
+            itemStyle: { barBorderRadius: 100 },
             name: '鍒╃敤鐜�',
             data: this.doubleBarChartData.utilizationList,
             label: {
-              show: true,
+              show: false,
               lineHeight: 10,
               formatter: params => {
                 if (+params.value === 0) return ''
@@ -1114,11 +1139,28 @@
         this.modalVisible = true
       },
 
+      re_drawPieChart() {
+        const clientWidth = document.body.clientWidth || document.documentElement.clientWidth
+        if (this.firstEnterClientWidth != 1920) {
+          this.pieChartRadius = this.normalPieChartRadius.map(item => item = (+item.slice(0, -1) * (clientWidth / 1920)) + '%')
+        } else {
+          this.pieChartRadius = this.normalPieChartRadius.map(item => item = (+item.slice(0, -1) * (clientWidth / this.firstEnterClientWidth)) + '%')
+        }
+        console.log('pieChartRadius', this.pieChartRadius)
+        this.$nextTick(() => {
+          if (this.runningStateChartDataRequireFinished) this.drawRunningStateChart(this.currentPageProductionId)
+          if (this.techConditionChartRequireFinished) this.drawTechConditionChart()
+          if (this.warrantyMalfunctionChartRequireFinished) this.drawWarrantyMalfunctionChart()
+        })
+      },
+
       /**
        * 绐楀彛灏哄鍙樺寲鏃惰Е鍙�
        * 璋冩暣鍥捐〃灏哄浠ラ�傚簲鍒嗚鲸鐜�
        */
       handleWindowResize() {
+        this.re_drawPieChart()
+
         if (this.runningStateChart) this.runningStateChart.resize()
         if (this.efficiencyChart) this.efficiencyChart.resize()
         if (this.techConditionChart) this.techConditionChart.resize()
diff --git a/src/views/dashboard/WorkshopSectionSignage.vue b/src/views/dashboard/WorkshopSectionSignage.vue
index 09783e4..5d2e786 100644
--- a/src/views/dashboard/WorkshopSectionSignage.vue
+++ b/src/views/dashboard/WorkshopSectionSignage.vue
@@ -94,7 +94,12 @@
     },
     data() {
       return {
+        firstEnterClientWidth: null,
+        pieChartRadius: ['40%', '60%'],
+        normalPieChartRadius: ['40%', '60%'],
+        currentPageProductionId: null,
         runningStateChart: '',
+        runningStateChartDataRequireFinished: false,
         runningStateData: [
           { value: '0', name: '鍏虫満' },
           { value: '0', name: '鎶ヨ' },
@@ -102,12 +107,14 @@
           { value: '0', name: '杩愯' }
         ],
         techConditionChart: '',
+        techConditionChartRequireFinished: false,
         techConditionData: [
           { value: '0', name: '鍚堟牸' },
           { value: '0', name: '绂佺敤' },
           { value: '0', name: '闄愮敤' }
         ],
         warrantyMalfunctionChart: '',
+        warrantyMalfunctionChartRequireFinished: false,
         warrantyMalfunctionData: [
           { value: '0', name: '鎶ヤ慨' },
           { value: '0', name: '鍋滄満' },
@@ -185,6 +192,7 @@
       }
     },
     mounted() {
+      this.firstEnterClientWidth = document.body.clientWidth || document.documentElement.clientWidth
       window.addEventListener('resize', this.handleWindowResize)
       this.getChartDataByApi()
     },
@@ -222,8 +230,9 @@
                 { value: res.result[0].disabledCount, name: '绂佺敤', technologyStatus: 'disabled' },
                 { value: res.result[0].limitedUseCount, name: '闄愮敤', technologyStatus: 'limitedUse' }
               ]
+              this.techConditionChartRequireFinished = true
+              this.drawTechConditionChart()
             }
-            this.drawTechConditionChart()
           })
       },
 
@@ -244,8 +253,9 @@
                 { value: res.result[0].stopCount, name: '鍋滄満', isStop: '2' },
                 { value: res.result[0].noStopCount, name: '杩愯', isStop: '1' }
               ]
+              this.warrantyMalfunctionChartRequireFinished = true
+              this.drawWarrantyMalfunctionChart()
             }
-            this.drawWarrantyMalfunctionChart()
           })
       },
 
@@ -280,8 +290,12 @@
         })
         signageApi.getEquipmentStatusStatisticsApi(this.productionCode)
           .then(res => {
-            if (res.success) this.runningStateData = res.result.list
-            this.drawRunningStateChart(res.result.productionId)
+            if (res.success) {
+              this.runningStateData = res.result.list
+              this.currentPageProductionId = res.result.productionId
+              this.runningStateChartDataRequireFinished = true
+              this.drawRunningStateChart(res.result.productionId)
+            }
           })
       },
 
@@ -296,8 +310,10 @@
         })
         signageApi.getEquipmentDayUtilizationStatisticsApi(this.productionCode)
           .then(res => {
-            if (res.success) this.first7DaysEfficiencyData = res.result
-            this.drawFirst7DaysEfficiencyDataChart()
+            if (res.success) {
+              this.first7DaysEfficiencyData = res.result
+              this.drawFirst7DaysEfficiencyDataChart()
+            }
           })
       },
 
@@ -349,15 +365,16 @@
         })
         signageApi.getEquipmentOEEMonthStatisticsApi(this.productionCode)
           .then(res => {
-            if (res.success) {
+            if (res.success && res.result && res.result.length > 0) {
               this.barChartData = res.result.map(item => {
                 return {
                   name: item.equipmentId,
                   value: item.overallEquipmentEfficiency
                 }
               })
+              this.drawBarChart()
             }
-            this.drawBarChart()
+
           })
       },
 
@@ -406,7 +423,7 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '60%'],
+              radius: this.pieChartRadius,
               center: ['50%', '50%'],
               color: [
                 '#0FC61A',
@@ -494,7 +511,7 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '60%'],
+              radius: this.pieChartRadius,
               center: ['50%', '50%'],
               color: [
                 '#24F2F5',
@@ -583,7 +600,7 @@
               type: 'pie',
               roseType: 'angle', // 鐜懓鍥�
               // selectedMode: "single",
-              radius: ['35%', '55%'],
+              radius: this.pieChartRadius,
               center: ['50%', '50%'],
               color: [
                 '#8B8B8B',
@@ -659,7 +676,7 @@
         }
         let legendData = []
         let seriesData = []
-        let colorArr = ['#09F39E', '#A5F10D', '#09B3F6']
+        let colorArr = ['#A7F0C1', '#FAE893', '#66DFE2']
         legendData = newData.yAxis.map((item) => item.name)
         seriesData = newData.yAxis.map((item1, index1) => {
           return {
@@ -668,7 +685,8 @@
             symbol: 'circle',
             symbolSize: 8,
             itemStyle: {
-              color: colorArr[index1]
+              color: colorArr[index1],
+              barBorderRadius: 100
             },
             lineStyle: {
               width: 2
@@ -720,7 +738,7 @@
             axisLabel: {
               interval: 0,
               show: true,
-              fontSize: 12,
+              fontSize: 14,
               color: '#fff'
               // rotate: -30,
             },
@@ -769,7 +787,8 @@
               max: 100,
               axisLabel: {
                 show: true,
-                color: '#fff'
+                color: '#fff',
+                fontSize: 14
               },
               axisLine: {
                 show: true,
@@ -1057,6 +1076,14 @@
 
       /* 缁樺埗鍗曟煴鍥� */
       drawBarChart() {
+        const defaultData = []
+        const colorArray = ['#79CEAA', '#F589A2', '#6FBF9D', '#66DFE2', '#A7F0C1', '#FAE893', '#F7B7A0']
+        const dataMax = +this.barChartData.sort((x, y) => +y.value - +x.value)[0].value
+        let yAxisMax
+        if (dataMax === 0) yAxisMax = 1 // 鑻ユ暟鎹腑鏈�澶у�间负0锛屽垯灏嗚儗鏅粯璁ゅ�艰缃负1
+        else yAxisMax = Math.ceil(dataMax / 5) * 5 // 璁剧疆鏌卞浘鑳屾櫙闃村奖榛樿鍊硷紝鎬濊矾涓烘暟鎹渶澶у�兼渶鎺ヨ繎鐨勮兘琚�5鏁撮櫎鐨勬暟瀛�
+        const yAxisInterval = yAxisMax / 5 // 鍚屾椂灏嗗埢搴﹀�煎垎鎴�5浠�
+        this.barChartData.forEach(item => defaultData.push(yAxisMax))
         const xAisData = this.barChartData.map(item => item.name)
         const option = {
           height: 260,
@@ -1077,11 +1104,11 @@
             axisPointer: {
               type: 'shadow'
             },
-            // backgroundColor: 'rgba(9, 24, 48, 0.5)',
-            borderColor: 'rgba(75, 253, 238, 0.4)',
-            textStyle: {
-              // color: '#CFE3FC'
+            formatter: function(params) {
+              return '<span style="font-weight:bolder;">' + params[0].name + '</span><br/>' +
+                '<span style="display:inline-block; width:10px; height:10px; border-radius:100px; margin-right:5px; background:' + params[0].color + '"></span>' + ' OEE: ' + params[0].value + '%'
             },
+            borderColor: 'rgba(75, 253, 238, 0.4)',
             borderWidth: 1
           },
           grid: {
@@ -1106,7 +1133,8 @@
                 interval: 0, // 鍧愭爣杞村埢搴︽爣绛剧殑鏄剧ず闂撮殧锛屽湪绫荤洰杞翠腑鏈夋晥锛涢粯璁や細閲囩敤鏍囩涓嶉噸鍙犵殑绛栫暐闂撮殧鏄剧ず鏍囩锛涘彲浠ヨ缃垚0寮哄埗鏄剧ず鎵�鏈夋爣绛撅紱濡傛灉璁剧疆涓�1锛岃〃绀恒�庨殧涓�涓爣绛炬樉绀轰竴涓爣绛俱�忥紝濡傛灉鍊间负2锛岃〃绀洪殧涓や釜鏍囩鏄剧ず涓�涓爣绛撅紝浠ユ绫绘帹銆�
                 // rotate: this.barChartData.length >= 5 ? -30 : 0, // 鍒诲害鏍囩鏃嬭浆鐨勮搴︼紝鍦ㄧ被鐩酱鐨勭被鐩爣绛炬樉绀轰笉涓嬬殑鏃跺�欏彲浠ラ�氳繃鏃嬭浆闃叉鏍囩涔嬮棿閲嶅彔锛涙棆杞殑瑙掑害浠�-90搴﹀埌90搴�
                 inside: false, // 鍒诲害鏍囩鏄惁鏈濆唴锛岄粯璁ゆ湞澶�
-                margin: 6 // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈
+                margin: 6, // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈
+                fontSize: 14
               },
               axisTick: {
                 show: true,
@@ -1116,12 +1144,14 @@
           yAxis: [
             {
               name: '%',
-              // nameLocation: 'middle',
-              // nameGap: 30, // x杞磏ame涓庢í鍧愭爣杞寸嚎鐨勯棿璺�
+              min: 0,
+              max: yAxisMax,
+              interval: yAxisInterval,
               position: 'left',
               axisLabel: {
                 formatter: '{value}',
-                color: '#fff'
+                color: '#fff',
+                fontSize: 14
               },
               axisTick: {
                 show: true
@@ -1152,10 +1182,13 @@
           series: [{
             type: 'bar',
             data: this.barChartData,
-            barWidth: '25%',
+            barWidth: this.barChartData.length > 5 ? '40%' : 30,
             itemStyle: {
-              color: '#17C1F0',
-              barBorderRadius: [10, 10, 10, 10]
+              color: function(params) {
+                let num = colorArray.length
+                return colorArray[params.dataIndex % num]
+              },
+              barBorderRadius: 100
             },
             label: {
               show: false,
@@ -1169,8 +1202,20 @@
                 color: '#fff',
                 fontSize: 18
               }
-            }
-          }],
+            },
+            zlevel: 1
+          },
+            {
+              name: '鑳屾櫙',
+              type: 'bar',
+              barWidth: this.barChartData.length > 5 ? '40%' : 30,
+              barGap: '-100%',
+              data: defaultData,
+              itemStyle: {
+                color: '#11294d',
+                barBorderRadius: 100
+              }
+            }],
           dataZoom: {
             show: false,
             startValue: 0, // 浠庡ご寮�濮嬨��
@@ -1194,6 +1239,7 @@
         this.barChartCarouselTime = setInterval(() => {
           this.barChartData.push(this.barChartData.shift())
           xAisData.push(xAisData.shift())
+          colorArray.push(colorArray.shift())
           this.$nextTick(() => {
             this.barChart.setOption(option, true)
           })
@@ -1232,18 +1278,35 @@
         this.modalVisible = true
       },
 
+      re_drawPieChart() {
+        const clientWidth = document.body.clientWidth || document.documentElement.clientWidth
+        if (this.firstEnterClientWidth != 1920) {
+          this.pieChartRadius = this.normalPieChartRadius.map(item => item = (+item.slice(0, -1) * (clientWidth / 1920)) + '%')
+        } else {
+          this.pieChartRadius = this.normalPieChartRadius.map(item => item = (+item.slice(0, -1) * (clientWidth / this.firstEnterClientWidth)) + '%')
+        }
+        console.log('pieChartRadius', this.pieChartRadius)
+        this.$nextTick(() => {
+          // 鏁版嵁鏈姞杞藉畬鎴愭棤闇�閲嶇粯鍥捐〃锛屼笉鐒舵棤娉曞尯鍒嗘帴鍙h繑鍥炴甯镐笌鍚�
+          if (this.runningStateChartDataRequireFinished) this.drawRunningStateChart(this.currentPageProductionId)
+          if (this.techConditionChartRequireFinished) this.drawTechConditionChart()
+          if (this.warrantyMalfunctionChartRequireFinished) this.drawWarrantyMalfunctionChart()
+        })
+      },
 
       /**
        * 绐楀彛灏哄鍙樺寲鏃惰Е鍙�
        * 璋冩暣鍥捐〃灏哄浠ラ�傚簲鍒嗚鲸鐜�
        */
       handleWindowResize() {
+        this.re_drawPieChart()
+        if (this.runningStateChart) this.runningStateChart.resize()
+        if (this.efficiencyChart) this.efficiencyChart.resize()
+        if (this.techConditionChart) this.techConditionChart.resize()
+        if (this.warrantyMalfunctionChart) this.warrantyMalfunctionChart.resize()
         if (this.first7DaysEfficiencyChart) this.first7DaysEfficiencyChart.resize()
-        if (this.gaugeChart1) this.gaugeChart1.resize()
-        if (this.gaugeChart2) this.gaugeChart2.resize()
-        if (this.gaugeChart3) this.gaugeChart3.resize()
-        if (this.gaugeChart4) this.gaugeChart4.resize()
         if (this.barChart) this.barChart.resize()
+        if (this.doubleBarChart) this.doubleBarChart.resize()
       }
     }
   }
diff --git a/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue b/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue
index acb9a04..1fc1271 100644
--- a/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue
+++ b/src/views/mdc/base/modules/OEEAnalysis/OEEAnalysisList.vue
@@ -102,8 +102,13 @@
     </div>
 
     <div id="EfficiencyShift" style="flex:1;overflow: hidden;height: inherit">
-      <a-table :columns="columns" rowKey="id" :dataSource="dataSource.records" :loading="tableLoading"
-               :pagination="false" :scroll="{x:'max-content',y:scrollY}" bordered></a-table>
+      <a-table :columns="columns" rowKey="id" :dataSource="dataSource.records?dataSource.records:[]"
+               :loading="tableLoading"
+               :pagination="false" :scroll="{x:'max-content',y:scrollY}" bordered>
+        <template slot="equipmentModel" slot-scope="text, record">
+          <editable-cell :text="text" @change="onCellChange(record.id, 'equipmentModel', $event)"/>
+        </template>
+      </a-table>
     </div>
     <!--<div class="pagination">-->
     <!--<a-pagination-->
@@ -129,9 +134,11 @@
   import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api'
   import api from '@api/mdc'
 
+  import EditableCell from './EditableCell.vue'
+
   export default {
     name: 'OEEAnalysisList',
-    components: {},
+    components: { EditableCell },
     data() {
       return {
         dates: [moment().subtract('month', 1), moment().subtract('month', 1)],
@@ -163,6 +170,12 @@
             }
           },
           {
+            title: '杞﹂棿',
+            align: 'center',
+            dataIndex: 'productionName',
+            width: 200
+          },
+          {
             title: '璁惧缁熶竴缂栧彿',
             align: 'center',
             dataIndex: 'equipmentId',
@@ -177,8 +190,9 @@
           {
             title: '璁惧鍨嬪彿',
             align: 'center',
-            width: 110,
-            dataIndex: 'equipmentModel'
+            width: 200,
+            dataIndex: 'equipmentModel',
+            scopedSlots: { customRender: 'equipmentModel' }
           },
           {
             title: '鏃ユ湡',
@@ -507,7 +521,7 @@
         this.tableLoading = true
         getAction(this.url.list, this.queryParam)
           .then(res => {
-            if (res.success) {
+            if (res.success && res.result) {
               this.dataSource = res.result
               this.tableLoading = false
             }
@@ -538,6 +552,10 @@
         this.loadData()
       },
 
+      onCellChange(key, dataIndex, value) {
+        console.log('瑙﹀彂onCellChange', key, dataIndex, value)
+      },
+
       /**
        * 褰撴祻瑙堝櫒鍙绐楀彛灏哄鍙戠敓鏀瑰彉鏃惰Е鍙�
        */

--
Gitblit v1.9.3