From a751e547d67c4f8e2c6fddf958c1559f792515bd Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期五, 27 六月 2025 16:11:50 +0800
Subject: [PATCH] 添加工作流

---
 src/views/dashboard/IndexSignage.vue |  414 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 284 insertions(+), 130 deletions(-)

diff --git a/src/views/dashboard/IndexSignage.vue b/src/views/dashboard/IndexSignage.vue
index a3ddd65..358183e 100644
--- a/src/views/dashboard/IndexSignage.vue
+++ b/src/views/dashboard/IndexSignage.vue
@@ -15,39 +15,11 @@
             <div id="warranty_malfunction_chart" style="width:50%;height: 340px;"></div>
           </div>
           <div class="support-plan-container">
-            <!--<div v-for="item in supportPlanList" class="support-plan-item"-->
-            <!--:style="{background:item.background}">-->
-            <!--<div>{{item.label}}</div>-->
-            <!--<div class="plan-value-container">-->
-            <!--<div class="plan-value">{{item.value}}</div>-->
-            <!--<div>鍙�</div>-->
-            <!--</div>-->
-            <!--</div>-->
-            <div class="support-plan-item" style="background:#5FE0AF">
-              <div>鏈湀涓変繚璁″垝</div>
+            <div v-for="(item,index) in supportPlanList" :key="index" class="support-plan-item"
+                 :style="{background:item.backgroundColor}" @click="openMaintenanceModal(item)">
+              <div>{{item.planTime}}</div>
               <div class="plan-value-container">
-                <div class="plan-value">{{thisMonthMaintenancePlanNum}}</div>
-                <div>鍙�</div>
-              </div>
-            </div>
-            <div class="support-plan-item" style="background:#409EFF">
-              <div>鏈湀瀹屾垚</div>
-              <div class="plan-value-container">
-                <div class="plan-value">{{thisMonthMaintenanceRealNum}}</div>
-                <div>鍙�</div>
-              </div>
-            </div>
-            <div class="support-plan-item" style="background:#D6BC52">
-              <div>涓嬫湀涓変繚璁″垝</div>
-              <div class="plan-value-container">
-                <div class="plan-value">{{nextMonthMaintenancePlanNum}}</div>
-                <div>鍙�</div>
-              </div>
-            </div>
-            <div class="support-plan-item" style="background:#58D9F9">
-              <div>涓嬩笅鏈堜笁淇濊鍒�</div>
-              <div class="plan-value-container">
-                <div class="plan-value">{{nextNextMonthMaintenancePlanNum}}</div>
+                <div class="plan-value">{{$data[item.planValueLabel]}}</div>
                 <div>鍙�</div>
               </div>
             </div>
@@ -68,18 +40,29 @@
         </dv-border-box-9>
       </div>
     </div>
+
+    <SignageModal :modalVisible="modalVisible" :modalTitle=modalTitle :modalDataApiUrl="modalDataApiUrl"
+                  :modalDataApiParams="modalDataApiParams"
+                  @closeModal="modalVisible=false"/>
   </div>
 </template>
 
 <script>
   import signageApi from '@/api/signage'
   import moment from 'moment'
