OutboundMaterialViewModel.cs 5.5 KB
using CommunityToolkit.Mvvm.ComponentModel;
using System.Collections.ObjectModel;

namespace IndustrialControl.ViewModels
{
    public partial class OutboundMaterialViewModel : ObservableObject
    {
        // ===== 基础信息 =====
        [ObservableProperty] private string orderNo;
        [ObservableProperty] private string deliveryNo;
        [ObservableProperty] private string customerName;
        [ObservableProperty] private string deliveryTime;
        [ObservableProperty] private string linkedOrderNo;
        [ObservableProperty] private string remark;

        // ===== Tab 切换状态 =====
        [ObservableProperty] private bool isPendingVisible = true;
        [ObservableProperty] private bool isScannedVisible = false;

        [ObservableProperty] private Color pendingTabColor = Colors.LightBlue;
        [ObservableProperty] private Color pendingTextColor = Colors.White;
        [ObservableProperty] private Color scannedTabColor = Colors.White;
        [ObservableProperty] private Color scannedTextColor = Colors.Black;
        [ObservableProperty] private string? scanCode;

        // ===== 列表数据 =====
        public ObservableCollection<OutboundPendingItem> PendingList { get; set; } = new();
        public ObservableCollection<ScannedItem> ScannedList { get; set; } = new();

        // ===== 扫码输入 =====

        public OutboundMaterialViewModel()
        {
            LoadSampleData();
        }

        private void LoadSampleData()
        {
            // 基础信息示例
            OrderNo = "XXXXX";
            DeliveryNo = "SCGD20250601002";
            CustomerName = "CGD2736273";
            DeliveryTime = "2025-08-15";
            LinkedOrderNo = "CGD2736273";
            Remark = "优先出库";

            // 出库单明细
            PendingList.Add(new OutboundPendingItem { Name = "产品1", Code = "XXX", Spec = "A101", Bin = "A101", BatchNo = "B20250815", OutQty = 10, ScannedQty = 10 });
            PendingList.Add(new OutboundPendingItem { Name = "产品2", Code = "YYY", Spec = "A102", Bin = "A102", BatchNo = "B20250815", OutQty = 5, ScannedQty = 2 });
            PendingList.Add(new OutboundPendingItem { Name = "产品3", Code = "ZZZ", Spec = "A103", Bin = "A103", BatchNo = "B20250815", OutQty = 8, ScannedQty = 0 });

            // 扫描明细
            ScannedList.Add(new ScannedItem { Barcode = "FSC2025060300001", Name = "XXXX", Qty = 1, IsSelected = true });
            ScannedList.Add(new ScannedItem { Barcode = "FSC2025060300002", Name = "XXXX", Qty = 1, IsSelected = true });
            ScannedList.Add(new ScannedItem { Barcode = "FSC2025060300003", Name = "XXXX", Qty = 1, IsSelected = false });
            ScannedList.Add(new ScannedItem { Barcode = "FSC2025060300004", Name = "XXXX", Qty = 1, IsSelected = false });
        }

        // ===== 操作方法 =====
        public void ClearScan()
        {
            ScanCode = string.Empty;
        }

        public void ClearAll()
        {
            PendingList.Clear();
            ScannedList.Clear();
            ScanCode = string.Empty;
        }

        public void PassSelectedScan()
        {
            foreach (var item in ScannedList.Where(s => s.IsSelected))
            {
                // 逻辑示例:标记为已通过(这里可加业务处理)
            }
        }

        public void CancelSelectedScan()
        {
            var toRemove = ScannedList.Where(s => s.IsSelected).ToList();
            foreach (var item in toRemove)
                ScannedList.Remove(item);
        }

        public async Task<bool> ConfirmOutboundAsync()
        {
            // 模拟出库确认逻辑
            await Task.Delay(500); // 模拟网络延迟
            return true;
        }
        public async Task HandleScannedAsync(string data, string symbology)
        {
            // TODO: 你的规则(判断是订单号/物料码/包装码等)
            //      然后:查询接口 / 加入列表 / 自动提交
            await Task.CompletedTask;
        }

        public async Task LoadOrderAsync(string orderNo)
        {
            // 0) 清空旧数据
            ClearAll();

            // 1) 基础信息
            //var order = await _warehouseSvc.GetInboundOrderAsync(orderNo);
            //OrderNo = order.OrderNo;
            //try
            //{
            //    var bins = await _warehouseSvc.ListInboundBinsAsync(orderNo);
            //    AvailableBins.Clear();
            //    foreach (var b in bins) AvailableBins.Add(b);
            //}
            //catch
            //{
            //    // 兜底:本地 mock,避免空集合导致 Picker 无选项
            //    AvailableBins.Clear();
            //    foreach (var b in new[] { "CK1_A201", "CK1_A202", "CK1_A203", "CK1_A204" })
            //        AvailableBins.Add(b);
            //}
            //var defaultBin = AvailableBins.FirstOrDefault() ?? "CK1_A201";
        }
    }

    // 出库单明细数据模型
    public class OutboundPendingItem
    {
        public string Name { get; set; }
        public string Code { get; set; }
        public string Spec { get; set; }
        public string Bin { get; set; }
        public string BatchNo { get; set; }
        public int OutQty { get; set; }
        public int ScannedQty { get; set; }
    }

    // 扫描明细数据模型
    public class ScannedItem
    {
        public bool IsSelected { get; set; }
        public string Barcode { get; set; }
        public string Name { get; set; }
        public int Qty { get; set; }
    }
}