From e0faf446ddf1b0ba79e207293c0227fdc3cc193e Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期二, 04 三月 2025 13:58:35 +0800
Subject: [PATCH] art: 所有设备 台账 合并 保养标准菜单,增加 有无点检标准,有无二保标准,有无三保标准
---
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>-->
- <!--<!–<dv-decoration-11 class="workshop-nav" v-for="item in workshopList">–>-->
- <!--<!–{{item.workshopName}}–>-->
- <!--<!–</dv-decoration-11>–>-->
- <!--</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