From a16a7006603e4b68b52689e88479881bff8c6106 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期六, 26 七月 2025 17:06:44 +0800
Subject: [PATCH] 维修工单修改

---
 src/views/dashboard/BranchFactorySignage.vue |  673 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 424 insertions(+), 249 deletions(-)

diff --git a/src/views/dashboard/BranchFactorySignage.vue b/src/views/dashboard/BranchFactorySignage.vue
index 4de1dc3..2cc6394 100644
--- a/src/views/dashboard/BranchFactorySignage.vue
+++ b/src/views/dashboard/BranchFactorySignage.vue
@@ -1,55 +1,28 @@
 <template>
   <div class="page-container">
-    <!--<div class="page-title">-->
-    <!--<slot name="index_signage_nav"></slot>-->
-    <!--&lt;!&ndash;<dv-decoration-11 class="workshop-nav" v-for="item in workshopList">&ndash;&gt;-->
-    <!--&lt;!&ndash;{{item.workshopName}}&ndash;&gt;-->
-    <!--&lt;!&ndash;</dv-decoration-11>&ndash;&gt;-->
-    <!--</div>-->
     <div class="content-container">
       <div style="width: 25%" class="left-col">
         <div class="back-nav" @click="$emit('backToLastSignage','Index')" v-if="userType===4">
           <dv-decoration-7>涓婁竴绾�</dv-decoration-7>
         </div>
-        <dv-border-box-9 style="padding: 40px 20px 0">
-          <!--<div class="first-title">M D C 鍏� 缃� 鎬� 鏁� : 6 0 3 鍙�</div>-->
+        <dv-border-box-9 style="padding: 30px 20px 0">
           <div id="running_state_chart" style="width:100%;height: 400px;"></div>
           <div id="efficiency_chart" style="width: 100%;height: 350px"></div>
         </dv-border-box-9>
       </div>
+
       <div style="width: 42%" class="middle-col">
-        <dv-border-box-9 style="padding: 40px 20px 0">
-          <!--<div class="first-title">璁� 澶� 鍙� 璐� 鎬� 鏁� : 1 0 2 2 鍙�</div>-->
+        <dv-border-box-9 style="padding: 30px 20px 0">
           <div style="display: flex">
             <div id="tech_condition_chart" style="width:50%;height: 420px;"></div>
             <div id="warranty_malfunction_chart" style="width:50%;height: 420px;"></div>
           </div>
           <div class="support-plan-container">
-            <div class="support-plan-item" style="background:#719D8E">
-              <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:#A8985D">
-              <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>
@@ -59,24 +32,32 @@
           </div>
         </dv-border-box-9>
       </div>
+
       <div style="width: 32%">
-        <dv-border-box-9 style="padding: 30px 0">
-          <div id="bar_chart" style="width:100%;height: 250px;"></div>
-          <div id="double_bar_chart" style="width:100%;height: 300px;"></div>
+        <dv-border-box-9 style="padding: 30px 0 20px">
+          <div id="bar_chart" style="width:100%;height: 280px;"></div>
+          <div id="double_bar_chart" style="width:100%;height: 280px;"></div>
           <div style="padding: 0 20px;">
             <dv-scroll-board :config="problemConfig" style="width:100%;height:220px"/>
           </div>
         </dv-border-box-9>
       </div>
+
+      <SignageModal :modalVisible="modalVisible" :modalTitle=modalTitle :modalDataApiUrl="modalDataApiUrl"
+                    :modalDataApiParams="modalDataApiParams"
+                    @closeModal="modalVisible=false"/>
     </div>
   </div>
 </template>
 
 <script>
   import signageApi from '@/api/signage'
