增加摄像头中控台项目
This commit is contained in:
94
SHH.CameraDashboard/App/WizardControl.xaml.cs
Normal file
94
SHH.CameraDashboard/App/WizardControl.xaml.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
using SHH.CameraDashboard.Services;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace SHH.CameraDashboard
|
||||
{
|
||||
public partial class WizardControl : UserControl
|
||||
{
|
||||
private const string ServerConfigFile = "servers.config.json";
|
||||
|
||||
// 绑定源
|
||||
public ObservableCollection<ServerNode> Nodes { get; set; } = new ObservableCollection<ServerNode>();
|
||||
|
||||
// 定义关闭事件,通知主窗体关闭模态框
|
||||
public event EventHandler RequestClose;
|
||||
|
||||
public WizardControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// 使用泛型加载,指定返回类型为 ObservableCollection<ServerNode>
|
||||
// 这里的 LoadServers 逻辑变为了通用的 Load<T>
|
||||
Nodes = StorageService.Load<ObservableCollection<ServerNode>>(ServerConfigFile);
|
||||
|
||||
NodeList.ItemsSource = Nodes;
|
||||
}
|
||||
|
||||
private void AddNode_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Nodes.Add(new ServerNode());
|
||||
}
|
||||
|
||||
private void DeleteNode_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is Button btn && btn.DataContext is ServerNode node)
|
||||
{
|
||||
Nodes.Remove(node);
|
||||
}
|
||||
}
|
||||
|
||||
private async void Check_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 禁用按钮防止重复点击
|
||||
var btn = sender as Button;
|
||||
if (btn != null) btn.IsEnabled = false;
|
||||
|
||||
foreach (var node in Nodes)
|
||||
{
|
||||
node.SetResult(false, "⏳ 检测中...");
|
||||
|
||||
// 构造 URL
|
||||
string url = $"http://{node.Ip}:{node.Port}/api/Cameras";
|
||||
// 或者是 /api/health,看你的后端提供什么接口
|
||||
|
||||
try
|
||||
{
|
||||
// 【修改】这里调用封装好的 HttpService
|
||||
// 我们使用 TestConnectionAsync,它内部会触发 OnApiLog 事件记录日志
|
||||
bool isConnected = await HttpService.TestConnectionAsync(url);
|
||||
|
||||
if (isConnected)
|
||||
node.SetResult(true, "✅ 连接成功");
|
||||
else
|
||||
node.SetResult(false, "❌ 状态码异常");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 异常也被 HttpService 记录了,这里只负责更新 UI 状态
|
||||
node.SetResult(false, "❌ 无法连接");
|
||||
}
|
||||
}
|
||||
|
||||
if (btn != null) btn.IsEnabled = true;
|
||||
}
|
||||
|
||||
private void Apply_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// 将当前的 Nodes 集合保存到指定文件
|
||||
StorageService.Save(Nodes, ServerConfigFile);
|
||||
|
||||
// 同步到全局单例内存中
|
||||
AppGlobalData.SaveConfig(Nodes);
|
||||
|
||||
RequestClose?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void Cancel_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
RequestClose?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user