OutboundFinishedViewModel.cs 4.4 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;
        #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 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; }
    }
}