InboundProductionSearchViewModel.cs
3.1 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
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 InboundProductionSearchViewModel : ObservableObject
{
private readonly IInboundMaterialService _dataSvc;
[ObservableProperty] private string? searchOrderNo;
[ObservableProperty] private DateTime startDate = DateTime.Today;
[ObservableProperty] private DateTime endDate = DateTime.Today;
[ObservableProperty] private InboundOrderSummary? selectedOrder;
private CancellationTokenSource? _searchCts;
public InboundProductionSearchViewModel(IInboundMaterialService dataSvc)
{
_dataSvc = dataSvc;
Orders = new ObservableCollection<InboundOrderSummary>();
}
public ObservableCollection<InboundOrderSummary> Orders { get; }
[RelayCommand]
private async Task SearchAsync()
{
_searchCts?.Cancel();
_searchCts = new CancellationTokenSource();
var ct = _searchCts.Token;
try
{
var list = await _dataSvc.ListInboundOrdersAsync(
searchOrderNo, // 单号/条码
startDate, // 开始日期
endDate, // 结束日期(Service 内会扩到 23:59:59)
"in_production", // 不传单值 orderType,用 null 更清晰
null, // 多类型数组
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(CanGoInbound))]
private async Task GoInboundAsync(InboundOrderSummary? item)
{
if (item is null) return;
static string E(string? v) => Uri.EscapeDataString(v ?? "");
var o = item;
var url =
$"//InboundProduction" +
$"?instockId={E(o.instockId)}" +
$"&instockNo={E(o.instockNo)}" +
$"&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);
}
// ✅ 与命令同签名的 CanExecute
private bool CanGoInbound(InboundOrderSummary? item) => item != null;
}