Files
qhmes/yy-admin-master/YY.Admin/Views/LoginWindow.xaml.cs

125 lines
4.3 KiB
C#
Raw Normal View History

using Npgsql.Replication.PgOutput.Messages;
using System.Windows;
using System.Windows.Input;
using YY.Admin.Core.FluentValidation;
using YY.Admin.Services.Service.AutoUpdate;
using YY.Admin.ViewModels;
using Window = HandyControl.Controls.Window;
namespace YY.Admin.Views
{
/// <summary>
/// LoginWindow.xaml 的交互逻辑
/// </summary>
public partial class LoginWindow : Window
{
private readonly IAutoUpdateService _autoUpdateService;
public LoginWindow(IAutoUpdateService autoUpdateService)
{
InitializeComponent();
_autoUpdateService = autoUpdateService;
// 窗口加载完成后检查更新
Loaded += async (s, e) => await CheckForUpdatesAsync();
// 当 DataContext 设置后附加验证
DataContextChanged += OnDataContextChanged;
}
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue != null)
{
// 附加验证到 UI 控件
FluentValidationHelper.Attach(LoginForm, typeof(LoginWindowViewModel));
}
}
private async Task CheckForUpdatesAsync()
{
try
{
// 延迟一点时间确保UI已经加载完成
await Task.Delay(1000);
var hasUpdate = await _autoUpdateService.CheckForUpdatesAsync();
if (hasUpdate)
{
await ShowUpdateDialogAsync();
}
}
catch (Exception ex)
{
// 更新检查失败不影响登录
System.Diagnostics.Debug.WriteLine($"更新检查异常: {ex.Message}");
}
}
private async Task ShowUpdateDialogAsync()
{
await Dispatcher.InvokeAsync(async () =>
{
// 检查窗口是否仍然打开
if (!IsLoaded || !IsVisible || Visibility == Visibility.Collapsed)
{
return;
}
var versionInfo =await _autoUpdateService.GetVersionInfo();
if (versionInfo == null) return;
var currentVersion = _autoUpdateService.GetCurrentVersion();
var updateWindow = new UpdateWindow
{
CurrentVersion = currentVersion,
LatestVersion = versionInfo.LatestVersion,
PublishDate = versionInfo.PublishDate,
Changelog = versionInfo.Changelog,
DownloadUrl = versionInfo.DownloadUrl,
ApplicationName = versionInfo.ApplicationName,
IsMandatory = versionInfo.Mandatory,
Owner = this
};
updateWindow.UpdateRequested += (downloadUrl) =>
{
try
{
_autoUpdateService.StartUpdate(downloadUrl);
Application.Current.Shutdown();
}
catch (Exception ex)
{
MessageBox.Show($"更新启动失败: {ex.Message}", "更新错误",
MessageBoxButton.OK, MessageBoxImage.Error);
}
};
updateWindow.ShowDialog();
});
}
private void LoginWindow_Closed(object? sender, EventArgs e)
{
Application.Current.Shutdown();
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Submit_Click(sender, e);
}
}
private void Submit_Click(object sender, RoutedEventArgs e)
{
var vm = (LoginWindowViewModel)DataContext;
vm.LoginMessage = string.Empty;
bool valid = FluentValidationHelper.ValidateAll(LoginForm, vm.LoginInput!, vm.LoginInputValidator);
if (valid)
{
if (vm.LoginCommand.CanExecute())
{
vm.LoginCommand.Execute();
}
}
// 阻止事件继续冒泡
e.Handled = true;
}
}
}