+  import moment from 'moment'
+  import SignageModal from './modules/SignageModal'
 
   export default {
     name: 'BranchFactorySignage',
+    components: { SignageModal },
     props: {
       productionCode: {
         type: String,
@@ -88,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: '鎶ヨ' },
@@ -98,65 +84,74 @@
         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: '鍋滄満' },
           { 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: {},
-        supportPlanList: [
-          {
-            label: '鏈湀涓変繚璁″垝',
-            value: 299,
-            background: '#719D8E'
-          },
-          {
-            label: '鏈湀瀹屾垚',
-            value: 229,
-            background: '#409EFF'
-          },
-          {
-            label: '涓嬫湀涓変繚璁″垝',
-            value: 319,
-            background: '#A8985D'
-          },
-          {
-            label: '涓嬩笅鏈堜笁淇濊鍒�',
-            value: 329,
-            background: '#58D9F9'
-          }
-        ],
+        workshopProblemChartData: [],
         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.getChartDataByApi()
-    },
-    activated() {
-      console.log('瑙﹀彂activated')
-      this.handleWindowResize()
     },
     beforeDestroy() {
       window.removeEventListener('resize', this.handleWindowResize)
     },
     methods: {
+      /* 璋冪敤鎺ュ彛鑾峰彇鍥捐〃鏁版嵁姹囨�绘柟娉� */
       getChartDataByApi() {
         this.getRunningStateDataByApi()
         this.getEfficiencyDataByApi()
@@ -166,53 +161,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(this.productionCode)
           .then(res => {
-            if (res.success) this.runningStateData = res.result
-            this.drawRunningStateChart()
+            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(this.productionCode)
           .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(this.productionCode)
           .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(this.productionCode)
           .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()
           })
       },
 
@@ -240,64 +272,76 @@
       getTwoMaintenanceChartDataByApi() {
         signageApi.getTwoMaintenancePlanListApi(this.productionCode)
           .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(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()
+            }
           })
       },
 
       /* 璋冪敤鎺ュ彛鑾峰彇璁惧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(this.productionCode)
           .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(this.productionCode)
+          .then(res => {
+            if (res.success && res.result.length > 0) this.workshopProblemChartData = res.result.map(item => [item.content, item.createTime])
+            this.drawWorkshopProblemChart()
+          })
       },
 
       /* 缁樺埗璁惧杩愯鐘舵�佺帿鐟伴ゼ鍥� */
