From 8f1df61c8902a35e41205d7cbd9d0763619e6d46 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期五, 22 八月 2025 16:36:47 +0800
Subject: [PATCH] mdc首页设备管理部分功能调整

---
 src/views/dashboard/IndexSignage.vue |  589 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 298 insertions(+), 291 deletions(-)

diff --git a/src/views/dashboard/IndexSignage.vue b/src/views/dashboard/IndexSignage.vue
index ff2faab..0761ee4 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: '鎶ヨ' },
@@ -89,141 +72,186 @@
         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: [
+          {
+            planTime: '鏈湀涓変繚璁″垝',
+            planValueLabel: 'thisMonthMaintenancePlanNum',
+            backgroundColor: '#719D8E',
+            apiUrl: '/eam/calibrationOrder/showThisMonthMaintenanceList'
+          },
+          {
+            planTime: '鏈湀瀹屾垚',
+            planValueLabel: 'thisMonthMaintenanceRealNum',
+            backgroundColor: '#409EFF',
+            apiUrl: '/eam/calibrationOrder/showThisMonthMaintenanceFinishList'
+          },
+          {
+            planTime: '涓嬫湀涓変繚璁″垝',
+            planValueLabel: 'nextMonthMaintenancePlanNum',
+            backgroundColor: '#A8985D',
+            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: [
-          {
-            'value': '32',
-            'name': '401',
-            'productionCode': '125487318',
-            'productionId': '1729419336207761409'
-          },
-          {
-            'value': '23',
-            'name': '406',
-            'productionCode': '4212152142',
-            'productionId': '1729419361201618945'
-          },
-          {
-            'value': '11',
-            'name': '407',
-            'productionCode': '321321345',
-            'productionId': '1729419381665628161'
-          },
-          {
-            'value': '44',
-            'name': '408',
-            'productionCode': '536341343',
-            'productionId': '1729670118396067842'
-          }
-        ],
+        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()
-        this.getTechConditionDataByApi()
-        this.getWarrantyMalfunctionDataByApi()
-        this.getMonthMaintenanceNumByApi()
+        // this.getTechConditionDataByApi()
+        // this.getWarrantyMalfunctionDataByApi()
+        this.getTechConditionAndWarrantyMalfunctionDataByApi()
+        this.getThirdMaintenanceConditionByApi()
         this.getTwoMaintenanceChartDataByApi()
-        // this.getBarChartDataByApi()
+        this.getBarChartDataByApi()
         this.getDoubleBarChartDataByApi()
+        this.getWorkshopProblemChartDataByApi()
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇璁惧杩愯鐘舵�� */
       getRunningStateDataByApi() {
+        this.runningStateChart = this.$echarts.init(document.getElementById('running_state_chart'))
+        this.runningStateChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: 'rgba(0, 0, 0, .45)',
+          maskColor: 'rgba(0,0,0,.05)' // 閬僵灞�
+        })
         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: 'rgba(0, 0, 0, .45)',
+          maskColor: 'rgba(0,0,0,.05)' // 閬僵灞�
+        })
         signageApi.getEquipmentUtilizationStatisticsApi()
           .then(res => {
-            if (res.success) this.efficiencyData = res.result
-            this.drawEfficiencyChart()
+            if (res.success) {
+              this.efficiencyData = res.result
+              this.drawEfficiencyChart()
+            }
           })
       },
 
-      /* 璋冪敤鎺ュ彛鑾峰彇鎶�鏈姸鎬� */
-      getTechConditionDataByApi() {
-        signageApi.getEquipmentTechnologyStatusListApi()
+      /* 璋冪敤鎺ュ彛鑾峰彇鎶�鏈姸鎬佷笌鏁呴殰鎶ヤ慨 */
+      getTechConditionAndWarrantyMalfunctionDataByApi() {
+        this.techConditionChart = this.$echarts.init(document.getElementById('tech_condition_chart'))
+        this.warrantyMalfunctionChart = this.$echarts.init(document.getElementById('warranty_malfunction_chart'))
+        this.techConditionChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: 'rgba(0, 0, 0, .45)',
+          maskColor: 'rgba(0,0,0,.05)' // 閬僵灞�
+        })
+        this.warrantyMalfunctionChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: 'rgba(0, 0, 0, .45)',
+          maskColor: 'rgba(0,0,0,.05)' // 閬僵灞�
+        })
+        signageApi.getEquipmentTechnologyStatusAndReportRepairEquipmentListApi()
           .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.jszt.find(item => item.code === 'QUALIFIED').value,
