OutboundMaterialViewModel.cs 4.4 KB
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using System.Linq;
using System.Windows.Input;
using Microsoft.Maui.Graphics;

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;

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

        // ===== 扫码输入 =====
        [ObservableProperty] private string scanCode;

        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 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; }
    }
}