¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="outer-container"> |
| | | <div class="left-container"> |
| | | <a-card title="ææ¯ç¶æ"> |
| | | <a-spin class="spinning-container" :spinning="spinning1"> |
| | | <div id="tech_condition_chart" style="width:100%;height: 100%;"></div> |
| | | </a-spin> |
| | | </a-card> |
| | | |
| | | <a-card title="è®¾å¤æ¥ä¿®æ
é"> |
| | | <a-spin class="spinning-container" :spinning="spinning2"> |
| | | <div id="warranty_malfunction_chart" style="width:100%;height: 100%;"></div> |
| | | </a-spin> |
| | | </a-card> |
| | | </div> |
| | | |
| | | |
| | | <div class="right-container"> |
| | | <div class="right-top-container"> |
| | | <a-card title="ä¸ä¿è®¡å"> |
| | | <div class="support-plan-container"> |
| | | <div v-for="(item,index) in maintenanceEleList" :key="index" class="support-plan-item"> |
| | | <div>{{item.planTime}}</div> |
| | | <div class="plan-value-container"> |
| | | <div class="plan-value">{{$data.thirdMaintenanceParams[item.planValueLabel]}}</div> |
| | | <div>å°</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </a-card> |
| | | <a-card title="äºä¿è®¡å"> |
| | | <div class="support-plan-container"> |
| | | <div v-for="(item,index) in maintenanceEleList" :key="index" class="support-plan-item"> |
| | | <div>{{item.planTime}}</div> |
| | | <div class="plan-value-container"> |
| | | <div class="plan-value">{{$data.secondMaintenanceParams[item.planValueLabel]}}</div> |
| | | <div>å°</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </a-card> |
| | | </div> |
| | | |
| | | <a-card title="æçå¾
å" class="right-bottom-container"> |
| | | <a slot="extra" href="#" @click="$router.push('/flowable/workflow/FlowTodo')">æ´å¤</a> |
| | | |
| | | <todo-list ref="todoList" |
| | | :defaultCategories="['equipment_transfer','equipment_scrap','spare_part_apply','equipment_seal_up','equipment_unseal','equipment_return','sbdjApproval','eam_repair','equipment_lean_out','second_maintenance','third_maintenance']" |
| | | /> |
| | | </a-card> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import TodoList from '../TodoList' |
| | | import signageApi from '@/api/signage' |
| | | |
| | | export default { |
| | | name: 'EamManagerSignage', |
| | | components: { TodoList }, |
| | | data() { |
| | | return { |
| | | spinning1: false, |
| | | spinning2: false, |
| | | techConditionChart: '', |
| | | warrantyMalfunctionChart: '', |
| | | thirdMaintenanceParams: { |
| | | thisMonthMaintenancePlanNum: 0, |
| | | thisMonthMaintenanceRealNum: 0, |
| | | nextMonthMaintenancePlanNum: 0, |
| | | maintenanceOverdueNum: 0 |
| | | }, |
| | | secondMaintenanceParams: { |
| | | thisMonthMaintenancePlanNum: 0, |
| | | thisMonthMaintenanceRealNum: 0, |
| | | nextMonthMaintenancePlanNum: 0, |
| | | maintenanceOverdueNum: 0 |
| | | }, |
| | | maintenanceEleList: [ |
| | | { |
| | | planTime: 'æ¬æè®¡å', |
| | | planValueLabel: 'thisMonthMaintenancePlanNum', |
| | | backgroundColor: '#719D8E', |
| | | code: 'bysbzs' |
| | | }, |
| | | { |
| | | planTime: 'æ¬æå®æ', |
| | | planValueLabel: 'thisMonthMaintenanceRealNum', |
| | | backgroundColor: '#409EFF', |
| | | code: 'bwc' |
| | | }, |
| | | { |
| | | planTime: 'ä¸æè®¡å', |
| | | planValueLabel: 'nextMonthMaintenancePlanNum', |
| | | backgroundColor: '#A8985D', |
| | | code: 'xysb' |
| | | }, |
| | | { |
| | | planTime: 'è¶
æ', |
| | | planValueLabel: 'maintenanceOverdueNum', |
| | | backgroundColor: '#E86A6A', |
| | | code: '' |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | mounted() { |
| | | window.addEventListener('resize', this.handleWindowResize) |
| | | this.getChartDataByApi() |
| | | this.$refs.todoList.loadData(1) |
| | | }, |
| | | beforeDestroy() { |
| | | window.removeEventListener('resize', this.handleWindowResize) |
| | | }, |
| | | methods: { |
| | | /* è°ç¨æ¥å£è·åå¾è¡¨æ°æ®æ±æ»æ¹æ³ */ |
| | | getChartDataByApi() { |
| | | this.getTechConditionDataByApi() |
| | | this.getWarrantyMalfunctionDataByApi() |
| | | this.getThirdMaintenanceConditionByApi() |
| | | this.getSecondMaintenanceConditionByApi() |
| | | }, |
| | | |
| | | /* è°ç¨æ¥å£è·åææ¯ç¶æ */ |
| | | getTechConditionDataByApi() { |
| | | this.techConditionChart = this.$echarts.init(document.getElementById('tech_condition_chart')) |
| | | this.spinning1 = true |
| | | signageApi.getEquipmentTechnologyStatusApi() |
| | | .then(res => { |
| | | if (res.success && res.result) { |
| | | this.techConditionData = [ |
| | | { |
| | | value: res.result.length > 0 ? res.result[0].qualifiedCount : 0, |
| | | name: 'åæ ¼' |
| | | }, |
| | | { |
| | | value: res.result.length > 0 ? res.result[0].limitedUseCount : 0, |
| | | name: 'éç¨' |
| | | }, |
| | | { |
| | | value: res.result.length > 0 ? res.result[0].disabledCount : 0, |
| | | name: 'ç¦ç¨' |
| | | } |
| | | ] |
| | | this.drawTechConditionChart() |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | /* è°ç¨æ¥å£è·åæ
éæ¥ä¿® */ |
| | | getWarrantyMalfunctionDataByApi() { |
| | | this.warrantyMalfunctionChart = this.$echarts.init(document.getElementById('warranty_malfunction_chart')) |
| | | this.spinning2 = true |
| | | signageApi.getReportRepairEquipmentApi() |
| | | .then(res => { |
| | | if (res.success && res.result) { |
| | | this.warrantyMalfunctionData = [ |
| | | { |
| | | value: res.result.length > 0 ? res.result[0].noStopCount : 0, |
| | | name: 'è¿è¡' |
| | | }, |
| | | { |
| | | value: res.result.length > 0 ? res.result[0].failurTotalCount : 0, |
| | | name: 'æ¥ä¿®' |
| | | }, |
| | | { |
| | | value: res.result.length > 0 ? res.result[0].stopCount : 0, |
| | | name: 'åæº' |
| | | } |
| | | ] |
| | | this.drawWarrantyMalfunctionChart() |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | /* è°ç¨æ¥å£è·åä¸ä¿æ
åµ */ |
| | | getThirdMaintenanceConditionByApi() { |
| | | signageApi.getThirdMaintenancePlanApi() |
| | | .then(res => { |
| | | if (res.success && res.result) { |
| | | this.thirdMaintenanceParams.thisMonthMaintenancePlanNum = res.result.thisMonthCount |
| | | this.thirdMaintenanceParams.thisMonthMaintenanceRealNum = res.result.thisMonthFinishCount |
| | | this.thirdMaintenanceParams.nextMonthMaintenancePlanNum = res.result.nextMonthCount |
| | | this.thirdMaintenanceParams.maintenanceOverdueNum = res.result.thisMonthOverdueCount |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | /* è°ç¨æ¥å£è·åäºä¿æ
åµ */ |
| | | getSecondMaintenanceConditionByApi() { |
| | | signageApi.getSecondMaintenancePlanApi() |
| | | .then(res => { |
| | | if (res.success && res.result) { |
| | | this.secondMaintenanceParams.thisMonthMaintenancePlanNum = res.result.thisMonthCount |
| | | this.secondMaintenanceParams.thisMonthMaintenanceRealNum = res.result.thisMonthFinishCount |
| | | this.secondMaintenanceParams.nextMonthMaintenancePlanNum = res.result.nextMonthCount |
| | | this.secondMaintenanceParams.maintenanceOverdueNum = res.result.thisMonthOverdueCount |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | /* ç»å¶ææ¯ç¶æé¥¼å¾ */ |
| | | drawTechConditionChart() { |
| | | const option = { |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: function(params) { |
| | | 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: { |
| | | bottom: 0, |
| | | right: 'center', |
| | | itemWidth: 14, |
| | | itemHeight: 14, |
| | | itemGap: 15, |
| | | textStyle: { |
| | | color: 'inherit', |
| | | fontSize: 14 |
| | | }, |
| | | data: ['åæ ¼', 'éç¨', 'ç¦ç¨'] |
| | | }, |
| | | grid: { |
| | | containLabel: true |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | radius: ['40%', '55%'], |
| | | center: ['50%', '40%'], |
| | | color: [ |
| | | '#4DC794', |
| | | '#3DB1F6', |
| | | '#F76E6D' |
| | | ], |
| | | label: { |
| | | position: 'outside', |
| | | show: true, |
| | | color: 'inherit', |
| | | fontSize: 16, |
| | | formatter: function(params) { |
| | | if (params.name !== '') { |
| | | return `${params.name}:${params.value}` |
| | | } |
| | | } |
| | | }, |
| | | labelLine: { |
| | | show: true, |
| | | length2: 15, |
| | | length: 15, |
| | | lineStyle: { |
| | | color: 'rgba(0,0,0,.45)' |
| | | } |
| | | }, |
| | | data: this.techConditionData |
| | | } |
| | | ] |
| | | } |
| | | this.techConditionChart.setOption(option, true) |
| | | this.spinning1 = false |
| | | }, |
| | | |
| | | /* ç»å¶è®¾å¤æ¥ä¿®æ
éé¥¼å¾ */ |
| | | drawWarrantyMalfunctionChart() { |
| | | const option = { |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: function(params) { |
| | | 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: { |
| | | bottom: 0, |
| | | right: 'center', |
| | | itemWidth: 14, |
| | | itemHeight: 14, |
| | | itemGap: 15, |
| | | textStyle: { |
| | | color: 'inherit', |
| | | fontSize: 14 |
| | | }, |
| | | data: ['è¿è¡', 'æ¥ä¿®', 'åæº'] |
| | | }, |
| | | grid: { |
| | | containLabel: true |
| | | }, |
| | | series: { |
| | | type: 'pie', |
| | | radius: ['40%', '55%'], |
| | | center: ['50%', '40%'], |
| | | color: [ |
| | | '#4DC794', |
| | | '#3DB1F6', |
| | | '#F76E6D' |
| | | ], |
| | | label: { |
| | | position: 'outside', |
| | | show: true, |
| | | color: 'inherit', |
| | | fontSize: 16, |
| | | formatter: function(params) { |
| | | if (params.name !== '') { |
| | | return `${params.name}:${params.value}` |
| | | } |
| | | } |
| | | }, |
| | | labelLine: { |
| | | show: true, |
| | | length2: 15, |
| | | length: 15 |
| | | }, |
| | | data: this.warrantyMalfunctionData |
| | | } |
| | | } |
| | | this.warrantyMalfunctionChart.setOption(option, true) |
| | | this.spinning2 = false |
| | | }, |
| | | |
| | | /** |
| | | * çªå£å°ºå¯¸ååæ¶è§¦å |
| | | * è°æ´å¾è¡¨å°ºå¯¸ä»¥éåºå辨ç |
| | | */ |
| | | handleWindowResize() { |
| | | if (this.techConditionChart) this.techConditionChart.resize() |
| | | if (this.warrantyMalfunctionChart) this.warrantyMalfunctionChart.resize() |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | @container-margin: 10px; |
| | | |
| | | .outer-container { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | height: 100vh; |
| | | |
| | | .left-container { |
| | | width: 30%; |
| | | height: 100%; |
| | | margin-right: @container-margin; |
| | | |
| | | & > div:first-child { |
| | | margin-bottom: @container-margin; |
| | | } |
| | | |
| | | /deep/ .ant-card { |
| | | height: calc(100% / 2 - (@container-margin / 2)); |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | .ant-card-body { |
| | | flex: 1; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .right-container { |
| | | width: 70%; |
| | | height: 100%; |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | .right-top-container { |
| | | display: flex; |
| | | margin-bottom: @container-margin; |
| | | |
| | | /deep/ .ant-card { |
| | | flex: 1; |
| | | |
| | | &:first-child { |
| | | margin-right: @container-margin; |
| | | } |
| | | .ant-card-body { |
| | | padding: 0; |
| | | } |
| | | } |
| | | |
| | | .support-plan-container { |
| | | display: flex; |
| | | justify-content: space-around; |
| | | flex-wrap: wrap; |
| | | |
| | | .support-plan-item { |
| | | border-radius: 3px; |
| | | width: calc(100% / 2); |
| | | padding: 25px; |
| | | text-align: center; |
| | | border-left: 1px solid #e8e8e8; |
| | | border-bottom: 1px solid #e8e8e8; |
| | | |
| | | .plan-value-container { |
| | | margin-top: 5px; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | .plan-value { |
| | | margin-right: 10px; |
| | | font-size: 30px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .right-bottom-container { |
| | | flex: 1; |
| | | overflow: hidden; |
| | | display: flex; |
| | | flex-direction: column; |
| | | & ::-webkit-scrollbar { |
| | | width: 6px; /* æ»å¨æ¡å®½åº¦ */ |
| | | } |
| | | |
| | | /deep/ .ant-card-body { |
| | | padding: 6px 24px 12px; |
| | | flex: 1; |
| | | overflow: auto; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .spinning-container { |
| | | height: 100%; |
| | | /deep/ .ant-spin-container { |
| | | height: 100%; |
| | | } |
| | | } |
| | | </style> |