- 新增获取首页大屏数据的API接口 - 在安全监控页面添加数据获取逻辑并传递给子组件 - 更新设备状态组件显示实时在线/离线数据 - 优化视频监控组件播放器初始化和销毁逻辑 - 调整API接口路径和参数格式 - 移除无用代码和注释
156 lines
4.8 KiB
Vue
156 lines
4.8 KiB
Vue
<template>
|
||
<el-card style="border-radius: 15px;">
|
||
<el-row gutter="35">
|
||
<el-col :span="8" class="status-card">
|
||
<div class="title">设备状态</div>
|
||
<!-- gutter设置为20,创建左右间隙 -->
|
||
<el-row gutter="20" style="width: 100%;">
|
||
<!-- 一行2个,每个占12格(24/2=12) -->
|
||
<el-col :span="12">
|
||
<div class="item">
|
||
<div class="status">在线</div>
|
||
<div class="count" style="color: rgba(0, 184, 122, 1);">{{ data?.sumOnLine || 0 }}</div>
|
||
</div>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<div class="item">
|
||
<div class="status">离线</div>
|
||
<div class="count" style="color: rgba(102, 102, 102, 1);">{{ data?.sumOffLine || 0 }}</div>
|
||
</div>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<div class="item">
|
||
<div class="status">网络延迟</div>
|
||
<div class="count" style="color: rgba(255, 208, 35, 1);">8</div>
|
||
</div>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<div class="item">
|
||
<div class="status">故障</div>
|
||
<div class="count" style="color: rgba(227, 39, 39, 1);">1</div>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
</el-col>
|
||
<el-col :span="16" class="alarm-card">
|
||
<div class="title">最近报警</div>
|
||
<el-row class="list">
|
||
<el-col>
|
||
<div class="item red">
|
||
<div class="sub-title">
|
||
异常移动检测
|
||
</div>
|
||
<div class="content">
|
||
A区b栋102 | 今天08:23
|
||
</div>
|
||
</div>
|
||
</el-col>
|
||
<el-col>
|
||
<div class="item yellow">
|
||
<div class="sub-title">
|
||
设备连接不稳定
|
||
</div>
|
||
<div class="content">
|
||
A区b栋102 | 今天08:23
|
||
</div>
|
||
</div>
|
||
</el-col>
|
||
<el-col>
|
||
<div class="item red">
|
||
<div class="sub-title">
|
||
异常移动检测
|
||
</div>
|
||
<div class="content">
|
||
A区b栋102 | 今天08:23
|
||
</div>
|
||
</div>
|
||
</el-col>
|
||
</el-row>
|
||
</el-col>
|
||
</el-row>
|
||
</el-card>
|
||
</template>
|
||
<style scoped>
|
||
.title {
|
||
font-family: "Alibaba-PuHuiTi-Bold";
|
||
font-size: 20px;
|
||
font-weight: 400;
|
||
letter-spacing: 0px;
|
||
line-height: 24px;
|
||
color: rgb(0, 30, 59);
|
||
text-align: left;
|
||
vertical-align: top;
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
.status-card {
|
||
|
||
.item {
|
||
background: rgba(245, 245, 245, 0.2);
|
||
border: 1px solid rgba(230, 233, 238, 1);
|
||
margin-bottom: 20px;
|
||
border-radius: 15px;
|
||
padding: 15px 30px;
|
||
text-align: center;
|
||
|
||
.status {
|
||
color: rgba(175, 175, 175, 1);
|
||
font-size: 20px;
|
||
margin-bottom: 10px;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.count {
|
||
font-size: 18px;
|
||
font-weight: bold;
|
||
text-align: center;
|
||
}
|
||
}
|
||
}
|
||
|
||
.alarm-card {
|
||
.item {
|
||
border: 1px solid #E6E9EE;
|
||
border-radius: 10px;
|
||
padding: 10px;
|
||
margin-bottom: 10px;
|
||
position: relative;
|
||
padding-left: 20px;
|
||
text-align: left;
|
||
}
|
||
|
||
.red {
|
||
::v-deep::before {
|
||
position: absolute;
|
||
content: '';
|
||
background-color: rgba(227, 39, 39, 1);
|
||
height: 100%;
|
||
width: 7px;
|
||
border-radius: 7px 0px 0px 7px;
|
||
top: 0;
|
||
left: 1px;
|
||
}
|
||
}
|
||
|
||
.yellow {
|
||
::v-deep::before {
|
||
position: absolute;
|
||
content: '';
|
||
background-color: rgba(255, 208, 35, 1);
|
||
height: 100%;
|
||
width: 7px;
|
||
border-radius: 7px 0px 0px 7px;
|
||
top: 0;
|
||
left: 1px;
|
||
}
|
||
}
|
||
}
|
||
</style>
|
||
<script setup>
|
||
const props = defineProps({
|
||
data: {
|
||
type: Object,
|
||
default: () => ({})
|
||
}
|
||
})
|
||
</script> |