139 lines
4.3 KiB
C#
139 lines
4.3 KiB
C#
using PetWashControl.Models;
|
|
using PetWashControl.Services;
|
|
using PetWashControl.ViewModels;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
|
|
namespace PetWashControl.Views;
|
|
|
|
public partial class MainWindow : Window
|
|
{
|
|
private readonly MainViewModel _viewModel;
|
|
private readonly AdminAccessService _adminAccessService;
|
|
private PackageManagementWindow? _packageManagementWindow;
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
_adminAccessService = new AdminAccessService(new ConfigurationService());
|
|
_viewModel = new MainViewModel();
|
|
_viewModel.ViewChanged += OnViewChanged;
|
|
_viewModel.OpenPackageManagementRequested += OnOpenPackageManagementRequested;
|
|
DataContext = _viewModel;
|
|
Loaded += MainWindow_Loaded;
|
|
}
|
|
|
|
private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
await _viewModel.InitializeAsync();
|
|
ConfigureSettingsButtons();
|
|
}
|
|
|
|
private void OnViewChanged(string viewName)
|
|
{
|
|
IdleView.Visibility = Visibility.Collapsed;
|
|
PaymentView.Visibility = Visibility.Collapsed;
|
|
QRCodeView.Visibility = Visibility.Collapsed;
|
|
WashingView.Visibility = Visibility.Collapsed;
|
|
SettingsView.Visibility = Visibility.Collapsed;
|
|
|
|
switch (viewName)
|
|
{
|
|
case "Idle":
|
|
IdleView.Visibility = Visibility.Visible;
|
|
break;
|
|
case "Payment":
|
|
PaymentView.Visibility = Visibility.Visible;
|
|
break;
|
|
case "QRCode":
|
|
QRCodeView.Visibility = Visibility.Visible;
|
|
break;
|
|
case "Washing":
|
|
WashingView.Visibility = Visibility.Visible;
|
|
break;
|
|
case "Settings":
|
|
SettingsView.Visibility = Visibility.Visible;
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void Package_Click(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (sender is FrameworkElement element && element.DataContext is Package package)
|
|
{
|
|
_viewModel.SelectPackageCommand.Execute(package);
|
|
}
|
|
}
|
|
|
|
private void AdminHotspot_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (e.ClickCount < 2)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var loginWindow = new AdminLoginWindow(_adminAccessService)
|
|
{
|
|
Owner = this
|
|
};
|
|
|
|
var dialogResult = loginWindow.ShowDialog();
|
|
if (dialogResult == true && loginWindow.IsAuthenticated)
|
|
{
|
|
_viewModel.ShowSettingsFromAdmin();
|
|
}
|
|
}
|
|
|
|
private void OnOpenPackageManagementRequested()
|
|
{
|
|
if (_packageManagementWindow?.IsVisible == true)
|
|
{
|
|
_packageManagementWindow.Activate();
|
|
return;
|
|
}
|
|
|
|
_packageManagementWindow = new PackageManagementWindow(_viewModel)
|
|
{
|
|
Owner = this
|
|
};
|
|
_packageManagementWindow.Closed += (_, _) => _packageManagementWindow = null;
|
|
_packageManagementWindow.ShowDialog();
|
|
}
|
|
|
|
private void ConfigureSettingsButtons()
|
|
{
|
|
foreach (var button in FindVisualChildren<Button>(SettingsView))
|
|
{
|
|
if (ReferenceEquals(button.Command, _viewModel.OpenPackageManagementCommand))
|
|
{
|
|
button.Content = "套餐管理";
|
|
button.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#1976D2"));
|
|
}
|
|
else if (ReferenceEquals(button.Command, _viewModel.SaveSettingsCommand))
|
|
{
|
|
button.Content = "保存设置";
|
|
button.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4CAF50"));
|
|
}
|
|
}
|
|
}
|
|
|
|
private static IEnumerable<T> FindVisualChildren<T>(DependencyObject root) where T : DependencyObject
|
|
{
|
|
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(root); i++)
|
|
{
|
|
var child = VisualTreeHelper.GetChild(root, i);
|
|
if (child is T typedChild)
|
|
{
|
|
yield return typedChild;
|
|
}
|
|
|
|
foreach (var nestedChild in FindVisualChildren<T>(child))
|
|
{
|
|
yield return nestedChild;
|
|
}
|
|
}
|
|
}
|
|
}
|