Browse Source

1688采购窗口 延迟触发

qianyi
shanji 3 years ago
parent
commit
7eef9a6b7f
  1. 1
      BBWY.Client/App.xaml.cs
  2. 2
      BBWY.Client/BBWY.Client.csproj
  3. 18
      BBWY.Client/Models/Product/PurchaseSchemeProductSku.cs
  4. 5
      BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs
  5. 16
      BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs
  6. 4
      BBWY.Client/Views/Order/ChoosePurchaseScheme.xaml
  7. 24
      BBWY.Client/Views/Purchase/1688Purchase.xaml
  8. 7
      BBWY.Client/Views/Purchase/1688Purchase.xaml.cs
  9. 70
      BBWY.Common/TaskSchedulers/DelayTrigger.cs

1
BBWY.Client/App.xaml.cs

@ -3,6 +3,7 @@ using BBWY.Client.ViewModels;
using BBWY.Common.Extensions;
using BBWY.Common.Http;
using BBWY.Common.Models;
using BBWY.Common.Trigger;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;

2
BBWY.Client/BBWY.Client.csproj

@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
<ApplicationIcon>Resources\Images\bbwylogo.ico</ApplicationIcon>

18
BBWY.Client/Models/Product/PurchaseSchemeProductSku.cs

@ -1,4 +1,6 @@
namespace BBWY.Client.Models
using System;
namespace BBWY.Client.Models
{
/// <summary>
/// 采购商品的Sku
@ -33,11 +35,23 @@
public long SkuPurchaseSchemeId { get; set; }
public long UserId { get; set; }
public int ItemTotal { get => itemTotal; set { Set(ref itemTotal, value); } }
public int ItemTotal
{
get => itemTotal; set
{
if (Set(ref itemTotal, value))
{
SkuAmount = value * Price;
OnItemTotalChanged?.Invoke(value);
}
}
}
public decimal SkuAmount { get => skuAmount; set { Set(ref skuAmount, value); } }
private int itemTotal;
private decimal skuAmount;
public Action<int> OnItemTotalChanged { get; set; }
}
}

5
BBWY.Client/ViewModels/Order/ChoosePurchaseSchemeViewModel.cs

@ -1,5 +1,6 @@
using BBWY.Client.APIServices;
using BBWY.Client.Models;
using BBWY.Client.Views.Purchase;
using BBWY.Common.Models;
using GalaSoft.MvvmLight.Command;
using System.Collections.Generic;
@ -46,6 +47,7 @@ namespace BBWY.Client.ViewModels
protected override void Unload()
{
this.ItemTotal = 0;
this.OrderId = this.SkuId = this.SkuName = string.Empty;
PurchaseSchemeList.Clear();
}
@ -100,7 +102,8 @@ namespace BBWY.Client.ViewModels
public void PreviewPurchase(PurchaseScheme purchaseScheme)
{
var p = new _1688Purchase(this.OrderId, this.ItemTotal, purchaseScheme);
p.ShowDialog();
}
}
}

16
BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs

@ -1,5 +1,6 @@
using BBWY.Client.APIServices;
using BBWY.Client.Models;
using BBWY.Common.Trigger;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
@ -21,10 +22,13 @@ namespace BBWY.Client.ViewModels
private int skuItemCount;
private bool isLoading;
private OneBoundAPIService oneBoundAPIService;
private DelayTrigger delayTrigger;
public _1688PreviewPurchaseViewModel(OneBoundAPIService oneBoundAPIService)
{
this.oneBoundAPIService = oneBoundAPIService;
this.delayTrigger = new DelayTrigger();
this.delayTrigger.OnExecute = OnDelayTriggerExecute;
PurchaseSchemeProductSkuList = new ObservableCollection<PurchaseSchemeProductSku>();
}
@ -74,6 +78,7 @@ namespace BBWY.Client.ViewModels
{
PurchaseSchemeProductSkuList.Add(purchaseSchemeProductSku);
purchaseSchemeProductSku.ItemTotal = skuItemCount;
purchaseSchemeProductSku.OnItemTotalChanged = OnItemTotalChanged;
}
}
});
@ -139,5 +144,16 @@ namespace BBWY.Client.ViewModels
}
return "pack://application:,,,/Resources/Images/defaultItem.png";
}
private void OnItemTotalChanged(int itemTotal)
{
Console.WriteLine($"OnItemTotalChanged {DateTime.Now} {itemTotal}");
this.delayTrigger.SetKey(itemTotal.ToString());
}
private void OnDelayTriggerExecute(string key)
{
}
}
}

4
BBWY.Client/Views/Order/ChoosePurchaseScheme.xaml

@ -48,7 +48,9 @@
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<c:BButton Content="下单" HorizontalAlignment="Stretch"
Background="#1CC2A2"/>
Background="#1CC2A2"
Command="{Binding DataContext.PreviewPurchaseCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding }"/>
<c:BButton Content="编辑" Grid.Column="1" HorizontalAlignment="Stretch"
Background="#02A7F0"
Command="{Binding DataContext.EditCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"