-      drawRunningStateChart() {
-        this.runningStateChart = this.$echarts.init(document.getElementById('running_state_chart'))
+      drawRunningStateChart(productionId) {
         const option = {
-          height: 300,
           title: {
             show: true, // 鏄惁鏄剧ず鏍囬锛岄粯璁や负true
-            text: '璁惧杩愯鐘舵�佺粺璁�', // 涓绘爣棰樻枃鏈�
+            text: '璁惧鐘舵��', // 涓绘爣棰樻枃鏈�
             x: 'center', // 鏍囬姘村钩瀹夋斁浣嶇疆锛屽彲閫夊�间负'left'銆�'center'銆�'right'鎴栧叿浣撶殑姘村钩鍧愭爣鍊�
             y: 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊�
             textStyle: {
               // 涓绘爣棰樻枃鏈牱寮�
               fontSize: 18,
               fontWeight: 'normal',
-              color: '#00A8AC'
+              color: '#1AD8DE'
             }
           },
           tooltip: {
             trigger: 'item',
             formatter: function(params) {
-              if (params.name !== '') {
-                return `${params.name}:${params.value}(${params.percent}%)`
-              }
+              return '<span style="font-weight:bolder;">' + params.name + '</span><br/>' +
+                '<span style="display:inline-block; width:10px; height:10px; border-radius:100px; margin-right:5px; background:' + params.color + '"></span>' + `${params.value}锛�${params.percent}%锛塦
             }
           },
           legend: {
@@ -325,13 +369,13 @@
               type: 'pie',
               roseType: 'angle', // 鐜懓鍥�
               // selectedMode: "single",
-              radius: ['60%', '80%'],
-              center: ['50%', '60%'],
+              radius: this.pieChartRadius,
+              center: ['53%', '50%'],
               color: [
-                '#686869',
-                '#AA6349',
-                '#968A5E',
-                '#5D975D'
+                '#8B8B8B',
+                '#F56436',
+                '#FFFF40',
+                '#0FC61A'
               ],
               label: {
                 position: 'outside',
@@ -356,52 +400,67 @@
           ]
         }
         this.runningStateChart.setOption(option, true)
+        this.runningStateChart.hideLoading()
+
+        this.runningStateChart.on('click', params => {
+          console.log('params', params)
+          this.$router.push({
+            name: 'mdc-base-DeviceBaseInfo',
+            params: { signageData: params.data, productionId }
+          })
+        })
       },
 
       /* 缁樺埗璁惧鍒╃敤鐜囪兌鍥婂浘 */
       drawEfficiencyChart() {
-        this.efficiencyChart = this.$echarts.init(document.getElementById('efficiency_chart'))
         const data = this.efficiencyData
         const colorArray = [
           {
-            top: '#61927F',
-            bottom: '#61927F'
-          }, {
-            top: '#629480',
-            bottom: '#629480'
+            top: '#79CEAA',
+            bottom: '#79CEAA'
+          },
+          {
+            top: '#F589A2',
+            bottom: '#F589A2'
+          },
+          {
+            top: '#6FBF9D',
+            bottom: '#6FBF9D'
           },
           {
             top: '#66DFE2',
             bottom: '#66DFE2'
           }, {
-            top: '#9FE6B8',
-            bottom: '#9FE6B8'
+            top: '#A7F0C1',
+            bottom: '#A7F0C1'
           },
           {
-            top: '#FEDA5B',
-            bottom: '#FEDA5B'
+            top: '#FAE893',
+            bottom: '#FAE893'
           },
           {
-            top: '#FF9F7F',
-            bottom: '#FF9F7F'
-          },
-          {
-            top: '#F87091',
-            bottom: '#F87091'
+            top: '#F7B7A0',
+            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
-            text: '璁惧鍒╃敤鐜�', // 涓绘爣棰樻枃鏈�
+            text: '', // 涓绘爣棰樻枃鏈�
             x: 'left', // 鏍囬姘村钩瀹夋斁浣嶇疆锛屽彲閫夊�间负'left'銆�'center'銆�'right'鎴栧叿浣撶殑姘村钩鍧愭爣鍊�
             y: 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊�
             textStyle: {
               // 涓绘爣棰樻枃鏈牱寮�
               fontSize: 18,
               fontWeight: 'normal',
-              color: '#fff'
+              color: '#1AD8DE'
             }
           },
           grid: {
@@ -422,7 +481,7 @@
             }
           },
           xAxis: {
-            name: '鍗曚綅',
+            name: '',
             nameTextStyle: {
               color: '#fff'
             },
@@ -433,6 +492,9 @@
               }
             },
             show: true,
+            min: 0,
+            max: 'dataMax',
+            interval: yAxisInterval,
             type: 'value',
             axisTick: {
               show: false
@@ -448,7 +510,7 @@
             axisLabel: {
               show: true,
               textStyle: {
-                color: '#d9e7fa',
+                color: '#fff',
                 fontSize: '14',
                 fontWeight: 'bolder'
               },
@@ -484,7 +546,7 @@
             data: data
           }],
           series: [{
-            name: '鍒╃敤鐜�',
+            name: 'TEEP',
             type: 'bar',
             zlevel: 1,
             itemStyle: {
@@ -546,14 +608,28 @@
             }
           ]
         }
+        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
+            // 鐐瑰嚮鐨勬槸鏌变綋鐨勫�硷紝鍚﹀垯鐐瑰嚮鐨勪负鏌变綋鑳屾櫙闃村奖
+            if (params.seriesIndex === 0) {
+              productionId = params.data.productionId
+              tierName = params.data.name
+            } else {
+              productionId = this.efficiencyData.find(item => item.productionCode === params.name).productionId
+              tierName = this.efficiencyData.find(item => item.productionCode === params.name).name
+            }
+            this.$router.push({
+              name: 'mdc-base-StatisticsChart',
+              params: { isEquipment: false, productionId, tierName }
+            })
           } else {
             console.log('yAxisParams===========', params)
             this.$emit('switchToNextSignage', { signageName: 'WorkshopSection', productionCode: params.value })
@@ -563,7 +639,6 @@
 
       /* 缁樺埗鎶�鏈姸鎬侀ゼ鍥� */
       drawTechConditionChart() {
-        this.techConditionChart = this.$echarts.init(document.getElementById('tech_condition_chart'))
         const option = {
           height: 300,
           title: {
@@ -575,15 +650,14 @@
               // 涓绘爣棰樻枃鏈牱寮�
               fontSize: 18,
               fontWeight: 'normal',
-              color: '#00A8AC'
+              color: '#1AD8DE'
             }
           },
           tooltip: {
             trigger: 'item',
             formatter: function(params) {
-              if (params.name !== '') {
-                return `${params.name}:${params.value}(${params.percent}%)`
-              }
+              return '<span style="font-weight:bolder;">' + params.name + '</span><br/>' +
+                '<span style="display:inline-block; width:10px; height:10px; border-radius:100px; margin-right:5px; background:' + params.color + '"></span>' + `${params.value}锛�${params.percent}%锛塦
             }
           },
           legend: {
@@ -609,12 +683,12 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '60%'],
+              radius: this.pieChartRadius,
               center: ['50%', '60%'],
               color: [
-                '#0AA012',
-                '#237E48',
-                '#757160'
+                '#0FC61A',
+                '#F56436',
+                '#8B8B8B'
               ],
               label: {
                 position: 'outside',
@@ -639,11 +713,21 @@
           ]
         }
         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,
+            productionCode: this.productionCode
+          }
+          this.modalDataApiUrl = '/eam/calibrationOrder/showEquipmentByTechnologyStatus'
+          this.modalVisible = true
+        })
       },
 
       /* 缁樺埗璁惧鎶ヤ慨鏁呴殰楗煎浘 */
       drawWarrantyMalfunctionChart() {
-        this.warrantyMalfunctionChart = this.$echarts.init(document.getElementById('warranty_malfunction_chart'))
         const option = {
           height: 300,
           title: {
@@ -655,15 +739,14 @@
               // 涓绘爣棰樻枃鏈牱寮�
               fontSize: 18,
               fontWeight: 'normal',
-              color: '#00A8AC'
+              color: '#1AD8DE'
             }
           },
           tooltip: {
             trigger: 'item',
             formatter: function(params) {
-              if (params.name !== '') {
-                return `${params.name}:${params.value}(${params.percent}%)`
-              }
+              return '<span style="font-weight:bolder;">' + params.name + '</span><br/>' +
+                '<span style="display:inline-block; width:10px; height:10px; border-radius:100px; margin-right:5px; background:' + params.color + '"></span>' + `${params.value}锛�${params.percent}%锛塦
             }
           },
           legend: {
@@ -689,12 +772,12 @@
             {
               type: 'pie',
               // selectedMode: "single",
-              radius: ['40%', '60%'],
+              radius: this.pieChartRadius,
               center: ['50%', '60%'],
               color: [
-                '#00CED1',
-                '#B85B38',
-                '#A8985D'
+                '#24F2F5',
+                '#F56436',
+                '#FFFF40'
               ],
               label: {
                 position: 'outside',
@@ -719,6 +802,17 @@
           ]
         }
         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,
+            productionCode: this.productionCode
+          }
+          this.modalDataApiUrl = '/eam/calibrationOrder/showEquipmentByReportRepair'
+          this.modalVisible = true
+        })
       },
 
       /* 缁樺埗杞﹂棿淇濆吇婊氬姩琛� */
@@ -726,23 +820,48 @@
         this.maintenanceConfig = {
           indexHeader: '搴忓彿',
           header: ['杞﹂棿', '鏃ユ湡', '鍐呭'],
-          headerBGC: '#266C86',
+          headerBGC: '#2C8BB2',
+          oddRowBGC: '#244B58',
+          evenRowBGC: '#295562',
           rowNum: 1,
           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: '', // 涓绘爣棰樻枃鏈�
+            x: 'center', // 鏍囬姘村钩瀹夋斁浣嶇疆锛屽彲閫夊�间负'left'銆�'center'銆�'right'鎴栧叿浣撶殑姘村钩鍧愭爣鍊�
+            y: 'top', // 鏍囬鍨傜洿瀹夋斁浣嶇疆锛屽彲閫夊�间负'top'銆�'bottom'銆�'center'鎴栧叿浣撶殑鍨傜洿鍧愭爣鍊�
+            textStyle: {
+              // 涓绘爣棰樻枃鏈牱寮�
+              fontSize: 18,
+              fontWeight: 'normal',
+              color: '#1AD8DE'
+            }
+          },
           tooltip: {
             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)',
@@ -756,11 +875,11 @@
             left: '10%'
           },
           xAxis: [{
-            name: 'OEE杞﹂棿',
+            name: '',
             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'
@@ -769,21 +888,28 @@
             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: 6 // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈
+              margin: 10, // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈
+              formatter: value => {
+                return `${this.barChartData.find(item => item.productionId === value).name}`
+              },
+              fontSize: 14
             },
             axisTick: {
-              show: false
+              show: true,
+              alignWithLabel: true
             }
           }],
           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
@@ -795,6 +921,7 @@
               }
             },
             splitLine: {
+              show: false,
               lineStyle: {
                 color: 'rgba(255,255,255,0.12)'
               }
@@ -803,33 +930,63 @@
           series: [{
             type: 'bar',
             data: this.barChartData,
-            barWidth: '15%',
+            barWidth: this.barChartData.length > 5 ? '40%' : 30,
             itemStyle: {
-              color: '#7DB17F'
+              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: 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 => {
+          console.log('params', 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: ['#4992FF', '#4DC0B1'],
+          color: ['#66DFE2', '#79CEAA'],
           tooltip: {
             confine: true,
             formatter: function(params) {
@@ -853,7 +1010,7 @@
             formatter: ['{a|{name}}'].join('\n'),
             textStyle: {
               fontSize: 14,
-              color: '#6A93B9',
+              color: '#fff',
               height: 8,
               rich: {
                 a: {
@@ -861,7 +1018,7 @@
                 }
               }
             },
-            data: ['OEE', '鍒╃敤鐜�']
+            data: ['OEE', 'TEEP']
           },
           xAxis: {
             type: 'category',
@@ -872,67 +1029,70 @@
               }
             },
             axisLabel: {
-              fontSize: 12,
-              color: '#6A93B9'
+              fontSize: 14,
+              color: '#fff'
             },
             axisTick: {
-              show: false
+              show: true
             }
           },
-          yAxis: [{
-            name: '%',
-            type: 'value',
-            min: 0,
-            minInterval: 1,
-            splitArea: {
-              show: false
-            },
-            axisLine: {
-              show: false
-            },
-            axisTick: {
-              show: false
-            },
-            splitLine: {
-              lineStyle: {
-                color: 'rgba(255, 255, 255, 0.15)'
-                // type: 'dashed', // dotted 铏氱嚎
+          yAxis: [
+            {
+              name: '%',
+              nameTextStyle: {
+                color: '#fff'
+              },
+              type: 'value',
+              min: 0,
+              minInterval: 1,
+              axisLine: {
+                show: true
+              },
+              axisTick: {
+                show: true
+              },
+              splitLine: {
+                show: false,
+                lineStyle: {
+                  color: 'rgba(255, 255, 255, 0.15)'
+                  // type: 'dashed', // dotted 铏氱嚎
+                }
+              },
+              axisLabel: {
+                fontSize: 14,
+                color: '#fff',
+                fontFamily: 'Bebas'
               }
             },
-            axisLabel: {
-              fontSize: 12,
-              color: '#6A93B9',
-              fontFamily: 'Bebas'
-            }
-          }, {
-            type: 'value',
-            axisLine: {
-              show: false
-            },
-            axisTick: {
-              show: false
-            },
-            splitLine: {
-              show: false
-            },
-            axisLabel: {
-              fontSize: 12,
-              formatter: '{value}%', // 鍙充晶Y杞存枃瀛楁樉绀�
-              fontFamily: 'Bebas',
-              color: '#6A93B9'
-            },
-            splitArea: {
-              show: false
-            }
-          }],
+            {
+              type: 'value',
+              axisLine: {
+                show: true
+              },
+              axisTick: {
+                show: false
+              },
+              splitLine: {
+                show: false
+              },
+              axisLabel: {
+                fontSize: 14,
+                formatter: '{value}%', // 鍙充晶Y杞存枃瀛楁樉绀�
+                fontFamily: 'Bebas',
+                color: '#6A93B9'
+              },
+              splitArea: {
+                show: false
+              }
+            }],
           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 ''
@@ -947,11 +1107,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 ''
@@ -967,21 +1127,51 @@
           ]
         }
         this.doubleBarChart.setOption(option, true)
+        this.doubleBarChart.hideLoading()
       },
 
       /* 缁樺埗闂婊氬姩琛� */
-      drawProblemChart() {
+      drawWorkshopProblemChart() {
         this.problemConfig = {
           indexHeader: '搴忓彿',
-          header: ['鏃堕棿', '闂鍐呭'],
-          headerBGC: '#83B883',
-          oddRowBGC: '#556955',
-          evenRowBGC: '#556955',
-          data: [],
+          header: ['闂鍐呭', '鏃堕棿'],
+          headerBGC: '#86D186',
+          oddRowBGC: '#7CBF7C',
+          evenRowBGC: '#7CBF7C',
+          data: this.workshopProblemChartData,
           index: true,
-          columnWidth: [100, 300, 300],
+          columnWidth: [100, 300, 150],
           align: ['center']
         }
+      },
+
+      /**
+       * 鐐瑰嚮涓変繚灞曠ず鏍忓悗鎵撳紑寮圭獥
+       * @param record 鐐瑰嚮褰撳墠涓変繚淇℃伅
+       */
+      openMaintenanceModal(record) {
+        this.modalTitle = record.planTime
+        this.modalDataApiParams = {
+          productionCode: this.productionCode
+        }
+        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(() => {
+          // 鏁版嵁鏈姞杞藉畬鎴愭棤闇�閲嶇粯鍥捐〃锛屼笉鐒舵棤娉曞尯鍒嗘帴鍙h繑鍥炴甯镐笌鍚�
+          if (this.runningStateChartDataRequireFinished) this.drawRunningStateChart(this.currentPageProductionId)
+          if (this.techConditionChartRequireFinished) this.drawTechConditionChart()
+          if (this.warrantyMalfunctionChartRequireFinished) this.drawWarrantyMalfunctionChart()
+        })
       },
 
       /**
@@ -989,6 +1179,7 @@
        * 璋冩暣鍥捐〃灏哄浠ラ�傚簲鍒嗚鲸鐜�
        */
       handleWindowResize() {
+        this.re_drawPieChart()
         if (this.runningStateChart) this.runningStateChart.resize()
         if (this.efficiencyChart) this.efficiencyChart.resize()
         if (this.techConditionChart) this.techConditionChart.resize()
@@ -1009,12 +1200,6 @@
       color: #fff;
       margin-bottom: 10px;
 
-      .workshop-nav {
-        width: 120px;
-        height: 40px;
-        font-size: 12px;
-        cursor: pointer;
-      }
     }
 
     .content-container {
@@ -1023,17 +1208,6 @@
       justify-content: space-between;
 
       .left-col {
-        .back-nav {
-          width: 100px;
-          height: 30px;
-          color: #eee;
-          position: absolute;
-          top: 25px;
-          left: 25px;
-          cursor: pointer;
-          z-index: 9999
-        }
-
         .first-title {
           color: #00A8AC;
           font-size: 20px;
@@ -1063,6 +1237,7 @@
             padding: 5px 20px;
             font-size: 20px;
             margin-bottom: 10px;
+            cursor: pointer;
 
             .plan-value-container {
               display: flex;

--
Gitblit v1.9.3