OutboundFinishedViewModel.cs
5.6 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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
namespace IndustrialControl.ViewModels
{
public partial class OutboundFinishedViewModel : ObservableObject
{
#region 基础信息
[ObservableProperty] private string orderNo;
[ObservableProperty] private string deliveryNo;
[ObservableProperty] private string deliveryTime;
[ObservableProperty] private string remark;
[ObservableProperty] private string? scanCode;
#endregion
#region Tab 状态
[ObservableProperty] private bool isPendingVisible = true;
[ObservableProperty] private bool isScannedVisible = false;
[ObservableProperty] private string pendingTabColor = "#2196F3";
[ObservableProperty] private string pendingTextColor = "White";
[ObservableProperty] private string scannedTabColor = "White";
[ObservableProperty] private string scannedTextColor = "Black";
#endregion
#region 数据集合
public ObservableCollection<OutPendingItem> PendingList { get; } = new();
public ObservableCollection<OutboundScannedItem> ScannedList { get; } = new();
#endregion
public OutboundFinishedViewModel()
{
// 测试数据
OrderNo = "CK20250001";
DeliveryNo = "FH20250088";
DeliveryTime = "2025-08-15";
Remark = "优先出库";
PendingList.Add(new OutPendingItem { Name = "成品A", Code = "CP001", Spec = "规格1", Bin = "A01", BatchNo = "B20250815", OutQty = 10 });
PendingList.Add(new OutPendingItem { Name = "成品B", Code = "CP002", Spec = "规格2", Bin = "A02", BatchNo = "B20250815", OutQty = 5 });
ScannedList.Add(new OutboundScannedItem { Barcode = "BC0001", Name = "成品A", Qty = 2 });
ScannedList.Add(new OutboundScannedItem { Barcode = "BC0002", Name = "成品B", Qty = 1 });
}
#region Tab 切换命令
[RelayCommand]
private void ShowPending()
{
IsPendingVisible = true;
IsScannedVisible = false;
PendingTabColor = "#2196F3";
PendingTextColor = "White";
ScannedTabColor = "White";
ScannedTextColor = "Black";
}
[RelayCommand]
private void ShowScanned()
{
IsPendingVisible = false;
IsScannedVisible = true;
PendingTabColor = "White";
PendingTextColor = "Black";
ScannedTabColor = "#2196F3";
ScannedTextColor = "White";
}
#endregion
#region 底部按钮命令
[RelayCommand]
private void PassScan()
{
var selected = ScannedList.Where(s => s.IsSelected).ToList();
if (!selected.Any()) return;
foreach (var item in selected)
{
// 模拟通过逻辑
item.IsSelected = false;
}
}
[RelayCommand]
private void CancelScan()
{
var selected = ScannedList.Where(s => s.IsSelected).ToList();
if (!selected.Any()) return;
foreach (var item in selected)
{
ScannedList.Remove(item);
}
}
[RelayCommand]
private async Task Confirm()
{
// 模拟提交
await Task.Delay(300);
// 这里你可以加出库成功提示逻辑
ClearAll();
}
#endregion
#region 其他方法
public void ClearAll()
{
PendingList.Clear();
ScannedList.Clear();
OrderNo = string.Empty;
DeliveryNo = string.Empty;
DeliveryTime = string.Empty;
Remark = string.Empty;
}
public void ClearScan()
{
ScannedList.Clear();
}
#endregion
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 OutPendingItem
{
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 class OutboundScannedItem
{
public bool IsSelected { get; set; }
public string Barcode { get; set; }
public string Name { get; set; }
public int Qty { get; set; }
}
}