InboundMaterialPage.xaml.cs 1.8 KB
using IndustrialControl.Services;
using IndustrialControl.ViewModels;

namespace IndustrialControl.Pages;

// NEW: 支持从查询页传参
[QueryProperty(nameof(OrderNo), "orderNo")]
public partial class InboundMaterialPage : ContentPage
{
    private readonly ScanService _scanSvc;
    private readonly InboundMaterialViewModel _vm;
    // NEW: 由 Shell 设置
    public string? OrderNo { get; set; }

    public InboundMaterialPage(InboundMaterialViewModel vm, ScanService scanSvc)
    {
        InitializeComponent();
        BindingContext = vm;
        _scanSvc = scanSvc;
        _vm = vm;
    }

    protected override async void OnAppearing()
    {
        base.OnAppearing();

        // 如果带有单号参数,则加载其明细,进入图2/图3的流程
        if (!string.IsNullOrWhiteSpace(OrderNo))
        {
            await _vm.LoadOrderAsync(OrderNo);
        }

        _scanSvc.Attach(ScanEntry);
        ScanEntry.Focus();
    }

    /// <summary>
    /// 清空扫描记录
    /// </summary>
    void OnClearClicked(object sender, EventArgs e)
    {
        _vm.ClearScan();
        ScanEntry.Text = string.Empty;
        ScanEntry.Focus();
    }

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


    /// <summary>
    /// 确认入库按钮点击
    /// </summary>
    async void OnConfirmClicked(object sender, EventArgs e)
    {
        var ok = await _vm.ConfirmInboundAsync();
        if (ok)
        {
            await DisplayAlert("提示", "入库成功", "确定");
            _vm.ClearAll();
        }
        else
        {
            await DisplayAlert("提示", "入库失败,请检查数据", "确定");
        }
    }
}