WorkOrderSearchPage.xaml.cs 2.0 KB
using IndustrialControl.Services;
using IndustrialControl.ViewModels;

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
        {
            // 如果你的 ItemsSource 元素类型是 WorkOrderDto,请把 WorkOrderSummary 换成 WorkOrderDto
            if (e.Parameter is not WorkOrderDto item) return;

            // 跳到目标页并传参(示例为 MoldOutboundExecutePage;按需改成你的页名)
            await Shell.Current.GoToAsync(
                $"{nameof(MoldOutboundExecutePage)}?orderNo={Uri.EscapeDataString(item.OrderNo)}");
        }
        catch (Exception ex)
        {
            await DisplayAlert("导航失败", ex.Message, "确定");
        }
    }

    private async void OnScanHintClicked(object sender, EventArgs e)
        => await DisplayAlert("提示", "此按钮预留摄像头扫码;硬件扫描直接扣扳机。", "确定");
}