using System; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Animation; using Microsoft.Win32; namespace Better_Seewo.Manager.Pages { /// /// ActivatePage.xaml 的交互逻辑 /// 激活管理页面 - 管理 Better-Seewo 许可证 /// public partial class ActivatePage : Page { // ===== 当前激活状态 ===== private bool _isActivated = false; /// /// 许可证信息数据模型 /// public class LicenseInfo { /// 许可证类型(个人版/专业版/教育版) public string LicenseType { get; set; } = "个人版"; /// 激活码 public string ActivationCode { get; set; } = string.Empty; /// 激活日期 public DateTime ActivateDate { get; set; } /// 到期日期 public DateTime ExpiryDate { get; set; } /// 设备标识 public string DeviceId { get; set; } = string.Empty; /// 是否已激活 public bool IsActivated { get; set; } = false; } private LicenseInfo _licenseInfo = new LicenseInfo(); public ActivatePage() { InitializeComponent(); Loaded += ActivatePage_Loaded; } /// /// 页面加载时检测激活状态 /// private async void ActivatePage_Loaded(object sender, RoutedEventArgs e) { await CheckActivationStatusAsync(); } /// /// 异步检查激活状态 /// private async Task CheckActivationStatusAsync() { await Task.Run(() => { // TODO: 实际从配置文件或注册表读取激活状态 // 当前模拟为未激活 _isActivated = _licenseInfo.IsActivated; }); Dispatcher.Invoke(() => { UpdateActivationUI(); }); } /// /// 根据激活状态更新界面 /// private void UpdateActivationUI() { if (_isActivated) { PanelNotActivated.Visibility = Visibility.Collapsed; PanelActivated.Visibility = Visibility.Visible; // 填充许可证信息 LicenseTypeText.Text = _licenseInfo.LicenseType; ActivateDateText.Text = _licenseInfo.ActivateDate.ToString("yyyy-MM-dd"); ExpiryDateText.Text = _licenseInfo.ExpiryDate.ToString("yyyy-MM-dd"); DeviceInfoText.Text = string.IsNullOrEmpty(_licenseInfo.DeviceId) ? "当前设备已绑定" : $"设备:{_licenseInfo.DeviceId}"; } else { PanelNotActivated.Visibility = Visibility.Visible; PanelActivated.Visibility = Visibility.Collapsed; } } /// /// 输入框获得焦点时 - 边框发光效果 /// private void ActivationCodeInput_GotFocus(object sender, RoutedEventArgs e) { var glowAnimation = new ColorAnimation { From = Colors.Transparent, To = Color.FromArgb(0xFF, 0x4C, 0xAF, 0x50), Duration = TimeSpan.FromMilliseconds(250), EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut } }; ActivationInputBorder.BorderBrush = new SolidColorBrush(Colors.Transparent); var brush = new SolidColorBrush(Colors.Transparent); brush.BeginAnimation(SolidColorBrush.ColorProperty, glowAnimation); ActivationInputBorder.BorderBrush = brush; } /// /// 输入框失去焦点时 - 恢复默认边框 /// private void ActivationCodeInput_LostFocus(object sender, RoutedEventArgs e) { var resetAnimation = new ColorAnimation { To = Color.FromArgb(0xFF, 0xBD, 0xBD, 0xBD), Duration = TimeSpan.FromMilliseconds(200), EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut } }; var brush = new SolidColorBrush(Color.FromArgb(0xFF, 0x4C, 0xAF, 0x50)); brush.BeginAnimation(SolidColorBrush.ColorProperty, resetAnimation); ActivationInputBorder.BorderBrush = brush; } /// /// 激活按钮点击事件 /// private async void BtnActivate_Click(object sender, RoutedEventArgs e) { var code = ActivationCodeInput.Text?.Trim(); if (string.IsNullOrEmpty(code)) { ShowError("请输入激活码"); return; } if (code.Length < 8) { ShowError("激活码格式不正确,请检查后重试"); return; } HideError(); BtnActivate.IsEnabled = false; BtnActivate.Content = "验证中..."; await Task.Run(() => { // TODO: 实际验证逻辑 - 联网验证激活码 // 当前为模拟激活 System.Threading.Thread.Sleep(1500); }); // 模拟激活成功 _licenseInfo = new LicenseInfo { LicenseType = "个人版", ActivationCode = code, ActivateDate = DateTime.Now, ExpiryDate = DateTime.Now.AddYears(1), DeviceId = "DEVICE-" + Environment.MachineName.GetHashCode().ToString("X8"), IsActivated = true }; _isActivated = true; // 切换到已激活界面 UpdateActivationUI(); PlayCelebrationAnimation(); BtnActivate.IsEnabled = true; BtnActivate.Content = "激活"; } /// /// 激活成功庆祝动画:绿色勾号从 0 -> 1.2 -> 1.0 弹出 /// private void PlayCelebrationAnimation() { CelebrationPanel.Visibility = Visibility.Visible; var grid = (Grid)CelebrationPanel.Children[0]; var transform = (ScaleTransform)grid.RenderTransform; // 阶段1:Scale 0 -> 1.2(弹出) var popOut = new DoubleAnimation { From = 0, To = 1.2, Duration = TimeSpan.FromMilliseconds(400), EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut } }; // 阶段2:Scale 1.2 -> 1.0(回弹) var bounceBack = new DoubleAnimation { From = 1.2, To = 1.0, Duration = TimeSpan.FromMilliseconds(200), EasingFunction = new QuadraticEase { EasingMode = EasingMode.EaseInOut } }; popOut.Completed += (s, e) => { transform.BeginAnimation(ScaleTransform.ScaleXProperty, bounceBack); transform.BeginAnimation(ScaleTransform.ScaleYProperty, bounceBack); }; transform.BeginAnimation(ScaleTransform.ScaleXProperty, popOut); transform.BeginAnimation(ScaleTransform.ScaleYProperty, popOut); } /// /// 导入许可证文件按钮点击事件 /// private void BtnImportLicense_Click(object sender, RoutedEventArgs e) { var dialog = new OpenFileDialog { Filter = "许可证文件 (*.lic;*.license)|*.lic;*.license|所有文件 (*.*)|*.*", Title = "选择许可证文件" }; if (dialog.ShowDialog() == true) { ActivationCodeInput.Text = $"已选择文件:{System.IO.Path.GetFileName(dialog.FileName)}"; // TODO: 实际读取许可证文件内容 // 当前为模拟实现 } } /// /// 续费按钮点击事件 /// private async void BtnRenew_Click(object sender, RoutedEventArgs e) { await Task.Run(() => { // TODO: 实际续费逻辑 - 打开续费页面或验证新的激活码 System.Threading.Thread.Sleep(500); }); MessageBox.Show("续费功能开发中,敬请期待。", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } /// /// 取消激活按钮点击事件 /// private async void BtnDeactivate_Click(object sender, RoutedEventArgs e) { var result = MessageBox.Show( "确定要取消激活吗?取消后将无法使用高级功能。", "确认取消激活", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { await Task.Run(() => { // TODO: 实际取消激活逻辑 System.Threading.Thread.Sleep(500); }); _licenseInfo.IsActivated = false; _isActivated = false; CelebrationPanel.Visibility = Visibility.Collapsed; UpdateActivationUI(); } } /// /// 显示错误信息 /// private void ShowError(string message) { ErrorText.Text = message; ErrorPanel.Visibility = Visibility.Visible; // 错误面板淡入动画 var fadeIn = new DoubleAnimation { From = 0, To = 1, Duration = TimeSpan.FromMilliseconds(250), EasingFunction = new CubicEase { EasingMode = EasingMode.EaseOut } }; ErrorPanel.BeginAnimation(OpacityProperty, fadeIn); } /// /// 隐藏错误信息 /// private void HideError() { ErrorPanel.Visibility = Visibility.Collapsed; } /// /// 供外部调用的公共方法:获取激活状态 /// public bool IsActivated() { return _isActivated; } /// /// 供外部调用的公共方法:获取许可证信息 /// public LicenseInfo GetLicenseInfo() { return _licenseInfo; } } }