+                  name: '鍚堟牸',
+                  technologyStatus: 'QUALIFIED'
+                },
+                {
+                  value: res.result.jszt.find(item => item.code === 'PROHIBITED').value,
+                  name: '绂佺敤',
+                  technologyStatus: 'PROHIBITED'
+                },
+                {
+                  value: res.result.jszt.find(item => item.code === 'RESTRICTED').value,
+                  name: '闄愮敤',
+                  technologyStatus: 'RESTRICTED'
+                }
               ]
-            }
-            this.drawTechConditionChart()
-          })
-      },
-
-      /* 璋冪敤鎺ュ彛鑾峰彇璁惧鎶ヤ慨鏁呴殰 */
-      getWarrantyMalfunctionDataByApi() {
-        signageApi.getReportRepairEquipmentListApi()
-          .then(res => {
-            if (res.success) {
               this.warrantyMalfunctionData = [
-                { value: res.result[0].failurTotalCount, name: '鎶ヤ慨' },
-                { value: res.result[0].stopCount, name: '鍋滄満' },
-                { value: res.result[0].noStopCount, name: '杩愯' }
+                { value: res.result.bxqk.find(item => item.code === 'bx').value, name: '鎶ヤ慨', isStop: '' },
+                { value: res.result.bxqk.find(item => item.code === 'stop').value, name: '鍋滄満', isStop: '2' },
+                { value: res.result.bxqk.find(item => item.code === 'run').value, name: '杩愯', isStop: '1' }
               ]
+              this.techConditionChartRequireFinished = true
+              this.warrantyMalfunctionChartRequireFinished = true
+              this.drawTechConditionChart()
+              this.drawWarrantyMalfunctionChart()
             }
-            this.drawWarrantyMalfunctionChart()
           })
       },
 
