新增原料入场记录独立页面,更新导航和菜单配置以支持新功能。优化原料入场记录编辑对话框,增强物料选择和显示逻辑,提升用户体验。

This commit is contained in:
geht
2026-05-09 18:25:34 +08:00
parent 068d44c53e
commit 0e89648e8a
16 changed files with 1624 additions and 51 deletions

View File

@@ -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();
}
}