using HandyControl.Controls; using HandyControl.Tools.Extension; using YY.Admin.Core; using YY.Admin.Core.Entity; using YY.Admin.Core.Services; namespace YY.Admin.ViewModels.WarehouseArea; public class WarehouseAreaEditDialogViewModel : BaseViewModel, IDialogResultable { private readonly IWarehouseAreaService _warehouseAreaService; private MesXslWarehouseArea? _area; public MesXslWarehouseArea? Area { get => _area; set => SetProperty(ref _area, value); } public bool IsAddMode => string.IsNullOrWhiteSpace(Area?.Id); public string DialogTitle => IsAddMode ? "新增库区" : "编辑库区"; 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 WarehouseAreaEditDialogViewModel( IWarehouseAreaService warehouseAreaService, IContainerExtension container, IRegionManager regionManager) : base(container, regionManager) { _warehouseAreaService = warehouseAreaService; SaveCommand = new DelegateCommand(async () => await SaveAsync()); CancelCommand = new DelegateCommand(() => CloseAction?.Invoke()); } public void InitializeForAdd() { Area = new MesXslWarehouseArea { Status = "0" }; RaisePropertyChanged(nameof(IsAddMode)); RaisePropertyChanged(nameof(DialogTitle)); } public void InitializeForEdit(MesXslWarehouseArea area) { Area = new MesXslWarehouseArea { Id = area.Id, AreaCode = area.AreaCode, AreaName = area.AreaName, WarehouseId = area.WarehouseId, WarehouseName = area.WarehouseName, WarehouseCategory = area.WarehouseCategory, WarehouseCategoryName = area.WarehouseCategoryName, MaxCapacity = area.MaxCapacity, ActualCapacity = area.ActualCapacity, Remark = area.Remark, Status = area.Status, TenantId = area.TenantId, }; RaisePropertyChanged(nameof(IsAddMode)); RaisePropertyChanged(nameof(DialogTitle)); } private async Task SaveAsync() { if (Area == null) return; if (string.IsNullOrWhiteSpace(Area.AreaCode)) { MessageBox.Warning("库区编码不能为空!"); return; } var codeAvailable = await _warehouseAreaService.CheckAreaCodeAsync(Area.AreaCode.Trim(), Area.Id); if (!codeAvailable) { MessageBox.Warning("该库区编码已存在,请更换!"); return; } Area.AreaCode = Area.AreaCode.Trim(); if (string.IsNullOrWhiteSpace(Area.AreaName)) Area.AreaName = Area.AreaCode; try { bool ok; if (IsAddMode) { ok = await _warehouseAreaService.AddAsync(Area); if (ok) Growl.Success("新增库区成功!"); else { Growl.Error("新增失败,请重试!"); return; } } else { ok = await _warehouseAreaService.EditAsync(Area); if (ok) Growl.Success("编辑库区成功!"); else { Growl.Error("编辑失败,请重试!"); return; } } Result = true; CloseAction?.Invoke(); } catch (Exception ex) { Growl.Error($"保存失败:{ex.Message}"); } } }