change(首页index): 添加异常规则和异常数据数量展示

- 在首页仪表盘添加异常规则和异常数据数量卡片
- 实现异常规则和异常数据总数的接口和数据获取
- 优化统计卡片样式,增加异常规则和异常数据的特定样式
- 调整设备卡片样式,优化布局和字体大小
boardTest
zch 1 month ago
parent deecbb90a4
commit a0e04c4014

@ -50,3 +50,11 @@ export function handleExceptions(objId) {
method: 'post' method: 'post'
}) })
} }
// 查询异常数据记录列表
export function getAlarmDataTotalCount() {
return request({
url: '/ems/record/recordAlarmData/getAlarmDataTotalCount',
method: 'get',
})
}

@ -42,3 +42,11 @@ export function delRecordAlarmRule(objId) {
method: 'delete' method: 'delete'
}) })
} }
// 查询异常告警规则详细
export function getEmsRecordAlarmRuleTotalCount() {
return request({
url: '/ems/record/recordAlarmRule/getEmsRecordAlarmRuleTotalCount' ,
method: 'get'
})
}

@ -18,6 +18,26 @@
<div class="stat-label">设备总数</div> <div class="stat-label">设备总数</div>
</div> </div>
</div> </div>
<div class="stat-card alarm-rule">
<div class="stat-icon">
<i class="el-icon-warning"></i>
</div>
<div class="stat-content">
<div class="stat-number">{{ alarmRuleTotalCount }}</div>
<div class="stat-label">异常规则数量</div>
</div>
</div>
<div class="stat-card alarm-data">
<div class="stat-icon">
<i class="el-icon-bell"></i>
</div>
<div class="stat-content">
<div class="stat-number">{{ alarmDataTotalCount }}</div>
<div class="stat-label">异常数据数量</div>
</div>
</div>
</div> </div>
</div> </div>
@ -135,6 +155,8 @@
<script> <script>
import { getLatestRecords } from '@/api/ems/record/recordIotenvInstant' import { getLatestRecords } from '@/api/ems/record/recordIotenvInstant'
import {getAlarmDataTotalCount} from "@/api/ems/record/recordAlarmData";
import {getEmsRecordAlarmRuleTotalCount} from "@/api/ems/record/recordAlarmRule";
export default { export default {
name: 'Dashboard', name: 'Dashboard',
@ -142,7 +164,9 @@ export default {
return { return {
loading: false, loading: false,
deviceList: [], deviceList: [],
refreshTimer: null refreshTimer: null,
alarmRuleTotalCount:0,
alarmDataTotalCount:0
} }
}, },
computed: { computed: {
@ -166,6 +190,8 @@ export default {
async loadDeviceData() { async loadDeviceData() {
this.loading = true this.loading = true
try { try {
this.alarmDataTotalCount = await getAlarmDataTotalCount();
this.alarmRuleTotalCount = await getEmsRecordAlarmRuleTotalCount();
const response = await getLatestRecords() const response = await getLatestRecords()
if (response.code === 200) { if (response.code === 200) {
// //
@ -267,7 +293,8 @@ export default {
console.error('时间格式化失败:', error) console.error('时间格式化失败:', error)
return '--' return '--'
} }
} },
} }
} }
</script> </script>
@ -303,17 +330,18 @@ export default {
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 20px; gap: 20px;
flex-wrap: wrap;
} }
.stat-card { .stat-card {
background: white; background: white;
border-radius: 12px; border-radius: 12px;
padding: 24px; padding: 20px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
display: flex; display: flex;
align-items: center; align-items: center;
transition: transform 0.3s ease, box-shadow 0.3s ease; transition: transform 0.3s ease, box-shadow 0.3s ease;
min-width: 250px; min-width: 220px;
&:hover { &:hover {
transform: translateY(-2px); transform: translateY(-2px);
@ -321,16 +349,16 @@ export default {
} }
.stat-icon { .stat-icon {
width: 60px; width: 50px;
height: 60px; height: 50px;
border-radius: 12px; border-radius: 10px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-right: 16px; margin-right: 14px;
i { i {
font-size: 24px; font-size: 20px;
color: white; color: white;
} }
} }
@ -339,7 +367,7 @@ export default {
flex: 1; flex: 1;
.stat-number { .stat-number {
font-size: 32px; font-size: 28px;
font-weight: 700; font-weight: 700;
line-height: 1; line-height: 1;
margin-bottom: 4px; margin-bottom: 4px;
@ -359,6 +387,24 @@ export default {
color: #409eff; color: #409eff;
} }
} }
&.alarm-rule {
.stat-icon {
background: linear-gradient(135deg, #e6a23c, #f0c040);
}
.stat-number {
color: #e6a23c;
}
}
&.alarm-data {
.stat-icon {
background: linear-gradient(135deg, #f56c6c, #ff8080);
}
.stat-number {
color: #f56c6c;
}
}
} }
} }
@ -379,17 +425,18 @@ export default {
.device-grid { .device-grid {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
gap: 20px; gap: 10px;
} }
.device-card { .device-card {
background: white; background: white;
border-radius: 12px; border-radius: 10px;
padding: 20px; padding: 10px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease; transition: all 0.3s ease;
border-left: 4px solid #e9ecef; border-left: 4px solid #e9ecef;
font-size: 0.92em;
&:hover { &:hover {
transform: translateY(-2px); transform: translateY(-2px);
@ -475,7 +522,7 @@ export default {
.device-data { .device-data {
.data-row { .data-row {
margin-bottom: 12px; margin-bottom: 8px;
&:last-child { &:last-child {
margin-bottom: 0; margin-bottom: 0;
@ -485,7 +532,7 @@ export default {
.data-item { .data-item {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 8px 0; padding: 6px 0;
.data-icon { .data-icon {
width: 20px; width: 20px;
@ -520,12 +567,12 @@ export default {
} }
.device-footer { .device-footer {
margin-top: 16px; margin-top: 8px;
padding-top: 16px; padding-top: 8px;
border-top: 1px solid #f0f0f0; border-top: 1px solid #f0f0f0;
.update-time { .update-time {
font-size: 12px; font-size: 11px;
color: #7f8c8d; color: #7f8c8d;
i { i {

Loading…
Cancel
Save