using HandyControl.Controls; using HandyControl.Tools.Extension; using System.Collections.ObjectModel; using YY.Admin.Core; using YY.Admin.Core.Entity; using YY.Admin.Core.Services; using YY.Admin.Services.Service; namespace YY.Admin.ViewModels.RawMaterialCard; public class RawMaterialCardEditDialogViewModel : BaseViewModel, IDialogResultable { private readonly IRawMaterialCardService _cardService; private readonly IJeecgDictSyncService _dictSyncService; private MesXslRawMaterialCard? _card; public MesXslRawMaterialCard? Card { get => _card; set => SetProperty(ref _card, value); } public bool IsAddMode => string.IsNullOrWhiteSpace(Card?.Id); public string DialogTitle => IsAddMode ? "新增原材料卡片" : "编辑原材料卡片"; public ObservableCollection> StatusOptions { get; } = new(); public ObservableCollection> TestResultOptions { get; } = new(); private bool _result; public bool Result { get => _result; set => SetProperty(ref _result, value); } public Action? CloseAction { get; set; } public DelegateCommand SaveCommand { get; } public DelegateCommand CancelCommand { get; } public RawMaterialCardEditDialogViewModel( IRawMaterialCardService cardService, IJeecgDictSyncService dictSyncService, IContainerExtension container, IRegionManager regionManager) : base(container, regionManager) { _cardService = cardService; _dictSyncService = dictSyncService; SaveCommand = new DelegateCommand(async () => await SaveAsync()); CancelCommand = new DelegateCommand(() => CloseAction?.Invoke()); _ = LoadDictOptionsAsync(); } private async Task LoadDictOptionsAsync() { try { var statusOpts = await _dictSyncService.GetDictOptionsAsync("xslmes_card_status"); var testResultOpts = await _dictSyncService.GetDictOptionsAsync("xslmes_test_result"); StatusOptions.Clear(); foreach (var item in statusOpts) StatusOptions.Add(item); if (StatusOptions.Count == 0) { StatusOptions.Add(new KeyValuePair("正常", "1")); StatusOptions.Add(new KeyValuePair("异常", "0")); } TestResultOptions.Clear(); foreach (var item in testResultOpts) TestResultOptions.Add(item); if (TestResultOptions.Count == 0) { TestResultOptions.Add(new KeyValuePair("未检", "0")); TestResultOptions.Add(new KeyValuePair("合格", "1")); TestResultOptions.Add(new KeyValuePair("不合格", "2")); } } catch { StatusOptions.Clear(); StatusOptions.Add(new KeyValuePair("正常", "1")); StatusOptions.Add(new KeyValuePair("异常", "0")); TestResultOptions.Clear(); TestResultOptions.Add(new KeyValuePair("未检", "0")); TestResultOptions.Add(new KeyValuePair("合格", "1")); TestResultOptions.Add(new KeyValuePair("不合格", "2")); } } public void InitializeForAdd() { Card = new MesXslRawMaterialCard { Status = "1", TestResult = "0", PriorityPickup = "0", EntryDate = DateTime.Today }; RaisePropertyChanged(nameof(IsAddMode)); RaisePropertyChanged(nameof(DialogTitle)); } public void InitializeForEdit(MesXslRawMaterialCard card) { Card = new MesXslRawMaterialCard { Id = card.Id, Barcode = card.Barcode, BatchNo = card.BatchNo, EntryDate = card.EntryDate, MaterialId = card.MaterialId, MaterialName = card.MaterialName, MaterialDesc = card.MaterialDesc, SupplierId = card.SupplierId, SupplierName = card.SupplierName, ManufacturerMaterialName = card.ManufacturerMaterialName, ShelfLife = card.ShelfLife, TotalWeight = card.TotalWeight, PackagingTare = card.PackagingTare, PalletWeight = card.PalletWeight, RemainingWeight = card.RemainingWeight, RemainingQuantity = card.RemainingQuantity, Status = card.Status, TestResult = card.TestResult, WarehouseArea = card.WarehouseArea, UnloadOperator = card.UnloadOperator, PriorityPickup = card.PriorityPickup, TenantId = card.TenantId, UpdateTime = card.UpdateTime }; RaisePropertyChanged(nameof(IsAddMode)); RaisePropertyChanged(nameof(DialogTitle)); } private async Task SaveAsync() { if (Card == null) return; if (string.IsNullOrWhiteSpace(Card.MaterialName)) { HandyControl.Controls.MessageBox.Warning("物料名称不能为空!"); return; } try { bool ok; if (IsAddMode) { ok = await _cardService.AddAsync(Card); if (ok) HandyControl.Controls.MessageBox.Success("新增原材料卡片成功!"); else { HandyControl.Controls.MessageBox.Error("新增原材料卡片失败!"); return; } } else { ok = await _cardService.EditAsync(Card); if (!ok) { HandyControl.Controls.MessageBox.Error("编辑原材料卡片失败!"); return; } } Result = ok; CloseAction?.Invoke(); } catch (Exception ex) { HandyControl.Controls.MessageBox.Error($"操作失败:{ex.Message}"); } } }