using HandyControl.Tools.Extension; using System.Collections.ObjectModel; using YY.Admin.Core; using YY.Admin.Core.Entity; using YY.Admin.Core.Services; namespace YY.Admin.ViewModels.RawMaterialEntry; public class WeightRecordPickerDialogViewModel : BaseViewModel, IDialogResultable { private readonly IWeightRecordService _weightRecordService; private string? _searchBillNo; public string? SearchBillNo { get => _searchBillNo; set => SetProperty(ref _searchBillNo, value); } private string? _searchPlateNumber; public string? SearchPlateNumber { get => _searchPlateNumber; set => SetProperty(ref _searchPlateNumber, value); } public ObservableCollection Records { get; } = new(); private MesXslWeightRecord? _selectedRecord; public MesXslWeightRecord? SelectedRecord { get => _selectedRecord; set { SetProperty(ref _selectedRecord, value); ConfirmCommand.RaiseCanExecuteChanged(); RaisePropertyChanged(nameof(SelectedRecordDisplay)); RaisePropertyChanged(nameof(HasSelectedRecord)); } } public string SelectedRecordDisplay => _selectedRecord != null ? $"[{_selectedRecord.BillNo}] 供应商:{_selectedRecord.SenderUnit ?? "-"}" : "选中榜单后点击「确认选择」"; public bool HasSelectedRecord => _selectedRecord != null; private bool _result; public bool Result { get => _result; set => SetProperty(ref _result, value); } public Action? CloseAction { get; set; } public DelegateCommand SearchCommand { get; } public DelegateCommand ConfirmCommand { get; } public DelegateCommand CancelCommand { get; } public WeightRecordPickerDialogViewModel( IWeightRecordService weightRecordService, IContainerExtension container, IRegionManager regionManager) : base(container, regionManager) { _weightRecordService = weightRecordService; SearchCommand = new DelegateCommand(async () => await LoadAsync()); ConfirmCommand = new DelegateCommand(Confirm, () => SelectedRecord != null); CancelCommand = new DelegateCommand(() => CloseAction?.Invoke()); _ = LoadAsync(); } public void Initialize(string? billNo) { if (!string.IsNullOrWhiteSpace(billNo)) { SearchBillNo = billNo.Trim(); _ = LoadAsync(); } } private async Task LoadAsync() { try { IsLoading = true; var result = await _weightRecordService.PageAsync( 1, 200, filterBillNo: SearchBillNo?.Trim(), filterPlateNumber: SearchPlateNumber?.Trim(), filterInoutDirection: "1"); Records.Clear(); foreach (var record in result.Records) { Records.Add(record); } if (!string.IsNullOrWhiteSpace(SearchBillNo)) { SelectedRecord = Records.FirstOrDefault(x => string.Equals(x.BillNo, SearchBillNo, StringComparison.OrdinalIgnoreCase)); } } catch { Records.Clear(); } finally { IsLoading = false; } } private void Confirm() { if (SelectedRecord == null) { return; } Result = true; CloseAction?.Invoke(); } }