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.

381 lines
9.9 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<el-card class="card">
<el-scrollbar height="100%">
<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-scrollbar>
</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%;
height: 100%;
margin: 0 0%;
/* padding-bottom: 15px; */
}
</style>