using QRCoder;
using SWRIS.Core;
using SWRIS.Extensions;
using SWRIS.Models;
using System;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace SWRIS
{
///
/// SoftAuthDialog.xaml 的交互逻辑
///
public partial class SoftAuthDialog : Window
{
public SoftAuthorizeModel AuthorizeModel { get; set; }
public SoftAuthDialog()
{
InitializeComponent();
AuthorizeModel = new SoftAuthorizeModel() { MachineCode = SoftAuth.GetMachineCode() };
DataContext = this;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
if (AuthorizeModel.MachineCode != null)
{
QRCodeGenerator qrGenerator = new QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(AuthorizeModel.MachineCode, QRCodeGenerator.ECCLevel.Q);
QRCode qrCode = new QRCode(qrCodeData);
Bitmap qrCodeImage = qrCode.GetGraphic(10);
imgQRCode.Source = qrCodeImage.ConvertBitmapToBitmapImage();
}
}
private void Copy_Click(object sender, RoutedEventArgs e)
{
Clipboard.SetDataObject(AuthorizeModel.MachineCode);
}
private void PasteExecuted(object sender, ExecutedRoutedEventArgs e)
{
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Text))
{
var finalCode = (string)iData.GetData(DataFormats.Text);
AuthorizeModel.FinalData.Set(finalCode);
}
e.Handled = true;
}
private void BtnSave_Click(object sender, RoutedEventArgs e)
{
DialogResult = SoftAuth.WriteRegistry(AuthorizeModel.FinalCode);
}
private void Fourth_TextChanged(object sender, TextChangedEventArgs e)
{
var fourth = sender as TextBox;
if (fourth.Text.Length == fourth.MaxLength)
{
if (SoftAuth.CheckFinalCode(AuthorizeModel.FinalCode))
{
piCheckResult.Visibility = Visibility.Visible;
btnSave.IsEnabled = true;
return;
}
}
piCheckResult.Visibility = Visibility.Hidden;
btnSave.IsEnabled = false;
}
private void Card_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
DragMove();
}
private void OnCodeTextBoxTextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox == null) return;
if (AuthorizeModel.FinalCode.Length == 16)
{
Dispatcher.BeginInvoke(new Action(() =>
{
ValidateRegistrationCode();
}), System.Windows.Threading.DispatcherPriority.Background);
}
else
{
piCheckResult.Visibility = Visibility.Hidden;
btnSave.IsEnabled = false;
}
// 当输入框填满4个字符时,自动跳转到下一个
if (textBox.Text.Length >= textBox.MaxLength)
{
if (textBox.Parent is StackPanel parent)
{
var textBoxes = parent.Children.OfType().ToList();
var currentIndex = textBoxes.IndexOf(textBox);
// 如果不是最后一个文本框,则跳转到下一个
if (currentIndex >= 0 && currentIndex < textBoxes.Count - 1)
{
var nextTextBox = textBoxes[currentIndex + 1];
nextTextBox.Focus();
nextTextBox.SelectAll();
}
else if (currentIndex == textBoxes.Count - 1)
{
// 最后一个输入框填满后,延迟执行验证,避免UI卡顿
Dispatcher.BeginInvoke(new Action(() =>
{
ValidateRegistrationCode();
}), System.Windows.Threading.DispatcherPriority.Background);
}
}
}
}
private async void ValidateRegistrationCode()
{
// 显示加载状态(可选)
piCheckResult.Visibility = Visibility.Hidden;
// 异步执行验证
bool isValid = await Task.Run(() => SoftAuth.CheckFinalCode(AuthorizeModel.FinalCode));
// 回到UI线程更新界面
piCheckResult.Visibility = isValid ? Visibility.Visible : Visibility.Hidden;
btnSave.IsEnabled = isValid;
if (isValid)
{
piCheckResult.Foreground = new SolidColorBrush(Colors.LawnGreen);
}
}
}
}