InboundProductionSearchViewModel.cs 2.7 KB
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using IndustrialControl.Services;
using System.Collections.ObjectModel;
using System;
using IndustrialControl.Pages;

namespace IndustrialControl.ViewModels;

public partial class InboundProductionSearchViewModel : ObservableObject
{
    private readonly IWarehouseDataService _dataSvc;
    [ObservableProperty] private string? searchOrderNo;
    [ObservableProperty] private DateTime _createdDate = DateTime.Today;
    [ObservableProperty] private InboundOrderSummary? selectedOrder;

    public InboundProductionSearchViewModel(IWarehouseDataService dataSvc)
    {
        _dataSvc = dataSvc;
        Orders = new ObservableCollection<InboundOrderSummary>();
    }



    public ObservableCollection<InboundOrderSummary> Orders { get; }

    [RelayCommand]
    private async Task SearchAsync()
    {
        try
        {
            var list = await _dataSvc.ListInboundOrdersAsync(SearchOrderNo, CreatedDate);

            // ★ 在主线程更新 ObservableCollection,避免看起来“没刷新”
            await MainThread.InvokeOnMainThreadAsync(() =>
            {
                Orders.Clear();
                if (list != null)
                {
                    foreach (var o in list)
                        Orders.Add(o);
                }
            });

            // (排查辅助)无数据时提示一下,确认命令确实执行了
            if (list == null || !list.Any())
                await Shell.Current.DisplayAlert("提示", "未查询到任何入库单", "确定");
        }
        catch (Exception ex)
        {
            await Shell.Current.DisplayAlert("查询失败", ex.Message, "确定");
        }
    }

    // 打开明细(携带 orderNo 导航)
    [RelayCommand]
    private async Task OpenItemAsync(InboundOrderSummary item)
    {
        if (item is null) return;
        await Shell.Current.GoToAsync(
            $"{nameof(InboundProductionPage)}?orderNo={Uri.EscapeDataString(item.OrderNo)}");
    }

    [RelayCommand(CanExecute = nameof(CanGoInbound))]
    private async Task GoInboundAsync()
    {
        if (SelectedOrder == null) return;
        // 导航到原“入库明细/扫描”页面,并传入 orderNo
        await Shell.Current.GoToAsync($"//InboundProduction?orderNo={Uri.EscapeDataString(SelectedOrder.OrderNo)}");
    }
    public async Task LoadOrderAsync(string orderNo)
    {
        var order = await _dataSvc.GetInboundOrderAsync(orderNo);
        // TODO: 将 order 映射到页面“基础信息”“待入库明细”等绑定源,保持你现有绑定字段/集合不变
    }
    private bool CanGoInbound() => SelectedOrder != null;
}