WorkOrderSearchViewModel.cs 3.1 KB
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
using System.Windows.Input;

namespace IndustrialControl.ViewModels;

public class WorkOrderSearchViewModel : ObservableObject
{
    public ObservableCollection<WorkOrderDto> Orders { get; } = new();

    private string? _keyword;
    public string? Keyword
    {
        get => _keyword;
        set => SetProperty(ref _keyword, value);
    }

    public DateTime StartDate { get; set; } = DateTime.Today.AddDays(-7);
    public DateTime EndDate { get; set; } = DateTime.Today;

    public List<string> StatusList { get; } = new() { "待执行", "执行中", "已完成", "已取消" };
    private string? _selectedStatus = "待执行";
    public string? SelectedStatus
    {
        get => _selectedStatus;
        set => SetProperty(ref _selectedStatus, value);
    }

    private WorkOrderDto? _selectedOrder;
    public WorkOrderDto? SelectedOrder
    {
        get => _selectedOrder;
        set => SetProperty(ref _selectedOrder, value);
    }

    public ICommand SearchCommand { get; }
    public ICommand ClearCommand { get; }

    public WorkOrderSearchViewModel()
    {
        SearchCommand = new AsyncRelayCommand(SearchAsync);
        ClearCommand = new RelayCommand(Clear);
    }

    public async Task SearchAsync()
    {
        // TODO: 调后端 API;这里先用 Mock
        await Task.Delay(120);
        Orders.Clear();

        // 伪数据(根据条件简单过滤)
        var all = MockOrders();
        var filtered = all.Where(o =>
            (string.IsNullOrWhiteSpace(Keyword) || o.OrderNo.Contains(Keyword!, StringComparison.OrdinalIgnoreCase)) &&
            o.CreateDate.Date >= StartDate.Date && o.CreateDate.Date <= EndDate.Date &&
            (string.IsNullOrWhiteSpace(SelectedStatus) || o.Status == SelectedStatus)
        );

        foreach (var m in filtered) Orders.Add(m);
    }

    public void Clear()
    {
        Keyword = string.Empty;
        StartDate = DateTime.Today.AddDays(-7);
        EndDate = DateTime.Today;
        SelectedStatus = "待执行";
        Orders.Clear();
    }

    private IEnumerable<WorkOrderDto> MockOrders()
    {
        yield return new WorkOrderDto
        {
            OrderNo = "SCGD20250601002",
            OrderName = "XXXXXXXXXX",
            Status = "待执行",
            ProductName = "梅林午餐肉罐头198g",
            Quantity = 10000,
            CreateDate = DateTime.Today.AddDays(-3)
        };
        yield return new WorkOrderDto
        {
            OrderNo = "SCGD20250601003",
            OrderName = "XXXXXXXXXX",
            Status = "待执行",
            ProductName = "梅林午餐肉罐头198g",
            Quantity = 5000,
            CreateDate = DateTime.Today.AddDays(-2)
        };
        yield return new WorkOrderDto
        {
            OrderNo = "SCGD20250601004",
            OrderName = "XXXXXXXXXX",
            Status = "执行中",
            ProductName = "梅林午餐肉罐头198g",
            Quantity = 8000,
            CreateDate = DateTime.Today.AddDays(-1)
        };
    }
}