-      /* 璋冪敤鎺ュ彛鑾峰彇涓変繚璁″垝 */
-      getMonthMaintenanceNumByApi() {
-        signageApi.getThisMonthMaintenanceListApi()
+      /* 璋冪敤鎺ュ彛鑾峰彇涓変繚鎯呭喌 */
+      getThirdMaintenanceConditionByApi() {
+        signageApi.getThirdMaintenanceConditionApi()
           .then(res => {
-            if (res.success && res.result) this.thisMonthMaintenancePlanNum = res.result[0].totalCount
-          })
-        signageApi.getThisMonthMaintenanceFinishListApi()
-          .then(res => {
-            if (res.success && res.result) this.thisMonthMaintenanceRealNum = res.result[0].totalCount
-          })
-        signageApi.getNextMonthMaintenanceList()
-          .then(res => {
-            if (res.success && res.result) this.nextMonthMaintenancePlanNum = res.result[0].totalCount
-          })
-        signageApi.getNextNextMonthMaintenanceListApi()
-          .then(res => {
-            if (res.success && res.result) this.nextNextMonthMaintenancePlanNum = res.result[0].totalCount
+            if (res.success && res.result) {
+              this.thisMonthMaintenancePlanNum = res.result.find(item => item.code === 'bysbzs').value
+              this.thisMonthMaintenanceRealNum = res.result.find(item => item.code === 'bwc').value
+              this.nextMonthMaintenancePlanNum = res.result.find(item => item.code === 'xysb').value
+              this.nextNextMonthMaintenancePlanNum = res.result.find(item => item.code === 'xxysb').value
+            }
           })
       },
 
@@ -231,49 +259,63 @@
       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.factoryName, item.monthPlan, '浜岀骇淇濆吇'])
             this.drawMaintenanceChart()
           })
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇璁惧OEE缁熻 */
       getBarChartDataByApi() {
+        this.barChart = this.$echarts.init(document.getElementById('bar_chart'))
+        this.barChart.showLoading({
+          text: '鏁版嵁鍔犺浇涓� ...',
+          color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊
+          textColor: 'rgba(0, 0, 0, .45)',
+          maskColor: 'rgba(0,0,0,.05)' // 閬僵灞�
+        })
         signageApi.getEquipmentOEEStatistics()
           .then(res => {
-            if (res.success) this.barChartData = res.result
-            this.drawBarChart()
+            if (res.success && res.result) {
+              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: 'rgba(0, 0, 0, .45)',
+          maskColor: 'rgba(0,0,0,.05)' // 閬僵灞�
+        })
         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: {
             show: true, // 鏄惁鏄剧ず鏍囬锛岄粯璁や负true
-            text: '璁惧鐘舵��', // 涓绘爣棰樻枃鏈�
+            text: '璁惧杩愯鐘舵�佺粺璁�', // 涓绘爣棰樻枃鏈�
             x: 'center', // 鏍囬姘村钩瀹夋斁浣嶇疆锛屽彲閫夊�间负'left'銆�'center'銆�'right'鎴栧叿浣撶殑姘村钩鍧愭爣鍊�
             y: 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊�
             textStyle: {
@@ -295,7 +337,6 @@
             left: 0,
             orient: 'vertical',
             right: '10%',
-            // bottom: "0",
             itemWidth: 14,
             itemHeight: 14,
             icon: 'roundRect',
@@ -315,13 +356,13 @@
               type: 'pie',
               roseType: 'angle', // 鐜懓鍥�
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['50%', '60%'],
               color: [
-                '#8B8B8B',
-                '#F56436',
-                '#FFFF40',
-                '#0FC61A'
+                '#686869',
+                '#AA6349',
+                '#EAEA7C',
+                '#5D975D'
               ],
               label: {
                 position: 'outside',
@@ -346,6 +387,7 @@
           ]
         }
         this.runningStateChart.setOption(option, true)
+        this.runningStateChart.hideLoading()
 
         this.runningStateChart.on('click', params => {
           this.$router.push({
@@ -357,38 +399,14 @@
 
       /* 缁樺埗璁惧鍒╃敤鐜囪兌鍥婂浘 */
       drawEfficiencyChart() {
-        this.efficiencyChart = this.$echarts.init(document.getElementById('efficiency_chart'))
         const data = this.efficiencyData
-        const colorArray = [
-          {
-            top: '#79CEAA',
-            bottom: '#79CEAA'
-          },
-          {
-            top: '#F589A2',
-            bottom: '#F589A2'
-          },
-          {
-            top: '#6FBF9D',
-            bottom: '#6FBF9D'
-          },
-          {
-            top: '#66DFE2',
-            bottom: '#66DFE2'
-          }, {
-            top: '#A7F0C1',
-            bottom: '#A7F0C1'
-          },
-          {
-            top: '#FAE893',
-            bottom: '#FAE893'
-          },
-          {
-            top: '#F7B7A0',
-            bottom: '#F7B7A0'
-          }
-        ]
-        const defaultData = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
+        const defaultData = []
+        const dataMax = data.length > 0 ? +data.sort((x, y) => +y.value - +x.value)[0].value : 0
+        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
@@ -420,17 +438,20 @@
             }
           },
           xAxis: {
-            name: '鍗曚綅',
+            name: '',
             nameTextStyle: {
-              color: '#fff'
+              color: 'rgba(0,0,0,.45)'
             },
             axisLabel: {
               margin: 20,
               textStyle: {
-                color: '#fff'
+                color: 'rgba(0,0,0,.45)'
               }
             },
             show: true,
+            min: 0,
+            max: 'dataMax',
+            interval: yAxisInterval,
             type: 'value',
             axisTick: {
               show: false
@@ -446,7 +467,7 @@
             axisLabel: {
               show: true,
               textStyle: {
-                color: '#fff',
+                color: 'rgba(0,0,0,.45)',
                 fontSize: '14',
                 fontWeight: 'bolder'
               },
@@ -481,77 +502,25 @@
             },
             data: data
           }],
-          series: [{
-            name: '鍒╃敤鐜�',
+          series: {
+            name: 'TEEP',
             type: 'bar',
             zlevel: 1,
             itemStyle: {
               barBorderRadius: 100,
-              color: function(params) {
-                let num = colorArray.length
-                return {
-                  type: 'linear',
-                  colorStops: [{
-                    offset: 0,
-                    color: colorArray[params.dataIndex % num].bottom
-                  }, {
-                    offset: 1,
-                    color: colorArray[params.dataIndex % num].top
-                  }, {
-                    offset: 0,
-                    color: colorArray[params.dataIndex % num].bottom
-                  }, {
-                    offset: 1,
-                    color: colorArray[params.dataIndex % num].top
-                  }, {
-                    offset: 0,
-                    color: colorArray[params.dataIndex % num].bottom
-                  }, {
-                    offset: 1,
-                    color: colorArray[params.dataIndex % num].top
-                  }, {
-                    offset: 0,
-                    color: colorArray[params.dataIndex % num].bottom
-                  }, {
-                    offset: 1,
-                    color: colorArray[params.dataIndex % num].top
-                  }, {
-                    offset: 0,
-                    color: colorArray[params.dataIndex % num].bottom
-                  }, {
-                    offset: 1,
-                    color: colorArray[params.dataIndex % num].top
-                  }, {
-                    offset: 0,
-                    color: colorArray[params.dataIndex % num].bottom
-                  }]
-                }
-              }
+              color: '#5070DD'
             },
             barWidth: 12,
             data: data
-          },
-            {
-              name: '鑳屾櫙',
-              type: 'bar',
-              barWidth: 12,
-              barGap: '-100%',
-              data: defaultData,
-              itemStyle: {
-                color: '#11294d',
-                barBorderRadius: 100
-              }
-            }
-          ]
+          }
         }
-        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
             // 鐐瑰嚮鐨勬槸鏌变綋鐨勫�硷紝鍚﹀垯鐐瑰嚮鐨勪负鏌变綋鑳屾櫙闃村奖
@@ -562,13 +531,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 })
           }
         })
