OutboundMoldlViewModel.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
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using IndustrialControl.Services;
using System.Collections.ObjectModel;
namespace IndustrialControl.ViewModels
{
public partial class OutboundMoldViewModel : ObservableObject
{
[ObservableProperty] private string? scanCode;
private readonly IMoldApi _api;
// === 基础信息(由搜索页带入) ===
[ObservableProperty] private string? instockId;
[ObservableProperty] private string? instockNo;
[ObservableProperty] private string? orderType;
[ObservableProperty] private string? orderTypeName;
[ObservableProperty] private string? purchaseNo;
[ObservableProperty] private string? supplierName;
[ObservableProperty] private string? createdTime;
// 列表数据源
public ObservableCollection<string> AvailableBins { get; } = new();
public ObservableCollection<OutScannedItem> ScannedList { get; } = new();
public ObservableCollection<OutPendingItem> PendingList { get; } = new();
[ObservableProperty] private OutScannedItem? selectedScanItem;
// Tab 控制
[ObservableProperty] private bool isPendingVisible = true;
[ObservableProperty] private bool isScannedVisible = false;
// Tab 颜色
[ObservableProperty] private string pendingTabColor = "#E6F2FF";
[ObservableProperty] private string scannedTabColor = "White";
[ObservableProperty] private string pendingTextColor = "#007BFF";
[ObservableProperty] private string scannedTextColor = "#333333";
// 命令
public IRelayCommand ShowPendingCommand { get; }
public IRelayCommand ShowScannedCommand { get; }
public IAsyncRelayCommand ConfirmCommand { get; }
public OutboundMoldViewModel(IMoldApi api)
{
_api = api;
ShowPendingCommand = new RelayCommand(() => SwitchTab(true));
ShowScannedCommand = new RelayCommand(() => SwitchTab(false));
//ConfirmCommand = new AsyncRelayCommand(ConfirmOutboundAsync);
}
// ================ 初始化入口(页面 OnAppearing 调用) ================
public async Task InitializeFromSearchAsync(
string instockId, string instockNo, string orderType, string orderTypeName,
string purchaseNo, string supplierName, string createdTime)
{
// 1) 基础信息
InstockId = instockId;
InstockNo = instockNo;
OrderType = orderType;
OrderTypeName = orderTypeName;
PurchaseNo = purchaseNo;
SupplierName = supplierName;
CreatedTime = createdTime;
// 2) 下拉库位(如无接口可留空或使用后端返回的 location 聚合)
AvailableBins.Clear();
// 默认显示“待入库明细”
SwitchTab(true);
}
private void SwitchTab(bool showPending)
{
IsPendingVisible = showPending;
IsScannedVisible = !showPending;
if (showPending)
{
PendingTabColor = "#E6F2FF"; ScannedTabColor = "White";
PendingTextColor = "#007BFF"; ScannedTextColor = "#333333";
}
else
{
PendingTabColor = "White"; ScannedTabColor = "#E6F2FF";
PendingTextColor = "#333333"; ScannedTextColor = "#007BFF";
}
}
[RelayCommand]
private async Task PassScan()
{
if (string.IsNullOrWhiteSpace(InstockId))
{
await ShowTip("缺少 InstockId,无法确认。请从查询页进入。");
return;
}
await ShowTip("已确认通过。");
}
[RelayCommand]
private async Task CancelScan()
{
if (string.IsNullOrWhiteSpace(InstockId))
{
await ShowTip("缺少 InstockId,无法取消。请从查询页进入。");
return;
}
await ShowTip("已取消扫描。");
}
public async Task HandleScannedAsync(string data, string symbology)
{
var barcode = (data ?? string.Empty).Trim();
if (string.IsNullOrWhiteSpace(barcode))
{
await ShowTip("无效条码。");
return;
}
if (string.IsNullOrWhiteSpace(InstockId))
{
await ShowTip("缺少 InstockId,无法入库。请从查询页进入。");
return;
}
// 调用扫码入库接口
var resp = await _api.InStockByBarcodeAsync(InstockId!, barcode);
if (!resp.Succeeded)
{
await ShowTip(string.IsNullOrWhiteSpace(resp.Message) ? "入库失败,请重试或检查条码。" : resp.Message!);
return;
}
}
private Task ShowTip(string message) =>
Shell.Current?.DisplayAlert("提示", message, "确定") ?? Task.CompletedTask;
public void ClearScan() => ScannedList.Clear();
public void ClearAll()
{
PendingList.Clear();
ScannedList.Clear();
}
public async Task<bool> ConfirmOutboundAsync()
{
if (string.IsNullOrWhiteSpace(InstockId))
{
await ShowTip("缺少 InstockId,无法确认入库。请从查询页进入。");
return false;
}
return true;
}
}
// === 列表行模型 ===
}