新增原料入场记录独立页面,更新导航和菜单配置以支持新功能。优化原料入场记录编辑对话框,增强物料选择和显示逻辑,提升用户体验。
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
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<bool>
|
||||
{
|
||||
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<MesXslWeightRecord> 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user