修复告警中心4个Bug:时间显示0001-01-01、统计卡片全0、新增告警类型无标签、机床下拉为空

1. AlertRepository SQL缺少列别名致Dapper无法映射created_at→CreatedAt
2. AlertStatisticsResponse返回嵌套unresolvedByType,前端期望扁平collectFail等
3. AlertPage缺少production_error/summary_error的中文标签映射
4. 机床下拉模板用m.id/m.name,API返回value/label格式不匹配
main
haoliang 1 month ago
parent 4d5cdeafe8
commit 689f0b1798

@ -18,6 +18,8 @@
<el-option label="产量异常" value="production_anomaly" /> <el-option label="产量异常" value="production_anomaly" />
<el-option label="未知设备" value="unknown_device" /> <el-option label="未知设备" value="unknown_device" />
<el-option label="服务错误" value="service_error" /> <el-option label="服务错误" value="service_error" />
<el-option label="产量跟踪异常" value="production_error" />
<el-option label="日终汇总异常" value="summary_error" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="处理状态"> <el-form-item label="处理状态">
@ -31,7 +33,7 @@
</el-form-item> </el-form-item>
<el-form-item label="机床"> <el-form-item label="机床">
<el-select v-model="query.machineId" filterable clearable placeholder="全部"> <el-select v-model="query.machineId" filterable clearable placeholder="全部">
<el-option v-for="m in machineList" :key="m.id" :label="m.name" :value="m.id" /> <el-option v-for="m in machineList" :key="(m as any).value ?? m.id" :label="(m as any).label ?? m.name" :value="(m as any).value ?? m.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -146,6 +148,8 @@ function alertTypeTag(type: string): string {
production_anomaly: 'warning', production_anomaly: 'warning',
unknown_device: 'info', unknown_device: 'info',
service_error: 'danger', service_error: 'danger',
production_error: 'danger',
summary_error: 'danger',
} }
return map[type] || 'info' return map[type] || 'info'
} }
@ -157,6 +161,8 @@ function alertTypeLabel(type: string): string {
production_anomaly: '产量异常', production_anomaly: '产量异常',
unknown_device: '未知设备', unknown_device: '未知设备',
service_error: '服务错误', service_error: '服务错误',
production_error: '产量跟踪异常',
summary_error: '日终汇总异常',
} }
return map[type] || type return map[type] || type
} }

@ -7,10 +7,27 @@ namespace CncModels.Dto.Alert
/// </summary> /// </summary>
public class AlertStatisticsResponse public class AlertStatisticsResponse
{ {
/// <summary>未处理告警总数</summary> /// <summary>未处理告警总数(前端用 unresolved</summary>
public int UnresolvedCount { get; set; } public int UnresolvedCount { get; set; }
/// <summary>按告警类型统计的未处理数量</summary> /// <summary>按告警类型统计的未处理数量</summary>
public Dictionary<string, int> UnresolvedByType { get; set; } = new Dictionary<string, int>(); public Dictionary<string, int> UnresolvedByType { get; set; } = new Dictionary<string, int>();
// 以下为前端 AlertStats 接口需要的扁平字段
/// <summary>未处理总数(前端字段名 unresolved</summary>
public int Unresolved => UnresolvedCount;
/// <summary>采集失败未处理数</summary>
public int CollectFail => UnresolvedByType.TryGetValue("collect_fail", out var v) ? v : 0;
/// <summary>设备离线未处理数</summary>
public int DeviceOffline => UnresolvedByType.TryGetValue("device_offline", out var v) ? v : 0;
/// <summary>产量异常未处理数</summary>
public int ProductionAnomaly => UnresolvedByType.TryGetValue("production_anomaly", out var v) ? v : 0;
/// <summary>未知设备未处理数</summary>
public int UnknownDevice => UnresolvedByType.TryGetValue("unknown_device", out var v) ? v : 0;
} }
} }

@ -30,7 +30,7 @@ namespace CncRepository.Impl
{ {
using (var conn = CreateConnection()) using (var conn = CreateConnection())
{ {
string sql = @"SELECT a.id, a.created_at, a.alert_type, a.title, m.name AS MachineName, a.detail, a.is_resolved, a.resolved_at string sql = @"SELECT a.id AS Id, a.created_at AS CreatedAt, a.alert_type AS AlertType, a.title AS Title, m.name AS MachineName, a.detail AS Detail, a.is_resolved AS IsResolved, a.resolved_at AS ResolvedAt
FROM cnc_alert a LEFT JOIN cnc_machine m ON a.machine_id = m.id FROM cnc_alert a LEFT JOIN cnc_machine m ON a.machine_id = m.id
WHERE 1=1"; WHERE 1=1";
string countSql = @"SELECT COUNT(*) FROM cnc_alert a LEFT JOIN cnc_machine m ON a.machine_id = m.id WHERE 1=1"; string countSql = @"SELECT COUNT(*) FROM cnc_alert a LEFT JOIN cnc_machine m ON a.machine_id = m.id WHERE 1=1";

Loading…
Cancel
Save