OutboundFinishedViewModel.cs 5.6 KB
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;

namespace IndustrialControl.ViewModels
{
    public partial class OutboundFinishedViewModel : ObservableObject
    {
        #region 基础信息
        [ObservableProperty] private string orderNo;
        [ObservableProperty] private string deliveryNo;
        [ObservableProperty] private string deliveryTime;
        [ObservableProperty] private string remark;
        [ObservableProperty] private string? scanCode;
        #endregion

        #region Tab 状态
        [ObservableProperty] private bool isPendingVisible = true;
        [ObservableProperty] private bool isScannedVisible = false;

        [ObservableProperty] private string pendingTabColor = "#2196F3";
        [ObservableProperty] private string pendingTextColor = "White";
        [ObservableProperty] private string scannedTabColor = "White";
        [ObservableProperty] private string scannedTextColor = "Black";
        #endregion

        #region 数据集合
        public ObservableCollection<OutPendingItem> PendingList { get; } = new();
        public ObservableCollection<OutboundScannedItem> ScannedList { get; } = new();
        #endregion

        public OutboundFinishedViewModel()
        {
            // 测试数据
            OrderNo = "CK20250001";
            DeliveryNo = "FH20250088";
            DeliveryTime = "2025-08-15";
            Remark = "优先出库";

            PendingList.Add(new OutPendingItem { Name = "成品A", Code = "CP001", Spec = "规格1", Bin = "A01", BatchNo = "B20250815", OutQty = 10 });
            PendingList.Add(new OutPendingItem { Name = "成品B", Code = "CP002", Spec = "规格2", Bin = "A02", BatchNo = "B20250815", OutQty = 5 });

            ScannedList.Add(new OutboundScannedItem { Barcode = "BC0001", Name = "成品A", Qty = 2 });
            ScannedList.Add(new OutboundScannedItem { Barcode = "BC0002", Name = "成品B", Qty = 1 });
        }

        #region Tab 切换命令
        [RelayCommand]
        private void ShowPending()
        {
            IsPendingVisible = true;
            IsScannedVisible = false;
            PendingTabColor = "#2196F3";
            PendingTextColor = "White";
            ScannedTabColor = "White";
            ScannedTextColor = "Black";
        }

        [RelayCommand]
        private void ShowScanned()
        {
            IsPendingVisible = false;
            IsScannedVisible = true;
            PendingTabColor = "White";
            PendingTextColor = "Black";
            ScannedTabColor = "#2196F3";
            ScannedTextColor = "White";
        }
        #endregion

        #region 底部按钮命令
        [RelayCommand]
        private void PassScan()
        {
            var selected = ScannedList.Where(s => s.IsSelected).ToList();
            if (!selected.Any()) return;

            foreach (var item in selected)
            {
                // 模拟通过逻辑
                item.IsSelected = false;
            }
        }

        [RelayCommand]
        private void CancelScan()
        {
            var selected = ScannedList.Where(s => s.IsSelected).ToList();
            if (!selected.Any()) return;

            foreach (var item in selected)
            {
                ScannedList.Remove(item);
            }
        }

        [RelayCommand]
        private async Task Confirm()
        {
            // 模拟提交
            await Task.Delay(300);
            // 这里你可以加出库成功提示逻辑
            ClearAll();
        }
        #endregion

        #region 其他方法
        public void ClearAll()
        {
            PendingList.Clear();
            ScannedList.Clear();
            OrderNo = string.Empty;
            DeliveryNo = string.Empty;
            DeliveryTime = string.Empty;
            Remark = string.Empty;
        }
        public void ClearScan()
        {
            ScannedList.Clear();
        }

        #endregion

        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 OutPendingItem
    {
        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 class OutboundScannedItem
    {
        public bool IsSelected { get; set; }
        public string Barcode { get; set; }
        public string Name { get; set; }
        public int Qty { get; set; }
    }
}