You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

376 lines
9.5 KiB
Vue

3 weeks ago
<template>
<el-card class="card">
<h2 class="cardHead">运行信息</h2>
<div class="cardBody" v-if="globalOverviewBool">
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 设备状态 </el-col>
<el-col :span="4">
<el-tag type="primary">正常/中断</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 温度 </el-col>
<el-col :span="4">
<el-tag type="primary">23</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 湿度 </el-col>
<el-col :span="4">
<el-tag type="primary">45%RH</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 风力 </el-col>
<el-col :span="4">
<el-tag type="primary">三级5m/s</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 风向 </el-col>
<el-col :span="4">
<el-tag type="primary">东风</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 雨量 </el-col>
<el-col :span="4">
<el-tag type="primary">20mm</el-tag>
</el-col>
</el-row>
</div>
<div class="cardBody" v-if="fireExtinguishingBool">
<el-row style="display: flex; align-items: center">
<el-col :span="24">火灾报警系统</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="1"
>设备状态
<el-tag type="primary">正常/故障</el-tag>
</el-col>
<el-col :span="8" :offset="2"
>通信状态
<el-tag type="primary">正常/中断</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="22" :offset="1"
>火灾总告警
<!-- 带边框的蓝色圆 -->
<div class="blue-circle redBordered"></div>
</el-col>
</el-row>
<el-divider style="margin-top: 10px; margin-bottom: 10px" />
<el-row style="display: flex; align-items: center">
<el-col :span="24">2号主变灭火系统排油注氮灭火</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="7" :offset="1">
启动方式
<el-tag type="primary">自动/手动</el-tag>
</el-col>
<el-col :span="7" :offset="1"
>设备状态
<el-tag type="primary">正常/故障</el-tag>
</el-col>
<el-col :span="7" :offset="1"
>通信状态
<el-tag type="primary">正常/中断</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="7" :offset="1"
>火灾总告警
<div class="blue-circle redBordered"></div>
</el-col>
<el-col :span="7" :offset="1">
<el-popover placement="top" :width="170" trigger="hover" content="查看灭火允许满足条件">
<template #reference>
<el-text class="mx-1" type="primary">灭火允许</el-text>
</template>
</el-popover>
<!-- 带边框的蓝色圆 -->
<div class="blue-circle greenBordered"></div>
</el-col>
<el-col :span="7" :offset="1" style="display: flex; align-items: center">
<el-text class="mx-1" type="primary" @click="dialogTableVisible = true">灭火动作</el-text>
<!-- 带边框的蓝色圆 -->
<div class="blue-circle redBordered"></div>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center; margin-top: 8px">
<el-col :span="5" :offset="1">灭火手动操作</el-col>
<el-col :span="12">
<el-button type="primary" size="small">手动启动</el-button>
<el-button type="primary" size="small">紧急停止</el-button>
</el-col>
</el-row>
</div>
<div class="cardBody" v-if="firePoliceBool">
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 设备状态 </el-col>
<el-col :span="4">
<el-tag type="primary">正常/故障</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 通信状态 </el-col>
<el-col :span="4">
<el-tag type="primary">正常/中断</el-tag>
</el-col>
</el-row>
<el-row :gutter="0" style="display: flex; align-items: center">
<el-col :span="8" :offset="4"> 电源状态</el-col>
<el-col :span="4">
<!-- 主供电源工作/备供电源工作/电源中断 -->
<el-tag type="primary">主供电源工作</el-tag>
</el-col>
</el-row>
</div>
</el-card>
<!-- :append-to-body="true" -->
<el-dialog
v-model="dialogTableVisible"
title="灭火动作流程"
style="height: 60vh"
width="45%"
:append-to-body="true"
>
<el-scrollbar height="42vh">
<el-timeline mode="alternate-reverse">
<el-timeline-item
v-for="(activity, index) in activities"
:key="index"
center
:timestamp="activity.timestamp"
>
{{ activity.content }}
</el-timeline-item>
</el-timeline>
</el-scrollbar>
<!-- 按钮 -->
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogTableVisible = false">退出</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { computed, ref, watch, onMounted } from 'vue';
let dialogTableVisible = ref(false);
const props = defineProps({
fontFamily: {
type: String,
default: 'Segoe UI'
},
fontSize: {
type: Number,
default: 14
},
testColor: {
type: String,
default: '#000000'
},
testBool: {
type: Boolean,
default: true
},
dataSource: {
type: String,
default: '--'
}
});
const activities = [
{
content: '灭火允许',
timestamp: '2018-04-15'
},
{
content: '手动启动',
timestamp: '2018-04-16'
},
{
content: '紧急停止',
timestamp: '2018-04-17'
},
{
content: '手动启动',
timestamp: '2018-04-18'
},
{
content: '灭火允许',
timestamp: '2018-04-15'
},
{
content: '手动启动',
timestamp: '2018-04-16'
},
{
content: '紧急停止',
timestamp: '2018-04-17'
},
{
content: '手动启动',
timestamp: '2018-04-18'
}
];
onMounted(() => {
loadDataSource(props.dataSource);
});
watch(
() => props.dataSource,
(newVal, oldVal) => {
loadDataSource(newVal);
}
);
//全站总揽
let globalOverviewBool = ref(false);
//消防系统
let fireExtinguishingBool = ref(false);
//火灾报警主机
let firePoliceBool = ref(false);
function loadDataSource(val: string) {
if (val === 'globalOverview') {
globalOverviewBool.value = true;
fireExtinguishingBool.value = false;
firePoliceBool.value = false;
} else if (val === 'fireExtinguishing') {
globalOverviewBool.value = false;
fireExtinguishingBool.value = true;
firePoliceBool.value = false;
} else if (val === 'firePolice') {
globalOverviewBool.value = false;
fireExtinguishingBool.value = false;
firePoliceBool.value = true;
}
}
let computedSize = computed({
// 读取
get() {
return props.fontSize + 'px';
}, // 修改
set(val) {
console.log('有人修改了fullName', val);
}
});
</script>
<style scoped>
.blue-circle {
width: 12px;
height: 12px;
border-radius: 50%;
background-color: #409eff;
display: inline-block;
margin-left: 5px;
vertical-align: middle;
}
.blueBordered {
background-color: rgb(217, 236, 255);
border: 2px solid rgb(160, 207, 255);
}
.redBordered {
background-color: rgb(253, 226, 226);
border: 2px solid rgb(250, 182, 182);
}
.greenBordered {
background-color: rgb(225, 243, 216);
border: 2px solid rgb(179, 225, 157);
}
:deep(.el-card__body) {
padding: 0;
padding-top: 10px;
padding-left: 10px;
}
:deep(.adTextDetailDialogClass .el-dialog__body) {
max-height: calc(100vh - 150px);
overflow: auto;
border-top: 1px solid #dfdfdf;
border-bottom: 1px solid #dfdfdf;
}
:deep(.adTextDetailDialogClass .el-dialog) {
position: fixed;
height: 20vh !important;
background: #000;
left: 0 !important;
right: 0 !important;
top: 0 !important;
bottom: 0 !important;
margin: auto !important;
}
.el-row .el-col {
margin-bottom: 10px; /* 设置上下间距 */
}
P {
margin: 2px 0px;
padding: 0 15%;
transition: background-color 0.3s ease;
}
P:hover {
background-color: #f0f0f0; /* 悬停时的底色,您可以根据需要调整颜色 */
}
.card {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
/* max-width: 480px; */
color: v-bind('props.testColor');
font-family: v-bind('props.fontFamily');
/* font-family: 'Segoe UI'; */
font-size: v-bind('computedSize');
}
.cardHead {
margin: 0;
padding: 0px;
padding-bottom: 5px;
text-align: center;
}
.cardBody {
width: 100%;
margin: 0 0%;
padding: 0px 0%;
/* padding-bottom: 15px; */
}
</style>