新增物料类型处理逻辑,确保在保存和编辑称重记录时自动设置默认物料类型。更新前端表单以支持密炼物料的选择和显示,优化用户体验。添加分类字典和数据字典的事件广播功能,增强系统的实时数据同步能力。
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
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.WeightRecord;
|
||||
|
||||
public class MixerMaterialPickerDialogViewModel : BaseViewModel, IDialogResultable<bool>
|
||||
{
|
||||
private readonly IMixerMaterialService _mixerMaterialService;
|
||||
|
||||
private string? _searchCode;
|
||||
public string? SearchCode { get => _searchCode; set => SetProperty(ref _searchCode, value); }
|
||||
|
||||
private string? _searchName;
|
||||
public string? SearchName { get => _searchName; set => SetProperty(ref _searchName, value); }
|
||||
|
||||
public ObservableCollection<SelectableMixerMaterial> Materials { get; } = new();
|
||||
|
||||
public IReadOnlyList<SelectableMixerMaterial> SelectedMaterials =>
|
||||
Materials.Where(m => m.IsSelected).ToList();
|
||||
|
||||
public int SelectedCount => Materials.Count(m => m.IsSelected);
|
||||
|
||||
public string SelectedDisplayText
|
||||
{
|
||||
get
|
||||
{
|
||||
var names = Materials.Where(m => m.IsSelected).Select(m => m.Source.MaterialName).ToList();
|
||||
return names.Count == 0 ? "请在上方列表中勾选物料,可多选" : string.Join(";", names);
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasSelectedMaterials => Materials.Any(m => m.IsSelected);
|
||||
|
||||
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 DelegateCommand ClearSelectionCommand { get; }
|
||||
|
||||
public MixerMaterialPickerDialogViewModel(
|
||||
IMixerMaterialService mixerMaterialService,
|
||||
IContainerExtension container,
|
||||
IRegionManager regionManager) : base(container, regionManager)
|
||||
{
|
||||
_mixerMaterialService = mixerMaterialService;
|
||||
SearchCommand = new DelegateCommand(async () => await LoadAsync());
|
||||
ConfirmCommand = new DelegateCommand(Confirm, () => HasSelectedMaterials);
|
||||
CancelCommand = new DelegateCommand(() => CloseAction?.Invoke());
|
||||
ClearSelectionCommand = new DelegateCommand(ClearSelection);
|
||||
_ = LoadAsync();
|
||||
}
|
||||
|
||||
private async Task LoadAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
IsLoading = true;
|
||||
var selectedIds = Materials.Where(m => m.IsSelected).Select(m => m.Source.Id).ToHashSet();
|
||||
var result = await _mixerMaterialService.PageAsync(1, 500,
|
||||
materialCode: SearchCode?.Trim(),
|
||||
materialName: SearchName?.Trim());
|
||||
Materials.Clear();
|
||||
foreach (var mat in result.Records)
|
||||
{
|
||||
var item = new SelectableMixerMaterial(mat);
|
||||
if (selectedIds.Contains(mat.Id)) item.IsSelected = true;
|
||||
item.SelectionChanged += NotifySelectionChanged;
|
||||
Materials.Add(item);
|
||||
}
|
||||
NotifySelectionChanged();
|
||||
}
|
||||
catch
|
||||
{
|
||||
Materials.Clear();
|
||||
}
|
||||
finally
|
||||
{
|
||||
IsLoading = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void NotifySelectionChanged()
|
||||
{
|
||||
RaisePropertyChanged(nameof(SelectedCount));
|
||||
RaisePropertyChanged(nameof(SelectedDisplayText));
|
||||
RaisePropertyChanged(nameof(HasSelectedMaterials));
|
||||
ConfirmCommand.RaiseCanExecuteChanged();
|
||||
}
|
||||
|
||||
private void ClearSelection()
|
||||
{
|
||||
foreach (var m in Materials) m.IsSelected = false;
|
||||
}
|
||||
|
||||
private void Confirm()
|
||||
{
|
||||
if (!HasSelectedMaterials) return;
|
||||
Result = true;
|
||||
CloseAction?.Invoke();
|
||||
}
|
||||
|
||||
public class SelectableMixerMaterial : System.ComponentModel.INotifyPropertyChanged
|
||||
{
|
||||
public event System.ComponentModel.PropertyChangedEventHandler? PropertyChanged;
|
||||
public event Action? SelectionChanged;
|
||||
|
||||
private bool _isSelected;
|
||||
public bool IsSelected
|
||||
{
|
||||
get => _isSelected;
|
||||
set
|
||||
{
|
||||
if (_isSelected == value) return;
|
||||
_isSelected = value;
|
||||
PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(nameof(IsSelected)));
|
||||
SelectionChanged?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
public MesMixerMaterial Source { get; }
|
||||
public SelectableMixerMaterial(MesMixerMaterial source) => Source = source;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user