OutboundMaterialViewModel.cs
5.5 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
using CommunityToolkit.Mvvm.ComponentModel;
using System.Collections.ObjectModel;
namespace IndustrialControl.ViewModels
{
public partial class OutboundMaterialViewModel : ObservableObject
{
// ===== 基础信息 =====
[ObservableProperty] private string orderNo;
[ObservableProperty] private string deliveryNo;
[ObservableProperty] private string customerName;
[ObservableProperty] private string deliveryTime;
[ObservableProperty] private string linkedOrderNo;
[ObservableProperty] private string remark;
// ===== Tab 切换状态 =====
[ObservableProperty] private bool isPendingVisible = true;
[ObservableProperty] private bool isScannedVisible = false;
[ObservableProperty] private Color pendingTabColor = Colors.LightBlue;
[ObservableProperty] private Color pendingTextColor = Colors.White;
[ObservableProperty] private Color scannedTabColor = Colors.White;
[ObservableProperty] private Color scannedTextColor = Colors.Black;
[ObservableProperty] private string? scanCode;
// ===== 列表数据 =====
public ObservableCollection<OutboundPendingItem> PendingList { get; set; } = new();
public ObservableCollection<ScannedItem> ScannedList { get; set; } = new();
// ===== 扫码输入 =====
public OutboundMaterialViewModel()
{
LoadSampleData();
}
private void LoadSampleData()
{
// 基础信息示例
OrderNo = "XXXXX";
DeliveryNo = "SCGD20250601002";
CustomerName = "CGD2736273";
DeliveryTime = "2025-08-15";
LinkedOrderNo = "CGD2736273";
Remark = "优先出库";
// 出库单明细
PendingList.Add(new OutboundPendingItem { Name = "产品1", Code = "XXX", Spec = "A101", Bin = "A101", BatchNo = "B20250815", OutQty = 10, ScannedQty = 10 });
PendingList.Add(new OutboundPendingItem { Name = "产品2", Code = "YYY", Spec = "A102", Bin = "A102", BatchNo = "B20250815", OutQty = 5, ScannedQty = 2 });
PendingList.Add(new OutboundPendingItem { Name = "产品3", Code = "ZZZ", Spec = "A103", Bin = "A103", BatchNo = "B20250815", OutQty = 8, ScannedQty = 0 });
// 扫描明细
ScannedList.Add(new ScannedItem { Barcode = "FSC2025060300001", Name = "XXXX", Qty = 1, IsSelected = true });
ScannedList.Add(new ScannedItem { Barcode = "FSC2025060300002", Name = "XXXX", Qty = 1, IsSelected = true });
ScannedList.Add(new ScannedItem { Barcode = "FSC2025060300003", Name = "XXXX", Qty = 1, IsSelected = false });
ScannedList.Add(new ScannedItem { Barcode = "FSC2025060300004", Name = "XXXX", Qty = 1, IsSelected = false });
}
// ===== 操作方法 =====
public void ClearScan()
{
ScanCode = string.Empty;
}
public void ClearAll()
{
PendingList.Clear();
ScannedList.Clear();
ScanCode = string.Empty;
}
public void PassSelectedScan()
{
foreach (var item in ScannedList.Where(s => s.IsSelected))
{
// 逻辑示例:标记为已通过(这里可加业务处理)
}
}
public void CancelSelectedScan()
{
var toRemove = ScannedList.Where(s => s.IsSelected).ToList();
foreach (var item in toRemove)
ScannedList.Remove(item);
}
public async Task<bool> ConfirmOutboundAsync()
{
// 模拟出库确认逻辑
await Task.Delay(500); // 模拟网络延迟
return true;
}
public async Task HandleScannedAsync(string data, string symbology)
{
// TODO: 你的规则(判断是订单号/物料码/包装码等)
// 然后:查询接口 / 加入列表 / 自动提交
await Task.CompletedTask;
}
public async Task LoadOrderAsync(string orderNo)
{
// 0) 清空旧数据
ClearAll();
// 1) 基础信息
//var order = await _warehouseSvc.GetInboundOrderAsync(orderNo);
//OrderNo = order.OrderNo;
//try
//{
// var bins = await _warehouseSvc.ListInboundBinsAsync(orderNo);
// AvailableBins.Clear();
// foreach (var b in bins) AvailableBins.Add(b);
//}
//catch
//{
// // 兜底:本地 mock,避免空集合导致 Picker 无选项
// AvailableBins.Clear();
// foreach (var b in new[] { "CK1_A201", "CK1_A202", "CK1_A203", "CK1_A204" })
// AvailableBins.Add(b);
//}
//var defaultBin = AvailableBins.FirstOrDefault() ?? "CK1_A201";
}
}
// 出库单明细数据模型
public class OutboundPendingItem
{
public string Name { get; set; }
public string Code { get; set; }
public string Spec { get; set; }
public string Bin { get; set; }
public string BatchNo { get; set; }
public int OutQty { get; set; }
public int ScannedQty { get; set; }
}
// 扫描明细数据模型
public class ScannedItem
{
public bool IsSelected { get; set; }
public string Barcode { get; set; }
public string Name { get; set; }
public int Qty { get; set; }
}
}