Files
feature-tenant/lib/features/waring_center/presentation/bloc/warning_center_bloc.dart
2026-05-14 15:08:19 +08:00

193 lines
5.5 KiB
Dart

import 'package:flutter_bloc/flutter_bloc.dart';
import 'warning_center_event.dart';
import 'warning_center_state.dart';
class WarningCenterBloc extends Bloc<WarningCenterEvent, WarningCenterState> {
WarningCenterBloc() : super(const WarningCenterInitial()) {
on<WarningCenterLoadData>(_onLoadData);
on<WarningCenterFilterByLevel>(_onFilterByLevel);
on<WarningCenterFilterByTime>(_onFilterByTime);
on<WarningCenterSearch>(_onSearch);
}
Future<void> _onLoadData(
WarningCenterLoadData event,
Emitter<WarningCenterState> emit,
) async {
emit(const WarningCenterLoading());
try {
await Future.delayed(const Duration(milliseconds: 500));
final stats = const WarningStats(
totalCount: 156,
todayCount: 156,
severeCount: 8,
processingCount: 15,
closedCount: 133,
avgResponseTime: 2.3,
changePercent: -12,
);
final warnings = [
const WarningItem(
id: '1',
level: '严重',
deviceName: '逆变器12',
deviceType: '组串式',
content: '逆变器停机',
status: '处理中',
time: '2025-05-25 09:18:32',
duration: '2小时18分',
responsiblePerson: '张运维',
),
const WarningItem(
id: '2',
level: '重要',
deviceName: '逆变器13',
deviceType: '组串式',
content: '逆变器停机',
status: '处理中',
time: '2025-05-25 09:18:32',
duration: '2小时18分',
responsiblePerson: '张运维',
),
const WarningItem(
id: '3',
level: '严重',
deviceName: '逆变器05',
deviceType: '组串式',
content: '逆变器停机',
status: '处理中',
time: '2025-05-25 09:18:32',
duration: '2小时18分',
responsiblePerson: '张运维',
),
const WarningItem(
id: '4',
level: '一般',
deviceName: '逆变器08',
deviceType: '组串式',
content: '温度过高告警',
status: '待处理',
time: '2025-05-25 08:30:15',
duration: '3小时05分',
responsiblePerson: '李工程师',
),
const WarningItem(
id: '5',
level: '提示',
deviceName: '逆变器15',
deviceType: '组串式',
content: '效率低于阈值',
status: '已关闭',
time: '2025-05-24 16:45:20',
duration: '1天5小时',
responsiblePerson: '王技术员',
),
const WarningItem(
id: '6',
level: '严重',
deviceName: '汇流箱03',
deviceType: '直流汇流',
content: '通信中断',
status: '处理中',
time: '2025-05-25 07:20:10',
duration: '4小时15分',
responsiblePerson: '张运维',
),
const WarningItem(
id: '7',
level: '重要',
deviceName: '逆变器20',
deviceType: '组串式',
content: '输出电压异常',
status: '待处理',
time: '2025-05-25 10:05:30',
duration: '1小时30分',
responsiblePerson: '赵工程师',
),
const WarningItem(
id: '8',
level: '一般',
deviceName: '变压器02',
deviceType: '升压变压器',
content: '负载率超过80%',
status: '已关闭',
time: '2025-05-24 14:20:45',
duration: '1天10小时',
responsiblePerson: '李工程师',
),
];
emit(WarningCenterLoaded(
stats: stats,
warnings: warnings,
));
} catch (e) {
emit(WarningCenterError('加载数据失败:$e'));
}
}
Future<void> _onFilterByLevel(
WarningCenterFilterByLevel event,
Emitter<WarningCenterState> emit,
) async {
if (state is WarningCenterLoaded) {
final currentState = state as WarningCenterLoaded;
List<WarningItem> filteredWarnings;
if (event.level == '全部') {
filteredWarnings = currentState.warnings;
} else {
filteredWarnings = currentState.warnings
.where((w) => w.level == event.level)
.toList();
}
emit(currentState.copyWith(
selectedLevel: event.level,
warnings: filteredWarnings,
));
}
}
Future<void> _onFilterByTime(
WarningCenterFilterByTime event,
Emitter<WarningCenterState> emit,
) async {
if (state is WarningCenterLoaded) {
final currentState = state as WarningCenterLoaded;
emit(currentState.copyWith(
selectedTimeRange: event.timeRange,
));
}
}
Future<void> _onSearch(
WarningCenterSearch event,
Emitter<WarningCenterState> emit,
) async {
if (state is WarningCenterLoaded) {
final currentState = state as WarningCenterLoaded;
List<WarningItem> filteredWarnings;
if (event.keyword.isEmpty) {
filteredWarnings = currentState.warnings;
} else {
filteredWarnings = currentState.warnings
.where((w) =>
w.deviceName.contains(event.keyword) ||
w.content.contains(event.keyword) ||
w.deviceType.contains(event.keyword))
.toList();
}
emit(currentState.copyWith(
searchKeyword: event.keyword,
warnings: filteredWarnings,
));
}
}
}