zhanhui_pad/src/views/screen/components/lcenter2.vue
2025-04-14 17:10:30 +08:00

385 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="lc-container">
<div class="left-panel box-bg-color">
<div class="title">{{ tLang('message', 'OEE综合设备效率') }}</div>
<div class="content">
<div class="oee-chart">
<v-chart :option="oeeOption" theme="dark" style="width: 100%;height: 100%;" />
</div>
<div class="progress">
<div class="progress-item">
<div class="progress-title">
<span>{{ tLang('message', '可用率') }}</span>
<span class="progress-value">{{ 70 }}%</span>
</div>
<div class="progress-bar">
<el-progress :percentage="70" status="warning" :stroke-width="16" :show-text="false" />
</div>
<div class="progress-desc">
<span>计划停机{{ '45分钟' }}</span>
<span>故障停机{{ '1小时' }}</span>
</div>
</div>
<div class="progress-item">
<div class="progress-title">
<span>{{ tLang('message', '性能率') }}</span>
<span class="progress-value">{{ 70 }}%</span>
</div>
<div class="progress-bar">
<el-progress :percentage="70" status="success" :stroke-width="16" :show-text="false" />
</div>
<div class="progress-desc">
<span>计划停机{{ '45分钟' }}</span>
<span>故障停机{{ '1小时' }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="right-panel box-bg-color">
<div class="right-title">
<span class="text1">{{ tLang('message', '实时报警') }}<el-badge :show-zero="false" :value="1"
class="item"><el-icon :size="20">
<BellFilled />
</el-icon></el-badge></span>
<span class="text2">{{ tLang('message', '全部清除') }}</span>
</div>
<div class="right-content">
<div class="card-item">
<div class="message-mine">
<div class="message-title">主轴旋转异常请检查机械部件</div>
<div class="message-desc">
<span>{{ tLang('message', '设备ID') }}: </span>
<span>SWM5015</span>
<span>2025-04-16 13:20:18</span>
</div>
</div>
<div class="option">
<el-button color="#DC2626" size="small">{{ tLang('message', '处理') }}</el-button>
<el-button color="#e7e7e7" size="small">{{ tLang('message', '忽略') }}</el-button>
</div>
</div>
<div class="error-chart">
<v-chart :option="options" theme="dark" style="width: 100%;height: 100%;" />
</div>
</div>
</div>
</div>
</template>
<script setup>
const { proxy } = getCurrentInstance();
let options = computed(() => {
return {
title: {
text: proxy.tLang('message', '异常停机分类统计'),
textStyle: {
fontSize: 12,
}
},
tooltip: {
trigger: 'item'
},
legend: {
top: '15%',
orient: 'vertical',
left: 'left'
},
backgroundColor: 'transparent',
series: [
{
name: '',
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
padAngle: 5,
itemStyle: {
borderRadius: 10
},
label: {
show: false,
position: 'center'
},
// emphasis: {
// label: {
// show: true,
// fontSize: 40,
// fontWeight: 'bold'
// }
// },
labelLine: {
show: false
},
data: [
{ value: 1048, name: proxy.tLang('home', '维修') },
{ value: 735, name: proxy.tLang('pms', '保养') },
{ value: 580, name: proxy.tLang('message', '故障') },
]
}
]
}
})
let oeeOption = computed(() => {
return {
backgroundColor: 'transparent',
series: [
{
type: 'gauge',
startAngle: 180,
endAngle: 0,
center: ['50%', '75%'],
radius: '90%',
min: 0,
max: 1,
axisLine: {
lineStyle: {
width: 2,
color: [
[0.25, '#FF6E76'],
[0.5, '#FDDD60'],
[0.75, '#58D9F9'],
[1, '#7CFFB2']
]
}
},
pointer: {
icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
length: '12%',
width: 10,
offsetCenter: [0, '-60%'],
itemStyle: {
color: 'auto'
}
},
axisTick: {
length: 5,
distance: 3,
lineStyle: {
color: 'auto',
width: 1
}
},
splitLine: {
length: 10,
distance: 3,
},
axisLabel: {
color: '#f7f7f7',
distance: 3,
fontSize: 12,
formatter: function (value) {
return value * 100;
}
},
title: {
offsetCenter: [0, '-10%'],
fontSize: 12
},
detail: {
fontSize: 14,
offsetCenter: [0, '-35%'],
valueAnimation: true,
formatter: function (value) {
return Math.round(value * 100) + '%';
},
color: 'inherit'
},
data: [
{
value: 0.7,
name: 'OEE'
}
]
}
]
}
})
</script>
<style lang="scss" scoped>
.box-bg-color {
background-color: #192124;
border-radius: 5px;
padding: 5px;
box-sizing: border-box;
overflow: hidden;
}
.title {
width: 100%;
height: 20px;
line-height: 20px;
font-size: 14px;
color: #cfcfcf;
}
.content {
width: 100%;
height: calc(100% - 20px);
display: flex;
justify-content: center;
align-items: center;
}
.lc-container {
width: 100%;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
.left-panel {
width: 49%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.oee-chart {
width: 50%;
height: 100%;
}
.progress {
width: 50%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.progress-item {
height: 80px;
width: 100%;
padding: 5px;
box-sizing: border-box;
background-color: #1F2937;
border-radius: 5px;
margin: 10px 0;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: flex-start;
.progress-title {
font-size: 14px;
color: #999898;
}
.progress-bar {
width: 100%;
}
.progress-desc {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 10px;
color: #999898;
}
}
}
}
.right-panel {
width: 49%;
height: 100%;
.right-title {
width: 100%;
height: 40px;
display: flex;
justify-content: space-between;
align-items: center;
span {
font-size: 14px;
color: #fff;
margin: 0 20px;
}
.text1 {
font-size: 18px;
display: flex;
justify-content: flex-start;
align-items: center;
}
.text2 {
font-size: 12px;
color: #cfcfcf;
margin-right: 25px;
cursor: pointer;
}
}
.right-content {
width: 100%;
height: calc(100% - 40px);
display: flex;
flex-direction: column;
justify-content: space-between;
overflow: hidden;
.card-item {
width: 100%;
height: 50px;
box-sizing: border-box;
border-left: #DC2626 4px solid;
background-color: #2D2023;
display: flex;
justify-content: space-between;
align-items: center;
.message-mine {
width: 60%;
height: 100%;
padding-left: 20px;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: flex-start;
.message-title {
font-size: 14px;
color: #fff;
}
.message-desc {
font-size: 10px;
color: #999898;
span {
margin-right: 15px;
}
}
}
.option {
width: 40%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
}
.error-chart {
width: 100%;
height: calc(100% - 50px);
}
}
}
}
</style>