@@ -576,7 +543,6 @@
 
       /* 缁樺埗鎶�鏈姸鎬侀ゼ鍥� */
       drawTechConditionChart() {
-        this.techConditionChart = this.$echarts.init(document.getElementById('tech_condition_chart'))
         const option = {
           height: 300,
           title: {
@@ -621,12 +587,12 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['45%', '60%'],
               color: [
-                '#0FC61A',
-                '#0DAF15',
-                '#8B8B8B'
+                '#0AA012',
+                '#247F49',
+                '#757160'
               ],
               label: {
                 position: 'outside',
@@ -651,16 +617,25 @@
           ]
         }
         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: {
             show: true, // 鏄惁鏄剧ず鏍囬锛岄粯璁や负true
-            text: '璁惧鎶ヤ慨鏁呴殰', // 涓绘爣棰樻枃鏈�
+            text: '璁惧鎶ヤ慨鏁呴殰鎯呭喌', // 涓绘爣棰樻枃鏈�
             x: 'center', // 鏍囬姘村钩瀹夋斁浣嶇疆锛屽彲閫夊�间负'left'銆�'center'銆�'right'鎴栧叿浣撶殑姘村钩鍧愭爣鍊�
             y: 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊�
             textStyle: {
@@ -700,12 +675,12 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '55%'],
+              radius: this.pieChartRadius,
               center: ['45%', '60%'],
               color: [
-                '#24F2F5',
-                '#F56436',
-                '#FFFF40'
+                '#00CED1',
+                '#B85B38',
+                '#EAEA7C'
               ],
               label: {
                 position: 'outside',
@@ -730,6 +705,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
+        })
       },
 
       /* 缁樺埗杞﹂棿淇濆吇婊氬姩琛� */
@@ -737,20 +722,25 @@
         this.maintenanceConfig = {
           indexHeader: '搴忓彿',
           header: ['杞﹂棿', '鏃ユ湡', '鍐呭'],
-          headerBGC: '#2C8BB2',
-          oddRowBGC: '#244B58',
-          evenRowBGC: '#295562',
+          headerBGC: '#266C86',
+          oddRowBGC: '#0A2732',
+          evenRowBGC: '#003B51',
           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 = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
+        const defaultData = []
+        const dataMax = this.barChartData.length > 0 ? +this.barChartData.sort((x, y) => +y.value - +x.value)[0].value : 0
+        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
@@ -800,10 +790,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,
@@ -812,10 +803,13 @@
           }],
           yAxis: [{
             name: '%',
-            max: 100,
+            min: 0,
+            max: yAxisMax,
+            interval: yAxisInterval,
             axisLabel: {
               formatter: '{value}',
-              color: '#e2e9ff'
+              color: '#fff',
+              fontSize: 14
             },
             axisTick: {
               show: false
@@ -836,29 +830,29 @@
           series: [{
             type: 'bar',
             data: this.barChartData,
-            barWidth: '15%',
+            barWidth: this.barChartData.length > 5 ? '40%' : 30,
             itemStyle: {
-              color: '#55D6A5'
+              color: '#2E8BDA'
             },
             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: {
@@ -866,17 +860,16 @@
               }
             }]
         }
-        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()
 
         this.barChart.on('click', params => {
-          console.log('params', params)
           let productionId
           // 鐐瑰嚮鐨勬槸鏌变綋鐨勫�硷紝鍚﹀垯鐐瑰嚮鐨勪负鏌变綋鑳屾櫙闃村奖
           if (params.seriesIndex === 0) productionId = params.data.productionId
           else productionId = params.name
 
-          console.log('productionId', productionId)
           this.$router.push({
             name: 'mdc-base-OEEAnalysis',
             params: { isEquipment: false, productionId }
@@ -886,9 +879,8 @@
 
       /* 缁樺埗鍙屾煴鍥� */
       drawDoubleBarChart() {
-        this.doubleBarChart = this.$echarts.init(document.getElementById('double_bar_chart'))
         const option = {
-          color: ['#409EFF', '#0FC61A'],
+          color: ['#4992FF', '#4DC0B1'],
           tooltip: {
             confine: true,
             formatter: function(params) {
@@ -912,7 +904,7 @@
             formatter: ['{a|{name}}'].join('\n'),
             textStyle: {
               fontSize: 14,
-              color: '#fff',
+              color: 'rgba(0, 0, 0, .45)',
               height: 8,
               rich: {
                 a: {
@@ -920,7 +912,7 @@
                 }
               }
             },
-            data: ['OEE', '鍒╃敤鐜�']
+            data: ['OEE', 'TEEP']
           },
           xAxis: {
             type: 'category',
@@ -931,7 +923,7 @@
               }
             },
             axisLabel: {
-              fontSize: 12,
+              fontSize: 14,
               color: '#fff'
             },
             axisTick: {
@@ -947,9 +939,6 @@
               type: 'value',
               min: 0,
               minInterval: 1,
-              splitArea: {
-                show: false
-              },
               axisLine: {
                 show: true
               },
@@ -964,7 +953,7 @@
                 }
               },
               axisLabel: {
-                fontSize: 12,
+                fontSize: 14,
                 color: '#fff',
                 fontFamily: 'Bebas'
               }
@@ -981,10 +970,10 @@
                 show: false
               },
               axisLabel: {
-                fontSize: 12,
+                fontSize: 14,
                 formatter: '{value}%', // 鍙充晶Y杞存枃瀛楁樉绀�
                 fontFamily: 'Bebas',
-                color: '#fff'
+                color: '#6A93B9'
               },
               splitArea: {
                 show: false
@@ -993,11 +982,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 ''
@@ -1012,11 +1001,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 ''
@@ -1032,32 +1021,47 @@
           ]
         }
         this.doubleBarChart.setOption(option, true)
+        this.doubleBarChart.hideLoading()
       },
 
       /* 缁樺埗闂婊氬姩琛� */
-      drawProblemChart() {
+      drawWorkshopProblemChart() {
         this.problemConfig = {
           indexHeader: '搴忓彿',
-          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鍙�', '澶у娉ㄦ剰瀹夊叏闂']
-          ],
+          header: ['闂鍐呭', '鏃堕棿'],
+          headerBGC: '#83B883',
+          oddRowBGC: '#556955',
+          evenRowBGC: '#556955',
+          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()
+        })
       },
 
       /**
@@ -1065,6 +1069,8 @@
        * 璋冩暣鍥捐〃灏哄浠ラ�傚簲鍒嗚鲸鐜�
        */
       handleWindowResize() {
+        this.re_drawPieChart()
+
         if (this.runningStateChart) this.runningStateChart.resize()
         if (this.efficiencyChart) this.efficiencyChart.resize()
         if (this.techConditionChart) this.techConditionChart.resize()
@@ -1105,6 +1111,7 @@
             padding: 5px 20px;
             font-size: 20px;
             margin-bottom: 10px;
+            cursor: pointer;
 
             .plan-value-container {
               display: flex;

--
Gitblit v1.9.3