Files
qhmes/yy-admin-master/YY.Admin/ViewModels/MixerMaterial/MixerMaterialEditDialogViewModel.cs

190 lines
6.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
namespace YY.Admin.ViewModels.MixerMaterial;
public class MixerMaterialEditDialogViewModel : BaseViewModel, IDialogResultable<bool>
{
private readonly IMixerMaterialService _mixerMaterialService;
private MesMixerMaterial? _material;
public MesMixerMaterial? Material
{
get => _material;
set => SetProperty(ref _material, value);
}
public bool IsAddMode => string.IsNullOrWhiteSpace(Material?.Id);
public string DialogTitle => IsAddMode ? "新增密炼物料" : "编辑密炼物料";
public ObservableCollection<KeyValuePair<string, string>> MajorCategoryOptions { get; } = new();
public ObservableCollection<KeyValuePair<string, string>> MinorCategoryOptions { get; } = new();
public ObservableCollection<KeyValuePair<string, int>> FeedManageStatusOptions { get; } =
[
new("在投管", 1),
new("未投管", 0)
];
public ObservableCollection<KeyValuePair<string, int>> UseStatusOptions { get; } =
[
new("使用中", 1),
new("停用", 0)
];
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 DelegateCommand MajorCategoryChangedCommand { get; }
public MixerMaterialEditDialogViewModel(
IMixerMaterialService mixerMaterialService,
IContainerExtension container,
IRegionManager regionManager) : base(container, regionManager)
{
_mixerMaterialService = mixerMaterialService;
SaveCommand = new DelegateCommand(async () => await SaveAsync());
CancelCommand = new DelegateCommand(() => CloseAction?.Invoke());
MajorCategoryChangedCommand = new DelegateCommand(async () => await OnMajorCategoryChangedAsync());
_ = LoadMajorCategoryOptionsAsync();
}
public void InitializeForAdd()
{
//update-begin---author:jiangxh ---date:20260729 for【密炼物料】新增默认保质期365天-----------
Material = new MesMixerMaterial
{
FeedManageStatus = 1,
UseStatus = 1,
ShelfLifeDays = 365
};
//update-end---author:jiangxh ---date:20260729 for【密炼物料】新增默认保质期365天-----------
MinorCategoryOptions.Clear();
RaisePropertyChanged(nameof(IsAddMode));
RaisePropertyChanged(nameof(DialogTitle));
}
public void InitializeForEdit(MesMixerMaterial material)
{
Material = new MesMixerMaterial
{
Id = material.Id,
MaterialCode = material.MaterialCode,
MaterialName = material.MaterialName,
ErpCode = material.ErpCode,
MajorCategoryId = material.MajorCategoryId,
MinorCategoryId = material.MinorCategoryId,
MaterialDesc = material.MaterialDesc,
AliasName = material.AliasName,
FeedManageStatus = material.FeedManageStatus,
UseStatus = material.UseStatus,
SpecificGravity = material.SpecificGravity,
ShelfLifeDays = material.ShelfLifeDays,
MinBakeMinutes = material.MinBakeMinutes,
TotalSafetyStockKg = material.TotalSafetyStockKg,
QualifiedSafetyStockKg = material.QualifiedSafetyStockKg,
Remark = material.Remark,
TenantId = material.TenantId,
};
_ = LoadMinorCategoryOptionsAsync(Material.MajorCategoryId);
RaisePropertyChanged(nameof(IsAddMode));
RaisePropertyChanged(nameof(DialogTitle));
}
private async Task LoadMajorCategoryOptionsAsync()
{
try
{
MajorCategoryOptions.Clear();
var options = await _mixerMaterialService.GetMajorCategoryOptionsAsync();
foreach (var item in options)
{
MajorCategoryOptions.Add(item);
}
}
catch
{
// ignore
}
}
private async Task LoadMinorCategoryOptionsAsync(string? majorCategoryId)
{
MinorCategoryOptions.Clear();
if (string.IsNullOrWhiteSpace(majorCategoryId))
{
return;
}
try
{
var options = await _mixerMaterialService.GetMinorCategoryOptionsAsync(majorCategoryId);
foreach (var item in options)
{
MinorCategoryOptions.Add(item);
}
}
catch
{
// ignore
}
}
private async Task OnMajorCategoryChangedAsync()
{
if (Material == null) return;
Material.MinorCategoryId = null;
RaisePropertyChanged(nameof(Material));
await LoadMinorCategoryOptionsAsync(Material.MajorCategoryId);
}
private async Task SaveAsync()
{
if (Material == null) return;
if (string.IsNullOrWhiteSpace(Material.MaterialCode))
{
HandyControl.Controls.MessageBox.Warning("物料编码不能为空!");
return;
}
if (string.IsNullOrWhiteSpace(Material.MaterialName))
{
HandyControl.Controls.MessageBox.Warning("物料名称不能为空!");
return;
}
if (string.IsNullOrWhiteSpace(Material.MajorCategoryId))
{
HandyControl.Controls.MessageBox.Warning("物料大类不能为空!");
return;
}
if (string.IsNullOrWhiteSpace(Material.MinorCategoryId))
{
HandyControl.Controls.MessageBox.Warning("物料小类不能为空!");
return;
}
try
{
bool ok = IsAddMode
? await _mixerMaterialService.AddAsync(Material)
: await _mixerMaterialService.EditAsync(Material);
if (!ok)
{
HandyControl.Controls.MessageBox.Error($"{(IsAddMode ? "" : "")}密炼物料失败!");
return;
}
Result = true;
CloseAction?.Invoke();
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error($"操作失败:{ex.Message}");
}
}
}