DCS/ruiyiweiUX/Assets/Scripts/Views/AlarmRecordPanel.cs

148 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 报警记录面板
/// 显示系统报警历史记录,支持滚动查看
/// </summary>
public class AlarmRecordPanel : BasePanel
{
[Header("滚动列表")]
public ScrollableListView AlarmListView; // 新的滚动列表组件
// public RectTransform ContentRoot; // 保留兼容性
// public GameObject RecordItemTemplate; // 预制体包含Index, Priority, Reason, Time四个TMP文本
[Header("操作按钮")]
public Button HomeButton;
public Button BackButton;
public Button RefreshButton; // 刷新按钮
public Button ClearButton; // 清空记录按钮
[Header("状态显示")]
public TextMeshProUGUI StatusText; // 状态文本
public TextMeshProUGUI RecordCountText; // 记录数量文本
public override void Init()
{
InitializeUI();
Populate();
}
private void InitializeUI()
{
if (HomeButton != null)
HomeButton.onClick.AddListener(() =>
{
ReturnToHome();
});
if (BackButton != null)
BackButton.onClick.AddListener(() => ClosePanel());
if (RefreshButton != null)
RefreshButton.onClick.AddListener(OnRefreshClicked);
if (ClearButton != null)
ClearButton.onClick.AddListener(OnClearClicked);
SetStatus("正在加载报警记录...", true);
}
private void SetStatus(string message, bool isSuccess)
{
if (StatusText != null)
{
StatusText.text = message;
StatusText.color = isSuccess ? Color.green : Color.red;
}
}
private void UpdateRecordCount(int count)
{
if (RecordCountText != null)
{
RecordCountText.text = $"共 {count} 条记录";
}
}
private void OnRefreshClicked()
{
Populate();
SetStatus("记录已刷新", true);
}
private void OnClearClicked()
{
// 显示确认对话框
ConfirmDialog.ShowDeleteConfirm(
"所有报警记录",
() => ClearAllRecords(),
() => Debug.Log("取消清空记录")
);
}
private void ClearAllRecords()
{
// 优先使用DCSAlarmManager清空记录
if (DCSAlarmManager.Instance != null)
{
DCSAlarmManager.Instance.ClearAlarmRecords();
}
// 清空UI显示
if (AlarmListView != null)
{
AlarmListView.ClearItems();
}
UpdateRecordCount(0);
SetStatus("记录已清空", true);
}
private void Populate()
{
var list = DCSAlarmManager.Instance.GetAlarmRecords(1000);
if (list == null)
{
SetStatus("无报警记录", false);
UpdateRecordCount(0);
return;
}
// 优先使用新的ScrollableListView
if (AlarmListView != null)
{
PopulateWithScrollableList(list);
}
UpdateRecordCount(list.Count);
SetStatus($"成功加载 {list.Count} 条记录", true);
}
private void PopulateWithScrollableList(IReadOnlyList<AlarmEvent> records)
{
AlarmListView.ClearItems();
for (int i = 0; i < records.Count; i++)
{
var evt = records[i];
var listItem = AlarmListView.AddItem(evt);
if (listItem != null)
{
var alarmItem = listItem.gameObject.GetComponent<AlarmRecordItem>();
alarmItem.Initialize(evt, i + 1);
}
}
// 滚动到底部显示最新记录
AlarmListView.ScrollToBottom();
}
}