+  import SignageModal from './modules/SignageModal'
 
   export default {
     name: 'IndexSignage',
+    components: { SignageModal },
     data() {
       return {
+        firstEnterClientWidth: null,
+        pieChartRadius: ['40%', '55%'],
+        normalPieChartRadius: ['40%', '55%'],
+        currentPageProductionId: null,
         runningStateChart: '',
+        runningStateChartDataRequireFinished: false,
         runningStateData: [
           { value: '0', name: '鍏虫満' },
           { value: '0', name: '鎶ヨ' },
@@ -87,42 +70,78 @@
           { value: '0', name: '杩愯' }
         ],
         efficiencyChart: '',
-        efficiencyData:[],
+        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: [
+          {
+            planTime: '鏈湀涓変繚璁″垝',
+            planValueLabel: 'thisMonthMaintenancePlanNum',
+            backgroundColor: '#5FE0AF',
+            apiUrl: '/eam/calibrationOrder/showThisMonthMaintenanceList'
+          },
+          {
+            planTime: '鏈湀瀹屾垚',
+            planValueLabel: 'thisMonthMaintenanceRealNum',
+            backgroundColor: '#409EFF',
+            apiUrl: '/eam/calibrationOrder/showThisMonthMaintenanceFinishList'
+          },
+          {
+            planTime: '涓嬫湀涓変繚璁″垝',
+            planValueLabel: 'nextMonthMaintenancePlanNum',
+            backgroundColor: '#D6BC52',
+            apiUrl: '/eam/calibrationOrder/showNextMonthMaintenanceList'
+          },
+          {
+            planTime: '涓嬩笅鏈堜笁淇濊鍒�',
+            planValueLabel: 'nextNextMonthMaintenancePlanNum',
+            backgroundColor: '#58D9F9',
+            apiUrl: '/eam/calibrationOrder/showNextNextMonthMaintenanceList'
+          }
         ],
         thisMonthMaintenancePlanNum: 0,
         thisMonthMaintenanceRealNum: 0,
         nextMonthMaintenancePlanNum: 0,
         nextNextMonthMaintenancePlanNum: 0,
-        twoMaintenanceChartData: [['-', '-', '-']],
+        twoMaintenanceChartData: [],
         barChart: '',
         barChartData: [],
         doubleBarChart: '',
         doubleBarChartData: {},
+        workshopProblemChartData: [],
         efficiencyChartConfig: {},
         maintenanceConfig: {},
-        problemConfig: {}
+        problemConfig: {},
+        modalVisible: false,
+        modalTitle: '',
+        modalDataApiUrl: '',
+        modalTableColumns: [],
+        modalDataApiParams: {}
       }
     },
     mounted() {
+      this.firstEnterClientWidth = document.body.clientWidth || document.documentElement.clientWidth
       window.addEventListener('resize', this.handleWindowResize)
-      this.drawCharts()
+      this.re_drawPieChart()
       this.getChartDataByApi()
     },
     beforeDestroy() {
       window.removeEventListener('resize', this.handleWindowResize)
     },
     methods: {
+      /* 璋冪敤鎺ュ彛鑾峰彇鍥捐〃鏁版嵁姹囨�绘柟娉� */
       getChartDataByApi() {
         this.getRunningStateDataByApi()
         this.getEfficiencyDataByApi()
@@ -132,53 +151,90 @@
         this.getTwoMaintenanceChartDataByApi()
         this.getBarChartDataByApi()
         this.getDoubleBarChartDataByApi()
+        this.getWorkshopProblemChartDataByApi()
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇璁惧杩愯鐘舵�� */
       getRunningStateDataByApi() {
+        this.runningStateChart = this.$echarts.init(document.getElementById('running_state_chart'))
+        this.runningStateChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: '#fff',
+          maskColor: 'rgba(1, 25, 75, 0.2)' // 閬僵灞�
+        })
         signageApi.getEquipmentStatusStatisticsApi()
           .then(res => {
-            if (res.success) this.runningStateData = res.result.list
-            this.drawRunningStateChart(res.result.producitonId)
+            if (res.success) {
+              this.runningStateData = res.result.list
+              this.currentPageProductionId = res.result.productionId
+              this.runningStateChartDataRequireFinished = true
+              this.drawRunningStateChart(res.result.productionId)
+            }
           })
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇璁惧鍒╃敤鐜� */
       getEfficiencyDataByApi() {
+        this.efficiencyChart = this.$echarts.init(document.getElementById('efficiency_chart'))
+        this.efficiencyChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: '#fff',
+          maskColor: 'rgba(1, 25, 75, 0.2)' // 閬僵灞�
+        })
         signageApi.getEquipmentUtilizationStatisticsApi()
           .then(res => {
-            if (res.success) this.efficiencyData = res.result
-            this.drawEfficiencyChart()
+            if (res.success) {
+              this.efficiencyData = res.result
+              this.drawEfficiencyChart()
+            }
           })
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇鎶�鏈姸鎬� */
       getTechConditionDataByApi() {
+        this.techConditionChart = this.$echarts.init(document.getElementById('tech_condition_chart'))
+        this.techConditionChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: '#fff',
+          maskColor: 'rgba(1, 25, 75, 0.2)' // 閬僵灞�
+        })
         signageApi.getEquipmentTechnologyStatusListApi()
           .then(res => {
-            if (res.success) {
+            if (res.success && res.result) {
               this.techConditionData = [
-                { value: res.result[0].qualifiedCount, name: '鍚堟牸' },
-                { value: res.result[0].disabledCount, name: '绂佺敤' },
-                { value: res.result[0].limitedUseCount, name: '闄愮敤' }
+                { value: res.result[0].qualifiedCount, name: '鍚堟牸', technologyStatus: 'qualified' },
+                { value: res.result[0].disabledCount, name: '绂佺敤', technologyStatus: 'disabled' },
+                { value: res.result[0].limitedUseCount, name: '闄愮敤', technologyStatus: 'limitedUse' }
               ]
+              this.techConditionChartRequireFinished = true
+              this.drawTechConditionChart()
             }
-            this.drawTechConditionChart()
           })
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇璁惧鎶ヤ慨鏁呴殰 */
       getWarrantyMalfunctionDataByApi() {
+        this.warrantyMalfunctionChart = this.$echarts.init(document.getElementById('warranty_malfunction_chart'))
+        this.warrantyMalfunctionChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: '#fff',
+          maskColor: 'rgba(1, 25, 75, 0.2)' // 閬僵灞�
+        })
         signageApi.getReportRepairEquipmentListApi()
           .then(res => {
-            if (res.success) {
+            if (res.success && res.result) {
               this.warrantyMalfunctionData = [
-                { value: res.result[0].failurTotalCount, name: '鎶ヤ慨' },
-                { value: res.result[0].stopCount, name: '鍋滄満' },
-                { value: res.result[0].noStopCount, name: '杩愯' }
+                { value: res.result[0].failurTotalCount, name: '鎶ヤ慨', isStop: '' },
+                { value: res.result[0].stopCount, name: '鍋滄満', isStop: '2' },
+                { value: res.result[0].noStopCount, name: '杩愯', isStop: '1' }
               ]
+              this.warrantyMalfunctionChartRequireFinished = true
+              this.drawWarrantyMalfunctionChart()
             }
-            this.drawWarrantyMalfunctionChart()
           })
       },
 
