WorkOrderSearchPage.xaml.cs
2.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
using IndustrialControl.Models;
using IndustrialControl.Services;
using IndustrialControl.ViewModels;
using System.Text.Json;
namespace IndustrialControl.Pages;
public partial class WorkOrderSearchPage : ContentPage
{
private readonly ScanService _scanSvc;
private readonly WorkOrderSearchViewModel _vm;
public WorkOrderSearchPage(WorkOrderSearchViewModel vm, ScanService scanSvc)
{
InitializeComponent();
BindingContext = vm;
_vm = vm;
_scanSvc = scanSvc;
// 与现有页面一致的扫码策略
_scanSvc.Prefix = null;
_scanSvc.Suffix = null;
_scanSvc.DebounceMs = 0;
}
protected override void OnAppearing()
{
base.OnAppearing();
_scanSvc.Scanned += OnScanned;
_scanSvc.StartListening();
_scanSvc.Attach(OrderEntry); // 支持键盘/手持枪统一输入
OrderEntry.Focus();
}
protected override void OnDisappearing()
{
_scanSvc.Scanned -= OnScanned;
_scanSvc.StopListening();
base.OnDisappearing();
}
private void OnScanned(string data, string type)
{
MainThread.BeginInvokeOnMainThread(async () =>
{
_vm.Keyword = data; // 回填查询条件
await _vm.SearchAsync(); // 触发查询
});
}
// 点整张卡片跳转(推荐)
private async void OnOrderTapped(object sender, TappedEventArgs e)
{
try
{
if (e.Parameter is not WorkOrderDto item) return;
var json = JsonSerializer.Serialize(item);
await Shell.Current.GoToAsync(
nameof(MoldOutboundExecutePage),
new Dictionary<string, object?>
{
// 执行页用 IQueryAttributable 接收:key 必须叫 "orderDto"
["orderDto"] = json
});
}
catch (Exception ex)
{
await DisplayAlert("导航失败", ex.Message, "确定");
}
}
private async void OnScanHintClicked(object sender, EventArgs e)
=> await DisplayAlert("提示", "此按钮预留摄像头扫码;硬件扫描直接扣扳机。", "确定");
}