OutboundMaterialSearchViewModel.cs
3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using IndustrialControl.Pages;
using IndustrialControl.Services;
using System;
using System.Collections.ObjectModel;
namespace IndustrialControl.ViewModels;
public partial class OutboundMaterialSearchViewModel : ObservableObject
{
private readonly IOutboundMaterialService _dataSvc;
[ObservableProperty] private string? searchOrderNo;
[ObservableProperty] private DateTime startDate = DateTime.Today;
[ObservableProperty] private DateTime endDate = DateTime.Today;
[ObservableProperty] private OutboundOrderSummary? selectedOrder;
private CancellationTokenSource? _searchCts;
public OutboundMaterialSearchViewModel(IOutboundMaterialService dataSvc)
{
_dataSvc = dataSvc;
Orders = new ObservableCollection<OutboundOrderSummary>();
}
public ObservableCollection<OutboundOrderSummary> Orders { get; }
[RelayCommand]
private async Task SearchAsync()
{
_searchCts?.Cancel();
_searchCts = new CancellationTokenSource();
var ct = _searchCts.Token;
try
{
var orderTypeList = new[] { "out_return", "out_return", "out_other" };
var list = await _dataSvc.ListOutboundOrdersAsync(SearchOrderNo, startDate, endDate, null, orderTypeList,ct);
// ★ 在主线程更新 ObservableCollection,避免看起来“没刷新”
await MainThread.InvokeOnMainThreadAsync(() =>
{
Orders.Clear();
if (list != null)
{
foreach (var o in list)
Orders.Add(o);
}
});
// (排查辅助)无数据时提示一下,确认命令确实执行了
if (list == null || !list.Any())
await Shell.Current.DisplayAlert("提示", "未查询到任何入库单", "确定");
}
catch (Exception ex)
{
await Shell.Current.DisplayAlert("查询失败", ex.Message, "确定");
}
}
[RelayCommand(CanExecute = nameof(CanGoOutbound))]
private async Task GoOutboundAsync(OutboundOrderSummary? item)
{
if (SelectedOrder is null) return;
static string E(string? v) => Uri.EscapeDataString(v ?? "");
var o = SelectedOrder; // 确保 SelectedOrder 包含以下字段
var url =
$"//OutboundMaterial" +
$"?outstockId={E(o.outstockId)}" +
$"&outstockNo={E(searchOrderNo)}" +
$"&orderType={E(o.orderType)}" +
$"&orderTypeName={E(o.orderTypeName)}" +
$"&purchaseNo={E(o.purchaseNo)}" +
$"&supplierName={E(o.supplierName)}" +
$"&createdTime={E(o.createdTime)}";
await Shell.Current.GoToAsync(url);
}
private bool CanGoOutbound(OutboundOrderSummary? item) => item != null;
}
public record OutboundOrderSummary(
string outstockId,
string orderType,
string orderTypeName,
string purchaseNo,
string supplierName,
string arrivalNo,
string createdTime,
string deliveryNo,
string requisitionMaterialNo,
string returnNo,
string workOrderNo
);