using BBWYB.Client.APIServices; using BBWYB.Client.Models; using BBWYB.Client.Views.Order; using BBWYB.Client.Views.Purchase; using BBWYB.Common.Extensions; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; namespace BBWYB.Client.ViewModels { public class ChoosePurchaseSchemeViewModel : BaseVM { private PurchaseService purchaseService; private GlobalContext globalContext; private Order order; private bool freeChoice; private bool isResponse; public IList SkuGroup { get; set; } public ICommand ConfirmCommand { get; set; } public bool FreeChoice { get => freeChoice; set { SetProperty(ref freeChoice, value); } } public ChoosePurchaseSchemeViewModel(PurchaseService purchaseService, GlobalContext globalContext) { this.purchaseService = purchaseService; this.globalContext = globalContext; this.SkuGroup = new ObservableCollection(); ConfirmCommand = new RelayCommand(Confirm); } protected override void Load() { Task.Factory.StartNew(() => LoadScheme()); } public void SetData(Order order) { this.order = order; } private void LoadScheme() { var skuIdList = order.ItemList.Select(osku => osku.SkuId).ToList(); var response = purchaseService.GetPurchaseSchemeList(skuIdList, shopId: globalContext.User.Shop.ShopId); if (!response.Success) { App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "提示")); return; } if (response.Data == null || response.Data.Count() == 0) return; var groups = response.Data.GroupBy(s => s.SkuId); App.Current.Dispatcher.Invoke(() => { foreach (var g in groups) { var skuGroup = new PurchaseSchemeSkuGroup() { SkuId = g.Key, SchemeList = g.Select(p => PurchaseScheme.Convert(p)).ToList() }; skuGroup.OnSchemeChanged = OnSchemeChanged; SkuGroup.Add(skuGroup); } }); } private void Confirm() { if (SkuGroup.Any(s => s.SelectedScheme == null)) { App.Current.Dispatcher.Invoke(() => MessageBox.Show("采购方案选择不完整", "提示")); return; } var schemeList = new List(); foreach (var g in SkuGroup) { schemeList.Add(g.SelectedScheme); } var p = new OnlinePurchase(order, schemeList); p.ShowDialog(); // GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(null, "ChoosePurchaseScheme_Close"); WeakReferenceMessenger.Default.Send(new Message_ChoosePurchaseSchemeClose(null)); } private void OnSchemeChanged(PurchaseSchemeSkuGroup skuGroup) { if (FreeChoice) return; isResponse = false; isResponse = true; } } }