@@ -206,44 +262,58 @@
       getTwoMaintenanceChartDataByApi() {
         signageApi.getTwoMaintenancePlanListApi()
           .then(res => {
-            if (res.success && res.result) this.twoMaintenanceChartData = res.result.map(item => [item.centerName, item.maintenanceDate, item.content])
+            if (res.success && res.result.length > 0) this.twoMaintenanceChartData = res.result.map(item => [item.centerName, item.maintenanceDate, item.content])
             this.drawMaintenanceChart()
           })
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇璁惧OEE缁熻 */
       getBarChartDataByApi() {
+        this.barChart = this.$echarts.init(document.getElementById('bar_chart'))
+        this.barChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: '#fff',
+          maskColor: 'rgba(1, 25, 75, 0.2)' // 閬僵灞�
+        })
         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()
+            }
           })
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇璁惧OEE鍜屽埄鐢ㄧ巼瀵规瘮 */
       getDoubleBarChartDataByApi() {
+        this.doubleBarChart = this.$echarts.init(document.getElementById('double_bar_chart'))
+        this.doubleBarChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: '#fff',
+          maskColor: 'rgba(1, 25, 75, 0.2)' // 閬僵灞�
+        })
         signageApi.getEquipmentMonthStatisticsApi()
           .then(res => {
-            if (res.success) this.doubleBarChartData = res.result
-            this.drawDoubleBarChart()
+            if (res.success) {
+              this.doubleBarChartData = res.result
+              this.drawDoubleBarChart()
+            }
           })
       },
 
