using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Avalonia.Controls.Notifications; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Seyounth.Hyosung.Data.Models; using Seyounth.Hyosung.Data.Services; using Seyounth.Hyosung.Runtime; using SukiUI.Toasts; namespace Seyounth.Hyosung.Ava.ViewModels; public partial class HomeViewModel : ObservableObject { [ObservableProperty] private ObservableCollection _varieties; [ObservableProperty] private Variety _selectedVariety; [ObservableProperty] private List _yarnCarTypes; [ObservableProperty] private List _yarnCarSideType; [ObservableProperty] private int _selectedYarnCarTypeIndex; [ObservableProperty] private int _selectedYarnCarSideTypeIndex; private readonly IVarietyService _varietyService; private readonly IHyosungRuntime _runtime; private readonly ISukiToastManager _toastManager; public HomeViewModel(IVarietyService varietyService, IHyosungRuntime runtime, ISukiToastManager toastManager) { _varietyService = varietyService; _runtime = runtime; _toastManager = toastManager; YarnCarTypes = [ "A", "B", "C", "D" ]; YarnCarSideType = [ "正面", "反面" ]; SelectedYarnCarTypeIndex = 0; SelectedYarnCarSideTypeIndex = 0; NavigatedTo(); } public void NavigatedTo() { Varieties = new ObservableCollection(_varietyService.GetAll()); } [RelayCommand] private void OnChangeVariety() { try { SelectedVariety.YarnCarType = SelectedYarnCarTypeIndex + 1; SelectedVariety.YarnCarSide = SelectedYarnCarSideTypeIndex + 1; _runtime.SendVarietyToPlcAsync(SelectedVariety); _toastManager.CreateToast() .WithTitle("发送成功") .Dismiss().After(TimeSpan.FromSeconds(3)) .OfType(NotificationType.Success) .Dismiss().ByClicking() .Queue(); } catch (Exception e) { _toastManager.CreateToast() .WithTitle("发送失败") .WithContent(e.Message) .Dismiss().After(TimeSpan.FromSeconds(3)) .OfType(NotificationType.Error) .Dismiss().ByClicking() .Queue(); } } [RelayCommand] private void OnChangeVarietyLastNo() { try { _varietyService.SetLastNo(SelectedVariety.Id, SelectedVariety.LastNo.Value); _toastManager.CreateToast() .WithTitle("更改控制号成功") .Dismiss().After(TimeSpan.FromSeconds(3)) .OfType(NotificationType.Success) .Dismiss().ByClicking() .Queue(); } catch (Exception e) { _toastManager.CreateToast() .WithTitle("更改控制号失败") .WithContent(e.Message) .Dismiss().After(TimeSpan.FromSeconds(3)) .OfType(NotificationType.Error) .Dismiss().ByClicking() .Queue(); } } }