24
BBWY.Client/Views/Purchase/1688Purchase.xaml

@ -5,12 +5,21 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BBWY.Client.Views.Purchase"
xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
mc:Ignorable="d"
Title="提交订单" Height="600" Width="800"
Style="{StaticResource bwstyle}"
MinButtonVisibility="Collapsed"
MaxButtonVisibility="Collapsed"
DataContext="{Binding _1688PreviewPurchase,Source={StaticResource Locator}}">
<b:Interaction.Triggers>
<b:EventTrigger EventName="Loaded">
<b:InvokeCommandAction Command="{Binding LoadCommand}"/>
</b:EventTrigger>
<b:EventTrigger EventName="Unloaded">
<b:InvokeCommandAction Command="{Binding UnloadCommand}"/>
</b:EventTrigger>
</b:Interaction.Triggers>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
@ -25,7 +34,8 @@
</Border>
<DataGrid Grid.Row="1"
ItemsSource="{Binding PurchaseSchemeProductSkuList}">
ItemsSource="{Binding PurchaseSchemeProductSkuList}"
RowHeight="90">
<DataGrid.Columns>
<DataGridTemplateColumn Header="货品信息" HeaderStyle="{StaticResource ColumnHeaderStyle_Center}" Width="1*">
<DataGridTemplateColumn.CellTemplate>
@ -40,21 +50,25 @@
<c:BAsyncImage UrlSource="{Binding Logo}"
Width="80" DecodePixelWidth="80"
VerticalAlignment="Top" Margin="0,5,0,0"/>
<TextBlock Text="{Binding Title}"/>
<TextBlock Text="{Binding Title}" Grid.Column="1"
VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="单价" HeaderStyle="{StaticResource ColumnHeaderStyle_Center}" Width="80" Binding="{Binding Price}"/>
<DataGridTextColumn Header="单价" HeaderStyle="{StaticResource ColumnHeaderStyle_Center}" Width="80" Binding="{Binding Price}"
ElementStyle="{StaticResource middleTextBlock}"/>
<DataGridTemplateColumn Header="数量" HeaderStyle="{StaticResource ColumnHeaderStyle_Center}" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<c:BTextBox Text="{Binding ItemTotal,Converter={StaticResource inputNumberConverter},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
<c:BTextBox Text="{Binding ItemTotal,Converter={StaticResource inputNumberConverter},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Width="60"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="金额" HeaderStyle="{StaticResource ColumnHeaderStyle_Center}" Width="80"
Binding="{Binding SkuAmount,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"/>
Binding="{Binding SkuAmount,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource middleTextBlock}"/>
</DataGrid.Columns>
</DataGrid>

7
BBWY.Client/Views/Purchase/1688Purchase.xaml.cs

@ -1,4 +1,6 @@
using BBWY.Controls;
using BBWY.Client.Models;
using BBWY.Client.ViewModels;
using BBWY.Controls;
namespace BBWY.Client.Views.Purchase
{
@ -7,9 +9,10 @@ namespace BBWY.Client.Views.Purchase
/// </summary>
public partial class _1688Purchase : BWindow
{
public _1688Purchase()
public _1688Purchase(string orderId, int skuItemCount, PurchaseScheme purchaseScheme)
{
InitializeComponent();
(this.DataContext as _1688PreviewPurchaseViewModel).SetData(orderId, skuItemCount, purchaseScheme);
}
}
}

70
BBWY.Common/TaskSchedulers/DelayTrigger.cs

@ -0,0 +1,70 @@
using System;
using System.Threading;
using System.Threading.Tasks;
namespace BBWY.Common.Trigger
{
/// <summary>
/// 延迟触发组件
/// </summary>
public class DelayTrigger
{
public DelayTrigger(int delayTime = 1000)
{
if (delayTime < 1000)
delayTime = 1000;
this.delayTime = delayTime;
}
/// <summary>
/// 延迟执行时间(ms)
/// </summary>
private int delayTime;
/// <summary>
/// 关键字
/// </summary>
private string currentKey;
/// <summary>
/// 是否可以执行
/// </summary>
private volatile bool canExecute;
/// <summary>
/// 是否正在延迟响应中
/// </summary>
private volatile bool isDelaying;
public Action<string> OnExecute;
public void SetKey(string key)
{
currentKey = key;
if (isDelaying)
{
canExecute = false;
return;
}
Task.Factory.StartNew(delegate
{
isDelaying = true;
while (true)
{
canExecute = true;
Thread.Sleep(delayTime);
if (canExecute)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"DelayTrigger {currentKey} Execute at {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")}");
Console.ResetColor();
OnExecute?.Invoke(currentKey);
isDelaying = false;
break;
}
}
});
}
}
}
Loading…
Cancel
Save