-      /* 缁樺埗鍥捐〃姹囨�绘柟娉� */
-      drawCharts() {
-        this.drawRunningStateChart()
-        this.drawEfficiencyChart()
-        this.drawTechConditionChart()
-        this.drawWarrantyMalfunctionChart()
-        this.drawMaintenanceChart()
-        this.drawBarChart()
-        this.drawDoubleBarChart()
-        this.drawProblemChart()
+      /* 璋冪敤鎺ュ彛鑾峰彇杞﹂棿闂鍒楄〃*/
+      getWorkshopProblemChartDataByApi() {
+        signageApi.getWorkshopProblemListApi()
+          .then(res => {
+            if (res.success && res.result.length > 0) this.workshopProblemChartData = res.result.map(item => [item.content, item.createTime])
+            this.drawWorkshopProblemChart()
+          })
       },
 
       /* 缁樺埗璁惧杩愯鐘舵�佺帿鐟伴ゼ鍥� */
       drawRunningStateChart(productionId) {
-        this.runningStateChart = this.$echarts.init(document.getElementById('running_state_chart'))
         const option = {
           height: 300,
           title: {
@@ -290,7 +360,7 @@
               type: 'pie',
               roseType: 'angle', // 鐜懓鍥�
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['50%', '60%'],
               color: [
                 '#8B8B8B',
@@ -321,6 +391,7 @@
           ]
         }
         this.runningStateChart.setOption(option, true)
+        this.runningStateChart.hideLoading()
 
         this.runningStateChart.on('click', params => {
           this.$router.push({
@@ -332,7 +403,6 @@
 
       /* 缁樺埗璁惧鍒╃敤鐜囪兌鍥婂浘 */
       drawEfficiencyChart() {
-        this.efficiencyChart = this.$echarts.init(document.getElementById('efficiency_chart'))
         const data = this.efficiencyData
         const colorArray = [
           {
@@ -363,7 +433,13 @@
             bottom: '#F7B7A0'
           }
         ]
-        const defaultData = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
+        const defaultData = []
+        const dataMax = +data.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浠�
+        data.forEach(item => defaultData.push(yAxisMax))
         const option = {
           title: {
             show: true, // 鏄惁鏄剧ず鏍囬锛岄粯璁や负true
@@ -395,7 +471,7 @@
             }
           },
           xAxis: {
-            name: '鍗曚綅',
+            name: '',
             nameTextStyle: {
               color: '#fff'
             },
@@ -406,6 +482,9 @@
               }
             },
             show: true,
+            min: 0,
+            max: 'dataMax',
+            interval: yAxisInterval,
             type: 'value',
             axisTick: {
               show: false
@@ -457,7 +536,7 @@
             data: data
           }],
           series: [{
-            name: '鍒╃敤鐜�',
+            name: 'TEEP',
             type: 'bar',
             zlevel: 1,
             itemStyle: {
@@ -519,14 +598,13 @@
             }
           ]
         }
-        option.title.text = `${moment().format('M鏈圖鏃�')}鍒╃敤鐜嘸
+        option.title.text = `${moment().subtract(1, 'days').format('M鏈圖鏃�')}TEEP`
         this.efficiencyChart.setOption(option, true)
-
+        this.efficiencyChart.hideLoading()
         this.efficiencyChart.on('click', params => {
           // 鐐瑰嚮瑙﹀彂鐨勪负鏌辩姸浣擄紝闄ゆ闄ゅ鏄爣棰�
           if (params.componentType === 'series') {
             // 鏌辩姸浣撹烦杞粺璁″垎鏋愰〉闈㈠睍绀哄搴斿眰绾ф暟鎹�
-            console.log('seriesParams===========', params)
             let productionId
             let tierName
             // 鐐瑰嚮鐨勬槸鏌变綋鐨勫�硷紝鍚﹀垯鐐瑰嚮鐨勪负鏌变綋鑳屾櫙闃村奖
@@ -537,13 +615,11 @@
               productionId = this.efficiencyData.find(item => item.productionCode === params.name).productionId
               tierName = this.efficiencyData.find(item => item.productionCode === params.name).name
             }
-            console.log('productionId', productionId)
             this.$router.push({
               name: 'mdc-base-StatisticsChart',
               params: { isEquipment: false, productionId, tierName }
             })
           } else {
-            console.log('yAxisParams===========', params)
             this.$emit('switchToNextSignage', { signageName: 'BranchFactory', productionCode: params.value })
           }
         })
@@ -551,7 +627,6 @@
 
       /* 缁樺埗鎶�鏈姸鎬侀ゼ鍥� */
       drawTechConditionChart() {
-        this.techConditionChart = this.$echarts.init(document.getElementById('tech_condition_chart'))
         const option = {
           height: 300,
           title: {
@@ -596,11 +671,11 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['45%', '60%'],
               color: [
                 '#0FC61A',
-                '#0DAF15',
+                '#F56436',
                 '#8B8B8B'
               ],
               label: {
@@ -626,11 +701,20 @@
           ]
         }
         this.techConditionChart.setOption(option, true)
+        this.techConditionChart.hideLoading()
+
+        this.techConditionChart.on('click', params => {
+          this.modalTitle = `鎶�鏈姸鎬侊紙${params.name}锛塦
+          this.modalDataApiParams = {
+            technologyStatus: this.techConditionData.find(item => item.name === params.name).technologyStatus
+          }
+          this.modalDataApiUrl = '/eam/calibrationOrder/showEquipmentByTechnologyStatus'
+          this.modalVisible = true
+        })
       },
 
       /* 缁樺埗璁惧鎶ヤ慨鏁呴殰楗煎浘 */
       drawWarrantyMalfunctionChart() {
-        this.warrantyMalfunctionChart = this.$echarts.init(document.getElementById('warranty_malfunction_chart'))
         const option = {
           height: 300,
           title: {
@@ -675,7 +759,7 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['45%', '60%'],
               color: [
                 '#24F2F5',
@@ -705,6 +789,16 @@
           ]
         }
         this.warrantyMalfunctionChart.setOption(option, true)
+        this.warrantyMalfunctionChart.hideLoading()
+
+        this.warrantyMalfunctionChart.on('click', params => {
+          this.modalTitle = `鎶ヤ慨鏁呴殰锛�${params.name}锛塦
+          this.modalDataApiParams = {
+            isStop: this.warrantyMalfunctionData.find(item => item.name === params.name).isStop
+          }
+          this.modalDataApiUrl = '/eam/calibrationOrder/showEquipmentByReportRepair'
+          this.modalVisible = true
+        })
       },
 
       /* 缁樺埗杞﹂棿淇濆吇婊氬姩琛� */
@@ -717,18 +811,25 @@
           evenRowBGC: '#295562',
           data: this.twoMaintenanceChartData,
           index: true,
-          columnWidth: [100],
+          columnWidth: [100, 300, 300, 300],
           align: ['center', 'center', 'center', 'center']
         }
       },
 
       /* 缁樺埗鍗曟煴鍥� */
       drawBarChart() {
-        this.barChart = this.$echarts.init(document.getElementById('bar_chart'))
+        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 option = {
           title: {
             show: true, // 鏄惁鏄剧ず鏍囬锛岄粯璁や负true
-            text: 'OEE杞﹂棿', // 涓绘爣棰樻枃鏈�
+            text: '', // 涓绘爣棰樻枃鏈�
             x: 'center', // 鏍囬姘村钩瀹夋斁浣嶇疆锛屽彲閫夊�间负'left'銆�'center'銆�'right'鎴栧叿浣撶殑姘村钩鍧愭爣鍊�
             y: 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊�
             textStyle: {
@@ -742,6 +843,10 @@
             trigger: 'axis',
             axisPointer: {
               type: 'shadow'
+            },
+            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 + '%'
             },
             // backgroundColor: 'rgba(9, 24, 48, 0.5)',
             borderColor: 'rgba(75, 253, 238, 0.4)',
@@ -759,7 +864,7 @@
             nameLocation: 'middle',
             nameGap: 40, // x杞磏ame涓庢í鍧愭爣杞寸嚎鐨勯棿璺�
             type: 'category',
-            data: this.barChartData.map(item => item.name),
+            data: this.barChartData.map(item => item.productionId),
             axisLine: {
               lineStyle: {
                 color: '#FFFFFF'
@@ -770,7 +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,
@@ -778,12 +887,14 @@
             }
           }],
           yAxis: [{
-            name: '鏁伴噺',
-            nameLocation: 'middle',
-            nameGap: 30, // x杞磏ame涓庢í鍧愭爣杞寸嚎鐨勯棿璺�
+            name: '%',
+            min: 0,
+            max: yAxisMax,
+            interval: yAxisInterval,
             axisLabel: {
               formatter: '{value}',
-              color: '#e2e9ff'
+              color: '#fff',
+              fontSize: 14
             },
             axisTick: {
               show: false
@@ -804,34 +915,62 @@
           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
             },
-            showBackground: true,
+            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: this.barChartData.length > 5 ? '40%' : 30,
+              barGap: '-100%',
+              data: defaultData,
+              itemStyle: {
+                color: '#11294d',
+                barBorderRadius: 100
+              }
+            }]
         }
+        option.title.text = moment().subtract(1, 'months').format('M鏈�') + `OEE`
         this.barChart.setOption(option, true)
+        this.barChart.hideLoading()
+
+        this.barChart.on('click', params => {
+          let productionId
+          // 鐐瑰嚮鐨勬槸鏌变綋鐨勫�硷紝鍚﹀垯鐐瑰嚮鐨勪负鏌变綋鑳屾櫙闃村奖
+          if (params.seriesIndex === 0) productionId = params.data.productionId
+          else productionId = params.name
+
+          this.$router.push({
+            name: 'mdc-base-OEEAnalysis',
+            params: { isEquipment: false, productionId }
+          })
+        })
       },
 
       /* 缁樺埗鍙屾煴鍥� */
       drawDoubleBarChart() {
-        this.doubleBarChart = this.$echarts.init(document.getElementById('double_bar_chart'))
         const option = {
-          color: ['#409EFF', '#0FC61A'],
+          color: ['#66DFE2', '#79CEAA'],
           tooltip: {
             confine: true,
             formatter: function(params) {
@@ -863,7 +1002,7 @@
                 }
               }
             },
-            data: ['OEE', '鍒╃敤鐜�']
+            data: ['OEE', 'TEEP']
           },
           xAxis: {
             type: 'category',
@@ -874,7 +1013,7 @@
               }
             },
             axisLabel: {
-              fontSize: 12,
+              fontSize: 14,
               color: '#fff'
             },
             axisTick: {
@@ -890,9 +1029,6 @@
               type: 'value',
               min: 0,
               minInterval: 1,
-              splitArea: {
-                show: false
-              },
               axisLine: {
                 show: true
               },
@@ -907,7 +1043,7 @@
                 }
               },
               axisLabel: {
-                fontSize: 12,
+                fontSize: 14,
                 color: '#fff',
                 fontFamily: 'Bebas'
               }
@@ -924,10 +1060,10 @@
                 show: false
               },
               axisLabel: {
-                fontSize: 12,
+                fontSize: 14,
                 formatter: '{value}%', // 鍙充晶Y杞存枃瀛楁樉绀�
                 fontFamily: 'Bebas',
-                color: '#fff'
+                color: '#6A93B9'
               },
               splitArea: {
                 show: false
@@ -936,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 ''
@@ -955,11 +1091,11 @@
           }, {
             type: 'bar',
             barWidth: 15,
-            itemStyle: { barBorderRadius: [3, 3, 0, 0] },
-            name: '鍒╃敤鐜�',
+            itemStyle: { barBorderRadius: 100 },
+            name: 'TEEP',
             data: this.doubleBarChartData.utilizationList,
             label: {
-              show: true,
+              show: false,
               lineHeight: 10,
               formatter: params => {
                 if (+params.value === 0) return ''
@@ -975,32 +1111,47 @@
           ]
         }
         this.doubleBarChart.setOption(option, true)
+        this.doubleBarChart.hideLoading()
       },
 
       /* 缁樺埗闂婊氬姩琛� */
-      drawProblemChart() {
+      drawWorkshopProblemChart() {
         this.problemConfig = {
           indexHeader: '搴忓彿',
-          header: ['鏃堕棿', '闂鍐呭'],
+          header: ['闂鍐呭', '鏃堕棿'],
           headerBGC: '#86D186',
           oddRowBGC: '#7CBF7C',
           evenRowBGC: '#7CBF7C',
-          data: [
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂'],
-            // ['2024骞�3鏈�23鍙�', '澶у娉ㄦ剰瀹夊叏闂']
-          ],
+          data: this.workshopProblemChartData,
           index: true,
-          columnWidth: [100, 300, 300],
+          columnWidth: [100, 300, 150],
           align: ['center']
         }
+      },
+
+      /**
+       * 鐐瑰嚮涓変繚灞曠ず鏍忓悗鎵撳紑寮圭獥
+       * @param record 鐐瑰嚮褰撳墠涓変繚淇℃伅
+       */
+      openMaintenanceModal(record) {
+        this.modalTitle = record.planTime
+        this.modalDataApiUrl = record.apiUrl
+        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()
+        })
       },
 
       /**
@@ -1008,6 +1159,8 @@
        * 璋冩暣鍥捐〃灏哄浠ラ�傚簲鍒嗚鲸鐜�
        */
       handleWindowResize() {
+        this.re_drawPieChart()
+
         if (this.runningStateChart) this.runningStateChart.resize()
         if (this.efficiencyChart) this.efficiencyChart.resize()
         if (this.techConditionChart) this.techConditionChart.resize()
@@ -1048,6 +1201,7 @@
             padding: 5px 20px;
             font-size: 20px;
             margin-bottom: 10px;
+            cursor: pointer;
 
             .plan-value-container {
               display: flex;

--
Gitblit v1.9.3