Browse Source

完善订单列表,对接店铺设置

updatebug
shanji 2 years ago
parent
commit
c3d9a2368e
  1. 46
      BBWYB.Client/APIServices/OrderService.cs
  2. 35
      BBWYB.Client/APIServices/PurchaseOrderService.cs
  3. 27
      BBWYB.Client/APIServices/ShopService.cs
  4. 2
      BBWYB.Client/Models/APIModel/Response/Order/ConsigneeResponse.cs
  5. 79
      BBWYB.Client/Models/APIModel/Response/Order/OrderCostDetailResponse.cs
  6. 82
      BBWYB.Client/Models/APIModel/Response/Order/OrderCostResponse.cs
  7. 14
      BBWYB.Client/Models/APIModel/Response/Order/OrderCouponResponse.cs
  8. 32
      BBWYB.Client/Models/APIModel/Response/Order/OrderDropShippingResponse.cs
  9. 101
      BBWYB.Client/Models/APIModel/Response/Order/OrderResponse.cs
  10. 35
      BBWYB.Client/Models/APIModel/Response/Order/OrderSkuResponse.cs
  11. 6
      BBWYB.Client/Models/MappingProfile.cs
  12. 37
      BBWYB.Client/Models/Order/Consignee.cs
  13. 169
      BBWYB.Client/Models/Order/Order.cs
  14. 7
      BBWYB.Client/Models/Order/OrderCost.cs
  15. 7
      BBWYB.Client/Models/Order/OrderCostDetail.cs
  16. 16
      BBWYB.Client/Models/Order/OrderCostDetailGroup.cs
  17. 6
      BBWYB.Client/Models/Order/OrderSku.cs
  18. 71
      BBWYB.Client/Models/Order/RelationPurchaseOrderSku.cs
  19. 43
      BBWYB.Client/ViewModels/MainViewModel.cs
  20. 150
      BBWYB.Client/ViewModels/Order/OrderViewModel.cs
  21. 100
      BBWYB.Client/ViewModels/Vender/ShopSettingViewModel.cs
  22. 21
      BBWYB.Client/ViewModels/ViewModelLocator.cs
  23. 339
      BBWYB.Client/ViewModels/Ware/WareStockViewModel.cs
  24. 837
      BBWYB.Client/Views/Order/OrderList.xaml
  25. 39
      BBWYB.Client/Views/Order/OrderList.xaml.cs
  26. 110
      BBWYB.Client/Views/Setting/ShopSetting.xaml
  27. 28
      BBWYB.Client/Views/Setting/ShopSetting.xaml.cs
  28. 423
      BBWYB.Client/Views/Ware/WareStock.xaml
  29. 48
      BBWYB.Client/Views/Ware/WareStock.xaml.cs
  30. 27
      BBWYB.Server.API/Controllers/VenderController.cs
  31. 16
      BBWYB.Server.Business/Order/OrderBusiness.cs
  32. 13
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  33. 92
      BBWYB.Server.Business/Vender/VenderBusiness.cs
  34. 60
      BBWYB.Server.Model/Db/MDS/Purchaseaccount.cs
  35. 22
      BBWYB.Server.Model/Db/Order/Order.cs
  36. 3
      BBWYB.Server.Model/Db/Order/OrderCost.cs
  37. 10
      BBWYB.Server.Model/Db/Order/OrderCostDetail.cs
  38. 64
      BBWYB.Server.Model/Db/PurchaseAccount/PurchaseAccount.cs
  39. 23
      BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs
  40. 7
      BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs
  41. 1
      BBWYB.Server.Model/MappingProfiles.cs

46
BBWYB.Client/APIServices/OrderService.cs

@ -0,0 +1,46 @@
using BBWYB.Client.Models;
using BBWYB.Common.Http;
using BBWYB.Common.Models;
using System;
using System.Net.Http;
namespace BBWYB.Client.APIServices
{
public class OrderService : BaseApiService, IDenpendency
{
public OrderService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext)
{
}
public ApiResponse<OrderListResponse> GetOrderList(string orderId,
DateTime startDate,
DateTime endDate,
OrderState? orderState,
string productId,
string skuId,
string clientOrderId,
string sourceShopName,
string sourceSku,
int pageIndex,
int pageSize,
long? shopId,
bool excludeCanceled)
{
return SendRequest<OrderListResponse>(globalContext.BBYWApiHost, "api/order/getorderlist", new
{
OrderId = orderId,
ShopId = shopId,
StartDate = startDate,
EndDate = endDate,
OrderState = orderState,
PageIndex = pageIndex,
PageSize = pageSize,
ProductId = productId,
Sku = skuId,
ClientOrderId = clientOrderId,
SourceShopName = sourceShopName,
SourceSku = sourceSku
}, null, HttpMethod.Post);
}
}
}

35
BBWYB.Client/APIServices/PurchaseOrderService.cs

@ -15,41 +15,6 @@ namespace BBWYB.Client.APIServices
}
public ApiResponse<object> AddPurchaseOrder(PurchaseOrder purchaseOrder)
{
return SendRequest<object>(globalContext.BBYWApiHost,
"api/PurchaseOrder/AddPurchaseOrder",
purchaseOrder,
null,
HttpMethod.Post);
}
public ApiResponse<object> EditPurchaseOrder(PurchaseOrder purchaseOrder)
{
return SendRequest<object>(globalContext.BBYWApiHost,
"api/PurchaseOrder/EditPurchaseOrder",
purchaseOrder,
null,
HttpMethod.Put);
}
public ApiResponse<IList<PurchaseOrderResponse>> GetList(IList<string> skuIdList, StorageType storageType, long shopId)
{
return SendRequest<IList<PurchaseOrderResponse>>(globalContext.BBYWApiHost,
"api/PurchaseOrder/GetList",
new { SkuIdList = skuIdList, StorageType = storageType, ShopId = shopId },
null,
HttpMethod.Post);
}
public ApiResponse<object> DeletePurchaseOrder(long id)
{
return SendRequest<object>(globalContext.BBYWApiHost,
$"api/purchaseOrder/deletePurchaseOrder/{id}",
null,
null,
HttpMethod.Delete);
}
/// <summary>
/// 预览订单

27
BBWYB.Client/APIServices/ShopService.cs

@ -0,0 +1,27 @@
using BBWYB.Client.Models;
using BBWYB.Common.Http;
using BBWYB.Common.Models;
using System.Net.Http;
namespace BBWYB.Client.APIServices
{
public class ShopService : BaseApiService, IDenpendency
{
public ShopService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) { }
public ApiResponse<long> SaveShopSetting(long shopId,
PurchaseAccount purchaseAccount)
{
return SendRequest<long>(globalContext.BBYWApiHost, "api/vender/SaveShopSetting", new
{
shopId,
PurchaseAccountId = purchaseAccount.Id,
purchaseAccount.AccountName,
purchaseAccount.AppKey,
purchaseAccount.AppSecret,
purchaseAccount.AppToken,
purchaseAccount.PurchasePlatformId
}, null, HttpMethod.Post);
}
}
}

2
BBWYB.Client/Models/APIModel/Response/Order/ConsigneeResponse.cs

@ -38,8 +38,6 @@
/// 镇
/// </summary>
public string Town { get; set; }
public bool IsDecode { get; set; }
}
public class ConsigneeSimpleResponse

79
BBWYB.Client/Models/APIModel/Response/Order/OrderCostDetailResponse.cs

@ -4,85 +4,102 @@ namespace BBWYB.Client.Models
{
public class OrderCostDetailResponse
{
public long Id { get; set; }
/// <summary>
/// 耗材费
/// </summary>
public decimal? ConsumableAmount { get; set; } = 0.00M;
public DateTime? CreateTime { get; set; }
/// <summary>
/// 扣减数量
/// </summary>
public int DeductionQuantity { get; set; } = 0;
public int? DeductionQuantity { get; set; } = 0;
/// <summary>
/// 发货运费
/// </summary>
public decimal DeliveryExpressFreight { get; set; } = 0.00M;
public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
public string OrderId { get; set; }
/// <summary>
/// 头程运费
/// </summary>
public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 入库操作费
/// </summary>
public decimal? InStorageAmount { get; set; } = 0.00M;
public string ProductId { get; set; }
public bool? IsEnabled { get; set; } = false;
/// <summary>
/// 单件成本
/// 操作费
/// </summary>
public decimal UnitCost { get; set; } = 0.00M;
public decimal? OperationAmount { get; set; } = 0.00M;
public string OrderId { get; set; }
/// <summary>
/// 采购单流水Id
/// 出库操作费
/// </summary>
public long PurchaseOrderPKId { get; set; }
public decimal? OutStorageAmount { get; set; } = 0.00M;
public string SkuId { get; set; }
public string ProductId { get; set; }
/// <summary>
/// Sku成本(商品成本)
/// 采购运费
/// </summary>
public decimal SkuAmount { get; set; } = 0.00M;
public decimal? PurchaseFreight { get; set; } = 0.00M;
/// <summary>
/// 采购运费
/// 采购单流水Id
/// </summary>
public decimal PurchaseFreight { get; set; } = 0.00M;
public long? PurchaseOrderPKId { get; set; }
/// <summary>
/// 头程运费
/// 采购单Id
/// </summary>
public decimal FirstFreight { get; set; } = 0.00M;
public string PurchaseOrderId { get; set; }
//public decimal OperationAmount { get; set; } = 0.00M;
/// <summary>
/// 入仓操作费
/// </summary>
public decimal InStorageAmount { get; set; }
public long? ShopId { get; set; }
/// <summary>
/// 出仓操作费
/// 货款成本
/// </summary>
public decimal OutStorageAmount { get; set; }
public decimal? SkuAmount { get; set; } = 0.00M;
///// <summary>
///// sku毛利
///// </summary>
//public decimal? SkuGrossProfit { get; set; } = 0.00M;
//[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// 耗材费
/// 仓储
/// </summary>
public decimal ConsumableAmount { get; set; } = 0.00M;
public decimal? StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 仓储费
/// 采购成本(不含发货运费)
/// </summary>
public decimal StorageAmount { get; set; } = 0.00M;
public decimal? PurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 总计(不含销售运费 历史遗留)
/// 成本总计
/// </summary>
public decimal TotalCost { get; set; } = 0.00M;
public decimal? TotalCost { get; set; } = 0.00M;
/// <summary>
/// 总计 包含销售运费
/// 单件采购成本(不含发货运费)
/// </summary>
public decimal TotalCost2 { get; set; } = 0.00M;
public decimal? UnitCost { get; set; } = 0.00M;
}
}

82
BBWYB.Client/Models/APIModel/Response/Order/OrderCostResponse.cs

@ -4,29 +4,6 @@ namespace BBWYB.Client.Models
{
public class OrderCostResponse
{
public string OrderId { get; set; }
/// <summary>
/// 平台扣点金额
/// </summary>
public decimal PlatformCommissionAmount { get; set; }
/// <summary>
/// 平台扣点百分比
/// </summary>
public decimal PlatformCommissionRatio { get; set; }
/// <summary>
/// 优惠金额
/// </summary>
public decimal PreferentialAmount { get; set; }
/// <summary>
/// 毛利
/// </summary>
public decimal Profit { get; set; }
/// <summary>
/// 成本毛利率
/// </summary>
@ -38,10 +15,14 @@ namespace BBWYB.Client.Models
}
}
/// <summary>
/// 采购金额
/// </summary>
public decimal PurchaseAmount { get; set; } = 0.00M;
public decimal TotalCost { get; set; }
public string OrderId { get; set; }
public DateTime CreateTime { get; set; }
/// <summary>
/// 发货快递费
@ -51,56 +32,31 @@ namespace BBWYB.Client.Models
/// <summary>
/// 是否手动编辑过成本
/// </summary>
public bool IsManualEdited { get; set; }
public bool IsManualEdited { get; set; } = false;
/// <summary>
/// 刷单佣金
/// </summary>
public decimal SDCommissionAmount { get; set; } = 0.00M;
/// <summary>
/// 刷单号费
/// 平台扣点金额
/// </summary>
public decimal SDOrderAmount { get; set; } = 0.00M;
public decimal PlatformCommissionAmount { get; set; } = 0.00M;
/// <summary>
/// 退款金额
/// 平台扣点百分比
/// </summary>
public decimal RefundAmount { get; set; } = 0.00M;
public decimal PlatformCommissionRatio { get; set; }
/// <summary>
/// 退款采购金额
/// 优惠金额
/// </summary>
public decimal RefundPurchaseAmount { get; set; } = 0.0M;
public decimal PreferentialAmount { get; set; } = 0.00M;
/// <summary>
/// 售后总成本
/// 利润
/// </summary>
public decimal AfterTotalCost { get; set; } = 0.0M;
public decimal Profit { get; set; } = 0.00M;
/// <summary>
/// 售前成本
/// </summary>
public decimal BeforeTotalCost
{
get
{
return PurchaseAmount + DeliveryExpressFreight;
}
}
/// <summary>
/// 成本总计
/// 采购金额
/// </summary>
public decimal TotalCost
{
get
{
return SDCommissionAmount + SDOrderAmount +
PlatformCommissionAmount + (PurchaseAmount - RefundPurchaseAmount) +
DeliveryExpressFreight +
AfterTotalCost;
}
}
public decimal PurchaseAmount { get; set; } = 0.00M;
}
}

14
BBWYB.Client/Models/APIModel/Response/Order/OrderCouponResponse.cs

@ -1,14 +0,0 @@
namespace BBWYB.Client.Models
{
public class OrderCouponResponse
{
public long Id { get; set; }
public decimal CouponPrice { get; set; }
public string CouponType { get; set; }
public string OrderId { get; set; }
public string SkuId { get; set; }
}
}

32
BBWYB.Client/Models/APIModel/Response/Order/OrderDropShippingResponse.cs

@ -1,32 +0,0 @@
namespace BBWYB.Client.Models
{
public class OrderDropShippingResponse
{
public long Id { get; set; }
public string OrderId { get; set; }
public string BuyerAccount { get; set; }
public decimal DeliveryFreight { get; set; }
public decimal PurchaseAmount { get; set; }
public string PurchaseOrderId { get; set; }
public string MerchantOrderId { get; set; }
public Platform? PurchasePlatform { get; set; }
public string SellerAccount { get; set; }
public decimal SkuAmount
{
get; set;
}
public decimal PurchaseFreight
{
get; set;
}
}
}

101
BBWYB.Client/Models/APIModel/Response/Order/OrderResponse.cs

@ -10,24 +10,22 @@ namespace BBWYB.Client.Models
/// <summary>
/// 商家Id
/// </summary>
public string VenderId { get; set; }
public string ShopId { get; set; }
/// <summary>
/// 下单时间
/// </summary>
public DateTime OrderStartTime { get; set; }
public DateTime StartTime { get; set; }
/// <summary>
/// 结单时间
/// </summary>
public DateTime? OrderEndTime { get; set; }
public DateTime OrderModifyTime { get; set; }
public DateTime? EndTime { get; set; }
/// <summary>
/// 买家账号
/// 修改时间
/// </summary>
public string BuyerAccount { get; set; }
public DateTime ModifyTime { get; set; }
/// <summary>
/// 订单平台
@ -47,12 +45,7 @@ namespace BBWYB.Client.Models
/// <summary>
/// 订单状态
/// </summary>
public OrderState OrderState { get; set; }
/// <summary>
/// 订单状态中文说明
/// </summary>
public string OrderStateText { get; set; }
public OrderState? OrderState { get; set; }
/// <summary>
/// 订单总价
@ -74,8 +67,16 @@ namespace BBWYB.Client.Models
/// </summary>
public decimal FreightPrice { get; set; }
/// <summary>
/// 平台补贴
/// </summary>
public decimal PreferentialAmount { get; set; }
/// <summary>
/// 商家优惠金额
/// </summary>
public decimal SellerPreferentialAmount { get; set; }
/// <summary>
/// 买家备注
/// </summary>
@ -91,57 +92,35 @@ namespace BBWYB.Client.Models
/// </summary>
public string PurchaseRemark { get; set; }
public StorageType? StorageType { get; set; }
/// <summary>
/// 运单号
/// </summary>
public string WaybillNo { get; set; }
/// <summary>
/// 仓库Id
/// 快递公司名称
/// </summary>
public string StoreId { get; set; }
public string ExpressName { get; set; }
/// <summary>
/// 仓库名称
/// 来源Sku
/// </summary>
public string StoreName { get; set; }
public string SourceSku { get; set; }
/// <summary>
/// 订单旗帜
/// 来源店铺名
/// </summary>
public string Flag { get; set; }
public string SourceShopName { get; set; }
/// <summary>
/// 刷单类型
/// 业务端订单号
/// </summary>
public SDType? SDType { get; set; }
public string ClientOrderId { get; set; }
/// <summary>
/// 刷单关键词
/// 是否采购
/// </summary>
public string SDKey { get; set; }
/// <summary>
/// 刷单支付渠道
/// </summary>
public PayBillType? SDPayChannel { get; set; }
/// <summary>
/// 刷单交易账单号
/// </summary>
public string SDPayBillNo { get; set; }
/// <summary>
/// 刷单人
/// </summary>
public string SDOperator { get; set; }
/// <summary>
/// 是否包含售后单
/// </summary>
public bool IsAfterSaleOrder { get; set; }
public bool IsPurchased { get; set; }
/// <summary>
/// 收货人信息
@ -149,48 +128,24 @@ namespace BBWYB.Client.Models
public ConsigneeResponse Consignee { get; set; }
/// <summary>
/// 订单成本
/// 产品信息
/// </summary>
public OrderCostResponse OrderCost { get; set; }
public IList<OrderSkuResponse> ItemList { get; set; }
/// <summary>
/// 优惠券列表
/// 订单成本
/// </summary>
public IList<OrderCouponResponse> OrderCouponList { get; set; }
public OrderCostResponse OrderCost { get; set; }
/// <summary>
/// 订单成本明细列表
/// </summary>
public IList<OrderCostDetailResponse> OrderCostDetailList { get; set; }
/// <summary>
/// 代发信息
/// </summary>
public IList<OrderDropShippingResponse> OrderDropShippingList { get; set; }
/// <summary>
/// 历史代发信息
/// </summary>
public IList<OrderDropShippingResponse> HistoryOrderDropShippingList { get; set; }
/// <summary>
/// 售后信息
/// </summary>
public IList<AfterSaleOrderResponse> AfterSaleOrderList { get; set; }
}
public class OrderListResponse
{
public int Count { get; set; }
public long Count { get; set; }
public IList<OrderResponse> Items { get; set; }
/// <summary>
/// 当前条件汇总利润
/// </summary>
public decimal CurrentConditionsTotalProfit { get; set; }
}
}

35
BBWYB.Client/Models/APIModel/Response/Order/OrderSkuResponse.cs

@ -1,32 +1,41 @@
namespace BBWYB.Client.Models
using System;
namespace BBWYB.Client.Models
{
public class OrderSkuResponse
{
public long Id { get; set; }
public DateTime? CreateTime { get; set; }
/// <summary>
/// 购买数量
/// 销售数量
/// </summary>
public int ItemTotal { get; set; }
public string Id { get; set; }
/// <summary>
/// Logo
/// </summary>
public string ProductId { get; set; }
public string Logo { get; set; }
public string ProductNo { get; set; }
public double Price { get; set; }
public string OrderId { get; set; }
/// <summary>
/// Sku标题
/// 销售单价
/// </summary>
public string Title { get; set; }
public decimal? Price { get; set; }
public string Logo { get; set; }
public string ProductId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// 代发信息Id
/// Sku标题
/// </summary>
public long? OrderDropShippingId { get; set; }
public bool IsRefund { get; set; } = false;
public string Title { get; set; }
}
}

6
BBWYB.Client/Models/MappingProfile.cs

@ -17,7 +17,11 @@ namespace BBWYB.Client.Models
CreateMap<PurchaseAccountResponse, PurchaseAccount>();
CreateMap<DepartmentResponse, Department>();
CreateMap<OrderCostDetailResponse, OrderCostDetail>();
CreateMap<OrderCostResponse, OrderCost>();
CreateMap<ConsigneeResponse, Consignee>();
CreateMap<OrderResponse, Order>();
CreateMap<OrderSkuResponse, OrderSku>();
}
}
}

37
BBWYB.Client/Models/Order/Consignee.cs

@ -1,39 +1,6 @@
using CommunityToolkit.Mvvm.ComponentModel;
namespace BBWYB.Client.Models
namespace BBWYB.Client.Models
{
public class Consignee : ObservableObject
public class Consignee : ConsigneeResponse
{
private string contactName;
private string address;
private string mobile;
private string telePhone;
private bool isDecode;
/// <summary>
/// 省
/// </summary>
public string Province { get; set; }
/// <summary>
/// 市
/// </summary>
public string City { get; set; }
/// <summary>
/// 县
/// </summary>
public string County { get; set; }
/// <summary>
/// 镇
/// </summary>
public string Town { get; set; }
public string ContactName { get => contactName; set { SetProperty(ref contactName, value); } }
public string Address { get => address; set { SetProperty(ref address, value); } }
public string Mobile { get => mobile; set { SetProperty(ref mobile, value); } }
public string TelePhone { get => telePhone; set { SetProperty(ref telePhone, value); } }
public bool IsDecode { get => isDecode; set { SetProperty(ref isDecode, value); } }
}
}

169
BBWYB.Client/Models/Order/Order.cs

@ -0,0 +1,169 @@
using CommunityToolkit.Mvvm.ComponentModel;
using System;
using System.Collections.Generic;
using System.Linq;
namespace BBWYB.Client.Models
{
public class Order : ObservableObject
{
public Order()
{
OrderCostDetailGroupList = new List<OrderCostDetailGroup>();
}
private OrderState orderState;
private string waybillNo;
private string venderRemark;
public string Id { get; set; }
/// <summary>
/// 商家Id
/// </summary>
public string VenderId { get; set; }
/// <summary>
/// 下单时间
/// </summary>
public DateTime StartTime { get; set; }
/// <summary>
/// 结单时间
/// </summary>
public DateTime? OrderEndTime { get; set; }
/// <summary>
/// 买家账号
/// </summary>
public string BuyerAccount { get; set; }
/// <summary>
/// 订单平台
/// </summary>
public Platform Platform { get; set; }
/// <summary>
/// 订单类型
/// </summary>
public OrderType OrderType { get; set; }
/// <summary>
/// 支付方式
/// </summary>
public PayType PayType { get; set; }
/// <summary>
/// 订单状态中文说明
/// </summary>
public string OrderStateText { get; set; }
/// <summary>
/// 订单总价
/// </summary>
public decimal OrderTotalPrice { get; set; }
/// <summary>
/// 订单货款金额
/// </summary>
public decimal OrderSellerPrice { get; set; }
/// <summary>
/// 用户应付金额
/// </summary>
public decimal OrderPayment { get; set; }
/// <summary>
/// 商品运费(用户付)
/// </summary>
public decimal FreightPrice { get; set; }
/// <summary>
/// 实收金额
/// </summary>
public decimal ActualAmount { get { return OrderSellerPrice + FreightPrice; } }
/// <summary>
/// 商家优惠金额
/// </summary>
public decimal PreferentialAmount { get; set; }
/// <summary>
/// 买家备注
/// </summary>
public string BuyerRemark { get; set; }
/// <summary>
/// 采购备注
/// </summary>
public string PurchaseRemark { get; set; }
/// <summary>
/// 订单状态
/// </summary>
public OrderState OrderState { get => orderState; set { SetProperty(ref orderState, value); } }
public string WaybillNo { get => waybillNo; set { SetProperty(ref waybillNo, value); } }
/// <summary>
/// 商家备注
/// </summary>
public string VenderRemark { get => venderRemark; set { SetProperty(ref venderRemark, value); } }
/// <summary>
/// 收货人信息
/// </summary>
public Consignee Consignee { get; set; }
/// <summary>
/// 订单成本
/// </summary>
public OrderCost OrderCost { get; set; }
public IList<OrderSku> ItemList { get; set; }
/// <summary>
/// 订单成本明细列表
/// </summary>
public IList<OrderCostDetail> OrderCostDetailList { get; set; }
/// <summary>
/// 订单成本明细分组列表
/// </summary>
public IList<OrderCostDetailGroup> OrderCostDetailGroupList { get; set; }
public void LocalConvert()
{
ConvertOrderCostDetailToGroup();
}
public void ConvertOrderCostDetailToGroup()
{
if (OrderCostDetailList == null || OrderCostDetailList.Count() == 0)
return;
foreach (var detail in OrderCostDetailList)
{
var group = OrderCostDetailGroupList.FirstOrDefault(g => g.SkuId == detail.SkuId);
if (group == null)
{
group = new OrderCostDetailGroup() { SkuId = detail.SkuId };
OrderCostDetailGroupList.Add(group);
}
group.Items.Add(detail);
}
}
}
public class OrderList
{
public int Count { get; set; }
public IList<Order> Items { get; set; }
}
}

7
BBWYB.Client/Models/Order/OrderCost.cs

@ -0,0 +1,7 @@
namespace BBWYB.Client.Models
{
public class OrderCost : OrderCostResponse
{
}
}

7
BBWYB.Client/Models/Order/OrderCostDetail.cs

@ -0,0 +1,7 @@
namespace BBWYB.Client.Models
{
public class OrderCostDetail : OrderCostDetailResponse
{
}
}

16
BBWYB.Client/Models/Order/OrderCostDetailGroup.cs

@ -0,0 +1,16 @@
using System.Collections.Generic;
namespace BBWYB.Client.Models
{
public class OrderCostDetailGroup
{
public OrderCostDetailGroup()
{
Items = new List<OrderCostDetail>();
}
public string SkuId { get; set; }
public IList<OrderCostDetail> Items { get; set; }
}
}

6
BBWYB.Client/Models/Order/OrderSku.cs

@ -0,0 +1,6 @@
namespace BBWYB.Client.Models
{
public class OrderSku : OrderSkuResponse
{
}
}

71
BBWYB.Client/Models/Order/RelationPurchaseOrderSku.cs

@ -0,0 +1,71 @@
using CommunityToolkit.Mvvm.ComponentModel;
using Newtonsoft.Json;
using System;
namespace BBWY.Client.Models
{
public class RelationPurchaseOrderSku : ObservableObject
{
public RelationPurchaseOrderSku()
{
SingleSkuAmountStr = (0).ToString();
}
private bool isSelected;
private string singleSkuAmountStr;
private decimal singleSkuAmount;
private decimal skuAmount;
public string ProductId { get; set; }
public string SkuId { get; set; }
public string Logo { get; set; }
public int Quantity { get; set; }
public string Title { get; set; }
public string SingleSkuAmountStr
{
get => singleSkuAmountStr; set
{
if (SetProperty(ref singleSkuAmountStr, value))
{
if (decimal.TryParse(value, out decimal d))
SingleSkuAmount = d;
}
}
}
public decimal SingleSkuAmount
{
get => singleSkuAmount;
set
{
if (SetProperty(ref singleSkuAmount, value))
SkuAmount = SingleSkuAmount * Quantity;
}
}
public decimal SkuAmount
{
get => skuAmount;
set
{
if (SetProperty(ref skuAmount, value))
OnSkuAmountChanged?.Invoke();
}
}
/// <summary>
/// 代发信息Id
/// </summary>
public long? OrderDropShippingId { get; set; }
[JsonIgnore]
public Action OnSkuAmountChanged { get; set; }
public bool IsSelected { get => isSelected; set { SetProperty(ref isSelected, value); } }
}
}

43
BBWYB.Client/ViewModels/MainViewModel.cs

@ -85,32 +85,31 @@ namespace BBWYB.Client.ViewModels
{
App.Current.Dispatcher.Invoke(() =>
{
//MenuList.Add(new MenuModel()
//{
// Name = "订单管理",
// ChildList = new List<MenuModel>()
// {
// new MenuModel(){ Name="最近订单",Url="/Views/Order/OrderList.xaml" }
// }
//});
MenuList.Add(new MenuModel()
{
Name = "订单管理",
ChildList = new List<MenuModel>()
{
new MenuModel(){ Name="订单列表",Url="/Views/Order/OrderList.xaml" }
}
});
MenuList.Add(new MenuModel()
{
Name = "商品管理",
ChildList = new List<MenuModel>()
{
new MenuModel(){ Name="货源管理",Url="/Views/Ware/WareManager.xaml" },
new MenuModel(){ Name="产品库存",Url="/Views/Ware/WareStock.xaml" }
new MenuModel(){ Name="货源管理",Url="/Views/Ware/WareManager.xaml" }
}
});
MenuList.Add(new MenuModel()
{
Name = "设置",
ChildList = new List<MenuModel>()
{
new MenuModel(){ Name="店铺设置",Url="/Views/Setting/ShopSetting.xaml" },
//new MenuModel(){ Name="团队配置",Url="/Views/Setting/TeamSetting.xaml" }
}
});
//MenuList.Add(new MenuModel()
//{
// Name = "设置",
// ChildList = new List<MenuModel>()
// {
// new MenuModel(){ Name="店铺设置",Url="/Views/Setting/ShopSetting.xaml" },
// new MenuModel(){ Name="团队配置",Url="/Views/Setting/TeamSetting.xaml" }
// }
//});
});
}
@ -204,12 +203,10 @@ namespace BBWYB.Client.ViewModels
{
ChooseShop(selectShop.Shop, true);
var vm = App.Current.Resources["Locator"] as ViewModelLocator;
//if (vm.IsCreateOrderList)
// vm.OrderList.Refresh();
if (vm.IsCreateOrderList)
vm.OrderVM.Refresh();
if (vm.IsCreateWareManager)
vm.WareManager.Refresh();
if (vm.IsCreateWareStock)
vm.WareStock.Refresh();
}
}
catch (Exception ex)

150
BBWYB.Client/ViewModels/Order/OrderViewModel.cs

@ -0,0 +1,150 @@
using BBWYB.Client.APIServices;
using BBWYB.Client.Models;
using BBWYB.Client.Views.Order;
using BBWYB.Common.Extensions;
using BBWYB.Common.Models;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using SJ.Controls;
using System;
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 OrderViewModel : BaseVM, IDenpendency
{
private bool isLoading;
private DateTime startDate;
private DateTime endDate;
private int pageIndex = 1;
private int pageSize = 10;
private long orderCount;
private OrderState? orderState;
private string searchSku;
private string searchProductId;
private string searchOrderId;
private string searchClientOrderId;
private string searchSourceShopName;
private string searchSourceSku;
private bool excludeCanceled;
private GlobalContext globalContext;
private OrderService orderService;
public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } }
public DateTime StartDate { get => startDate; set { SetProperty(ref startDate, value); } }
public DateTime EndDate { get => endDate; set { SetProperty(ref endDate, value); } }
public int PageIndex { get => pageIndex; set { SetProperty(ref pageIndex, value); } }
public int PageSize { get => pageSize; set { SetProperty(ref pageSize, value); } }
public long OrderCount { get => orderCount; set { SetProperty(ref orderCount, value); } }
public OrderState? OrderState { get => orderState; set { SetProperty(ref orderState, value); } }
public string SearchSku { get => searchSku; set { SetProperty(ref searchSku, value); } }
public string SearchProductId { get => searchProductId; set { SetProperty(ref searchProductId, value); } }
public string SearchOrderId { get => searchOrderId; set { SetProperty(ref searchOrderId, value); } }
public string SearchClientOrderId { get => searchClientOrderId; set { SetProperty(ref searchClientOrderId, value); } }
public string SearchSourceShopName { get => searchSourceShopName; set { SetProperty(ref searchSourceShopName, value); } }
public string SearchSourceSku { get => searchSourceSku; set { SetProperty(ref searchSourceSku, value); } }
public bool ExcludeCanceled { get => excludeCanceled; set { SetProperty(ref excludeCanceled, value); } }
public IList<Order> OrderList { get; set; }
public ICommand SetSearchDateCommand { get; set; }
public ICommand SetOrderStateCommand { get; set; }
public ICommand OrderPageIndexChangedCommand { get; set; }
public OrderViewModel(GlobalContext globalContext, OrderService orderService)
{
OrderList = new ObservableCollection<Order>();
SetOrderStateCommand = new RelayCommand<OrderState?>(SetOrderState);
SetSearchDateCommand = new RelayCommand<int>(d =>
{
EndDate = d == 1 ? DateTime.Now.Date.AddDays(-1) : DateTime.Now;
StartDate = DateTime.Now.Date.AddDays(d * -1);
PageIndex = 1;
Task.Factory.StartNew(() => LoadOrder(PageIndex)); //点击日期查询订单
});
OrderPageIndexChangedCommand = new RelayCommand<PageArgs>(p =>
{
Task.Factory.StartNew(() => LoadOrder(p.PageIndex));
});
PageSize = 10;
EndDate = DateTime.Now;
StartDate = DateTime.Now.Date;
this.globalContext = globalContext;
this.orderService = orderService;
}
private void LoadOrder(int pageIndex)
{
IsLoading = true;
var response = orderService.GetOrderList(SearchOrderId, StartDate, EndDate, OrderState, SearchProductId, SearchSku, SearchClientOrderId, SearchSourceShopName, SearchSourceSku, PageIndex, PageSize, globalContext.User.Shop.ShopId, ExcludeCanceled);
if (!response.Success)
{
IsLoading = false;
App.Current.Dispatcher.Invoke(() =>
{
MessageBox.Show(response.Msg, "提示");
return;
});
}
IsLoading = false;
OrderCount = response.Data.Count;
if (response.Data.Items == null || response.Data.Items.Count() == 0)
return;
var list = response.Data.Items.Map<IList<Order>>();
App.Current.Dispatcher.Invoke(() =>
{
foreach (var o in list)
{
OrderList.Clear();
foreach (var order in list)
{
order.LocalConvert();
OrderList.Add(order);
}
WeakReferenceMessenger.Default.Send(new Message_OrderListScrollToTop(null));
}
});
}
/// <summary>
/// 通过订单状态 筛选订单数据
/// </summary>
/// <param name="orderState">订单状态</param>
public void SetOrderState(OrderState? orderState)
{
InitSearchParam(orderState == null); //初始化查询参数 orderState == null 全部
this.OrderState = orderState;
Task.Factory.StartNew(() => LoadOrder(1)); //选择状态查询订单
}
/// <summary>
/// 初始化查询参数
/// </summary>
/// <param name="isInitDate"></param>
private void InitSearchParam(bool isInitDate = false)
{
this.OrderState = null;
SearchOrderId = string.Empty;
SearchSku = string.Empty;
SearchProductId = string.Empty;
SearchClientOrderId = string.Empty;
SearchSourceShopName = string.Empty;
SearchSourceSku = string.Empty;
if (isInitDate)
{
EndDate = DateTime.Now;
StartDate = DateTime.Now.Date;
}
PageIndex = 1;
}
}
}

100
BBWYB.Client/ViewModels/Vender/ShopSettingViewModel.cs

@ -0,0 +1,100 @@
using BBWYB.Client.APIServices;
using BBWYB.Client.Models;
using BBWYB.Common.Models;
using CommunityToolkit.Mvvm.Input;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace BBWYB.Client.ViewModels
{
public class ShopSettingViewModel : BaseVM, IDenpendency
{
private bool isLoading;
private GlobalContext globalContext;
private ShopService shopService;
private PurchaseAccount purchaseAccount;
private Platform purchasePlatform;
public ICommand SaveCommand { get; set; }
public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } }
public Platform PurchasePlatform
{
get => purchasePlatform; set
{
if (SetProperty(ref purchasePlatform, value))
{
OnPurchasePlatformChanged();
}
}
}
public PurchaseAccount PurchaseAccount { get => purchaseAccount; set { SetProperty(ref purchaseAccount, value); } }
public ShopSettingViewModel(GlobalContext globalContext, ShopService shopService)
{
this.globalContext = globalContext;
this.shopService = shopService;
SaveCommand = new RelayCommand(Save);
}
private void OnPurchasePlatformChanged()
{
var pa = globalContext.User.Shop.PurchaseAccountList.FirstOrDefault(pa => pa.PurchasePlatformId == PurchasePlatform);
if (pa == null)
{
pa = new PurchaseAccount()
{
PurchasePlatformId = PurchasePlatform,
};
globalContext.User.Shop.PurchaseAccountList.Add(pa);
}
this.PurchaseAccount = pa;
}
protected override void Load()
{
if (globalContext.User.Shop.PurchaseAccountList == null)
globalContext.User.Shop.PurchaseAccountList = new List<PurchaseAccount>();
IsLoading = false;
PurchasePlatform = Platform.;
}
private void Save()
{
if (string.IsNullOrEmpty(PurchaseAccount.AppKey) ||
string.IsNullOrEmpty(PurchaseAccount.AppSecret) ||
string.IsNullOrEmpty(PurchaseAccount.AppToken) ||
string.IsNullOrEmpty(PurchaseAccount.AccountName))
{
MessageBox.Show("采购信息不能为空", "保存店铺设置");
return;
}
PurchaseAccount.AppKey = PurchaseAccount.AppKey.Trim();
PurchaseAccount.AppSecret = PurchaseAccount.AppSecret.Trim();
PurchaseAccount.AppToken = PurchaseAccount.AppToken.Trim();
PurchaseAccount.AccountName = PurchaseAccount.AccountName.Trim();
IsLoading = true;
Task.Factory.StartNew(() => shopService.SaveShopSetting(globalContext.User.Shop.ShopId, PurchaseAccount)).ContinueWith(r =>
{
IsLoading = false;
var response = r.Result;
if (!response.Success)
{
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "保存店铺设置"));
return;
}
PurchaseAccount.Id = response.Data;
});
}
}
}

21
BBWYB.Client/ViewModels/ViewModelLocator.cs

@ -42,25 +42,36 @@ namespace BBWYB.Client.ViewModels
}
}
public WareStockViewModel WareStock
public BindingPurchaseProductViewModel BindingPurchaseProduct
{
get
{
IsCreateWareStock = true;
using (var s = sp.CreateScope())
{
return s.ServiceProvider.GetRequiredService<WareStockViewModel>();
return s.ServiceProvider.GetRequiredService<BindingPurchaseProductViewModel>();
}
}
}
public BindingPurchaseProductViewModel BindingPurchaseProduct
public OrderViewModel OrderVM
{
get
{
IsCreateOrderList = true;
using (var s = sp.CreateScope())
{
return s.ServiceProvider.GetRequiredService<BindingPurchaseProductViewModel>();
return s.ServiceProvider.GetRequiredService<OrderViewModel>();
}
}
}
public ShopSettingViewModel ShopSetting
{
get
{
using (var s = sp.CreateScope())
{
return s.ServiceProvider.GetRequiredService<ShopSettingViewModel>();
}
}
}

339
BBWYB.Client/ViewModels/Ware/WareStockViewModel.cs

@ -1,339 +0,0 @@
using BBWYB.Client.APIServices;
using BBWYB.Client.Models;
using BBWYB.Client.Views.Ware;
using BBWYB.Common.Extensions;
using BBWYB.Common.Models;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace BBWYB.Client.ViewModels
{
public class WareStockViewModel : BaseVM, IDenpendency
{
#region Property
private PurchaseOrderService purchaseOrderService;
private ProductService productService;
private GlobalContext globalContext;
private bool isLoading;
private int pageIndex = 1;
private int pageSize;
private int productCount;
private string searchProductItem;
private string searchSpu;
private string searchSku;
private string searchPurchaseOrder;
public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } }
public int PageIndex { get => pageIndex; set { SetProperty(ref pageIndex, value); } }
public int PageSize { get => pageSize; set { SetProperty(ref pageSize, value); } }
public int ProductCount { get => productCount; set { SetProperty(ref productCount, value); } }
public string SearchProductItem { get => searchProductItem; set { SetProperty(ref searchProductItem, value); } }
public string SearchSpu { get => searchSpu; set { SetProperty(ref searchSpu, value); } }
public string SearchSku { get => searchSku; set { SetProperty(ref searchSku, value); } }
public string SearchPurchaseOrder { get => searchPurchaseOrder; set { SetProperty(ref searchPurchaseOrder, value); } }
public IList<Product> ProductList { get; set; }
#endregion
#region ICommand
public ICommand SearchCommand { get; set; }
public ICommand ProductPageIndexChangedCommand { get; set; }
public ICommand AddPurchaserOrderCommand { get; set; }
public ICommand EditPurchaseOrderCommand { get; set; }
public ICommand DeletePurchaseOrderCommand { get; set; }
public ICommand SavePurchaseOrderCommand { get; set; }
public ICommand SwitchStorageTypeCommand { get; set; }
#endregion
#region Method
public WareStockViewModel(GlobalContext globalContext, PurchaseOrderService purchaseOrderService, ProductService productService)
{
this.globalContext = globalContext;
this.purchaseOrderService = purchaseOrderService;
this.productService = productService;
ProductList = new ObservableCollection<Product>();
SearchCommand = new RelayCommand(() =>
{
PageIndex = 1;
Task.Factory.StartNew(() => LoadWare(1));
});
ProductPageIndexChangedCommand = new RelayCommand<SJ.Controls.PageArgs>((p) => Task.Factory.StartNew(() => LoadWare(p.PageIndex)));
SwitchStorageTypeCommand = new RelayCommand<StorageModel>(SwitchStorageType);
AddPurchaserOrderCommand = new RelayCommand<Product>(AddPurchaserOrder);
EditPurchaseOrderCommand = new RelayCommand<PurchaseOrder>(po => po.IsEdit = true);
DeletePurchaseOrderCommand = new RelayCommand<PurchaseOrder>(DeletePurchaseOrder);
SavePurchaseOrderCommand = new RelayCommand<PurchaseOrder>(SavePurchaseOrder);
Task.Factory.StartNew(() => LoadWare(1));
}
public override void Refresh()
{
ProductList.Clear();
ProductCount = 0;
PageSize = 1;
}
private void LoadWare(int pageIndex)
{
if (!string.IsNullOrEmpty(SearchSpu) && !string.IsNullOrEmpty(SearchSku))
{
App.Current.Dispatcher.Invoke(() => MessageBox.Show("SPU和SKU条件不能共存"));
return;
}
App.Current.Dispatcher.Invoke(() => ProductList.Clear());
IsLoading = true;
#region 加载JD商品列表
ApiResponse<ProductListResponse> productApiResponse = null;
if (!string.IsNullOrEmpty(SearchSku))
{
var skuResponse = productService.GetProductSkuList(string.Empty, SearchSku);
if (skuResponse.Success)
{
if (skuResponse.Data.Count == 0)
{
IsLoading = false;
return;
}
productApiResponse = productService.GetProductList(skuResponse.Data.Items[0].ProductId, string.Empty, string.Empty, pageIndex);
}
else
{
IsLoading = false;
App.Current.Dispatcher.Invoke(() => MessageBox.Show(skuResponse.Msg, "加载sku"));
return;
}
}
else
{
productApiResponse = productService.GetProductList(SearchSpu, string.Empty, SearchProductItem, pageIndex);
}
if (!productApiResponse.Success)
{
IsLoading = false;
App.Current.Dispatcher.Invoke(() => MessageBox.Show(productApiResponse.Msg, "加载产品"));
return;
}
var productList = productApiResponse.Data.Items;
ProductCount = productApiResponse.Data.Count;
if (ProductCount == 0)
{
IsLoading = false;
return;
}
#endregion
#region 加载JDSKU列表
var waitList = new List<EventWaitHandle>();
foreach (var p in productList)
{
var ewh = new ManualResetEvent(false);
waitList.Add(ewh);
Task.Factory.StartNew(() => LoadSku(p, ewh));
}
WaitHandle.WaitAll(waitList.ToArray(), 8000);
#endregion
#region 加载采购单
LoadPurchaseOrder(productList, StorageType.);
#endregion
App.Current.Dispatcher.BeginInvoke((Action)delegate
{
foreach (var p in productList)
ProductList.Add(p);
//使滚动条保持顶部
//Messenger.Default.Send(string.Empty, "WareStock_ProductListScrollToTop");
WeakReferenceMessenger.Default.Send(new Message_WareStock_ProductListScrollToTop(null));
});
IsLoading = false;
}
private void LoadSku(Product product, EventWaitHandle ewh)
{
try
{
var skuResponse = productService.GetProductSkuList(product.Id, string.Empty);
if (!skuResponse.Success)
{
IsLoading = false;
App.Current.Dispatcher.Invoke(() => MessageBox.Show(skuResponse.Msg, "加载sku"));
return;
}
foreach (var sku in skuResponse.Data.Items)
{
sku.StorageList.Add(new StorageModel()
{
ProductId = product.Id,
SkuId = sku.Id,
StorageType = StorageType.
});
sku.StorageList.Add(new StorageModel()
{
ProductId = product.Id,
SkuId = sku.Id,
StorageType = StorageType.
});
sku.StorageList.Add(new StorageModel()
{
ProductId = product.Id,
SkuId = sku.Id,
StorageType = StorageType.
});
sku.SelectedStorageModel = sku.StorageList[0];
}
product.SkuList = skuResponse.Data.Items;
}
catch (Exception ex)
{
}
finally
{
ewh.Set();
}
}
private void LoadPurchaseOrder(IList<Product> productList, StorageType storageType)
{
var skuList = new List<ProductSku>();
foreach (var p in productList)
skuList.AddRange(p.SkuList);
LoadPurchaseOrder(skuList, storageType);
}
private void LoadPurchaseOrder(IList<ProductSku> skuList, StorageType storageType)
{
App.Current.Dispatcher.Invoke(() =>
{
foreach (var s in skuList)
s.PurchaseOrderList.Clear();
});
var response = purchaseOrderService.GetList(skuList.Select(s => s.Id).ToList(), storageType, globalContext.User.Shop.ShopId);
if (response.Success)
{
var purchaseOrderList = response.Data;
App.Current.Dispatcher.Invoke(() =>
{
foreach (var s in skuList)
{
var currentSkuPurchaseOrderList = purchaseOrderList.Where(po => po.SkuId == s.Id).Map<IList<PurchaseOrder>>();
foreach (var po in currentSkuPurchaseOrderList)
s.PurchaseOrderList.Add(po);
}
});
}
}
private void SwitchStorageType(StorageModel storageModel)
{
var product = ProductList.FirstOrDefault(p => p.Id == storageModel.ProductId);
var sku = product.SkuList.FirstOrDefault(s => s.Id == storageModel.SkuId);
if (sku.SelectedStorageModel == storageModel)
return;
sku.SelectedStorageModel = storageModel;
IsLoading = true;
Task.Factory.StartNew(() =>
{
LoadPurchaseOrder(new List<ProductSku>() { sku }, storageModel.StorageType);
IsLoading = false;
});
}
private void AddPurchaserOrder(Product product)
{
foreach (var sku in product.SkuList)
sku.PurchaseOrderList.Add(new PurchaseOrder
{
IsEdit = true,
SkuId = sku.Id,
ProductId = product.Id,
UserId = globalContext.User.Id,
StorageType = sku.SelectedStorageModel.StorageType,
PurchaseMethod = PurchaseMethod.线,
CreateTime = DateTime.Now,
ShopId = globalContext.User.Shop.ShopId,
PurchasePlatform = Platform.
});
}
private void DeletePurchaseOrder(PurchaseOrder purchaseOrder)
{
var product = ProductList.FirstOrDefault(p => p.Id == purchaseOrder.ProductId);
var sku = product.SkuList.FirstOrDefault(s => s.Id == purchaseOrder.SkuId);
if (purchaseOrder.Id == 0)
{
sku.PurchaseOrderList.Remove(purchaseOrder);
}
else
{
if (MessageBox.Show("确定要删除采购单吗?", "确认", MessageBoxButton.OKCancel) != MessageBoxResult.OK)
return;
IsLoading = true;
Task.Factory.StartNew(() =>
{
var response = purchaseOrderService.DeletePurchaseOrder(purchaseOrder.Id);
IsLoading = false;
App.Current.Dispatcher.BeginInvoke((Action)delegate
{
if (response.Success)
sku.PurchaseOrderList.Remove(purchaseOrder);
else
MessageBox.Show(response.Msg, "删除采购单");
});
});
}
}
private void SavePurchaseOrder(PurchaseOrder purchaseOrder)
{
if (purchaseOrder.PurchasePlatform == null ||
string.IsNullOrEmpty(purchaseOrder.PurchaseOrderId) ||
purchaseOrder.PurchaseQuantity == 0)
{
MessageBox.Show("缺少必要信息", "保存采购单");
return;
}
if (purchaseOrder.RemainingQuantity > purchaseOrder.PurchaseQuantity)
{
MessageBox.Show("剩余库存不成超过采购数量", "保存采购单");
return;
}
purchaseOrder.IsEdit = false;
var product = ProductList.FirstOrDefault(p => p.Id == purchaseOrder.ProductId);
var sku = product.SkuList.FirstOrDefault(s => s.Id == purchaseOrder.SkuId);
IsLoading = true;
Task.Factory.StartNew(() =>
{
var response = purchaseOrder.Id == 0 ? purchaseOrderService.AddPurchaseOrder(purchaseOrder) :
purchaseOrderService.EditPurchaseOrder(purchaseOrder);
IsLoading = false;
if (response.Success)
{
if (purchaseOrder.Id == 0)
LoadPurchaseOrder(new List<ProductSku>() { sku }, purchaseOrder.StorageType.Value);
}
else
{
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "保存采购单"));
}
});
}
#endregion
}
}

837
BBWYB.Client/Views/Order/OrderList.xaml

@ -0,0 +1,837 @@
<Page x:Class="BBWYB.Client.Views.Order.OrderList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:cmodel="clr-namespace:BBWYB.Client.Models"
xmlns:local="clr-namespace:BBWYB.Client.Views.Order"
xmlns:c="clr-namespace:SJ.Controls;assembly=SJ.Controls"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
mc:Ignorable="d"
xmlns:ctr="clr-namespace:BBWYB.Client.Converters"
DataContext="{Binding OrderVM,Source={StaticResource Locator}}"
d:DesignHeight="1080" d:DesignWidth="1920"
Title="OrderList">
<Page.Resources>
<sys:Int32 x:Key="d0">0</sys:Int32>
<sys:Int32 x:Key="d1">1</sys:Int32>
<sys:Int32 x:Key="d3">2</sys:Int32>
<sys:Int32 x:Key="d7">6</sys:Int32>
<sys:Int32 x:Key="d15">14</sys:Int32>
<sys:Int32 x:Key="d30">29</sys:Int32>
<ctr:SaleGrossProfitConverter x:Key="sgpConverter"/>
</Page.Resources>
<Grid>
<c:RoundWaitProgress Play="{Binding IsLoading}" Panel.ZIndex="999"/>
<Grid Margin="5,0">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="5"/>
<RowDefinition Height="30"/>
<RowDefinition Height="5"/>
<RowDefinition Height="30"/>
<RowDefinition Height="5"/>
<RowDefinition/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid Background="{StaticResource Border.Background}" HorizontalAlignment="Left" Height="75" Panel.ZIndex="999">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="5"/>
<RowDefinition Height="0.5*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0" Height="30">
<StackPanel.Resources>
<Style TargetType="DatePickerTextBox">
<Setter Property="IsReadOnly" Value="True"/>
</Style>
</StackPanel.Resources>
<TextBlock Text="下单时间" VerticalAlignment="Center" Margin="5,0,0,0"/>
<DatePicker SelectedDate="{Binding StartDate}" Width="133.5" Height="30" VerticalContentAlignment="Center" FocusVisualStyle="{x:Null}" Margin="5,0,0,0"/>
<DatePicker SelectedDate="{Binding EndDate}" Width="133.5" Height="30" VerticalContentAlignment="Center" FocusVisualStyle="{x:Null}" Margin="5,0,0,0"/>
<TextBlock Text="订单号" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchOrderId}" WaterRemark="精确匹配"/>
<TextBlock Text="SPU" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" WaterRemark="精确匹配" Text="{Binding SearchProductId}"/>
<TextBlock Text="SKU" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchSku}" WaterRemark="精确匹配"/>
<!--<TextBlock Text="下单账号" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" WaterRemark="暂不支持" IsEnabled="False"
DisableBgColor="{StaticResource TextBox.Disable.BgColor}"/>-->
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="2" Margin="0,0,0,5" Height="30">
<c:BButton Content="今天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d0}"/>
<c:BButton Content="昨天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d1}"/>
<c:BButton Content="近3天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d3}"/>
<c:BButton Content="近7天" Width="50" Height="24" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d7}"/>
<c:BButton Content="近15天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d15}"/>
<c:BButton Content="近30天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d30}"/>
<TextBlock Text="采购单" VerticalAlignment="Center" Margin="5,0,0,0"
Visibility="{Binding Visibility,ElementName=listbox_order}"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchClientOrderId}" WaterRemark="精确匹配"
Visibility="{Binding Visibility,ElementName=listbox_order}"/>
<TextBlock VerticalAlignment="Center" Margin="5,0,0,0">
<Run Text="下单"/>
<LineBreak/>
<Run Text="店铺"/>
</TextBlock>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchSourceShopName}" WaterRemark="精确匹配"/>
<TextBlock VerticalAlignment="Center" Margin="5,0,0,0">
<Run Text="下单"/>
<LineBreak/>
<Run Text="SKU"/>
</TextBlock>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchSourceSku}" WaterRemark="精确匹配" Visibility="{Binding Visibility,ElementName=listbox_order}"/>
<c:BButton Content="同步" Width="50" Margin="5,0,0,0" ToolTipService.InitialShowDelay="0" ToolTipService.ShowDuration="10000"
Visibility="Collapsed">
<c:BButton.ToolTip>
<StackPanel>
<TextBlock Text="1.使用筛选条件中的开始时间和结束时间进行同步"/>
<TextBlock Text="2.从开始时间起每次同步3小时时长的订单直到到达结束时间"/>
<TextBlock Text="3.已存在未结束的同步任务将不会重复执行"/>
</StackPanel>
</c:BButton.ToolTip>
</c:BButton>
</StackPanel>
<Grid Grid.Column="1" Grid.RowSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Content="搜索" Width="50" VerticalAlignment="Stretch" Margin="5,0,0,0" Command="{Binding SearchOrderCommand}"
Grid.RowSpan="2" Background="{StaticResource Button.Selected.Background}" BorderThickness="0" Foreground="White"/>
<Button Content="导出" Command="{Binding ExportCommand}" Width="50" Grid.Column="1"
Background="#1CC2A2" BorderThickness="0" Foreground="White"/>
<Button Content="同步" Command="{Binding SyncOrderCommand}" Width="50" Grid.Column="1" Grid.Row="1"
Background="#02A7F0" BorderThickness="0" Foreground="White"/>
</Grid>
</Grid>
<StackPanel Grid.Row="2" HorizontalAlignment="Left" Orientation="Horizontal">
<c:BButton Content="全部订单" Width="100"
Command="{Binding SetOrderStateCommand}" CommandParameter="{x:Null}"
Background="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=#null:#8080FF:#F2F2F2}"
Foreground="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=#null:White:#4A4A4A}"/>
<c:BButton Width="100"
Background="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=等待采购:#8080FF:#F2F2F2}"
Foreground="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=等待采购:White:#4A4A4A}"
Command="{Binding SetOrderStateCommand}" CommandParameter="{x:Static cmodel:OrderState.等待采购}">
<c:BButton.Content>
<TextBlock>
<Run Text="等待采购"/>
<Run Text="{Binding WaitPurchaseOrderCount,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"
Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
</c:BButton.Content>
</c:BButton>
<c:BButton Width="100"
Background="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=待出库:#8080FF:#F2F2F2}"
Foreground="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=待出库:White:#4A4A4A}"
Command="{Binding SetOrderStateCommand}" CommandParameter="{x:Static cmodel:OrderState.待出库}">
<c:BButton.Content>
<TextBlock>
<Run Text="待出库"/>
<Run Text="{Binding WaitOutStoreCount,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"
Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
</c:BButton.Content>
</c:BButton>
<c:BButton Content="待收货" Width="100"
Background="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=待收货:#8080FF:#F2F2F2}"
Foreground="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=待收货:White:#4A4A4A}"
Command="{Binding SetOrderStateCommand}" CommandParameter="{x:Static cmodel:OrderState.待收货}"/>
<c:BButton Content="已完成" Width="100"
Background="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=已完成:#8080FF:#F2F2F2}"
Foreground="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=已完成:White:#4A4A4A}"
Command="{Binding SetOrderStateCommand}" CommandParameter="{x:Static cmodel:OrderState.已完成}"/>
<c:BButton Content="已取消" Width="100"
Background="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=已取消:#8080FF:#F2F2F2}"
Foreground="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=已取消:White:#4A4A4A}"
Command="{Binding SetOrderStateCommand}" CommandParameter="{x:Static cmodel:OrderState.已取消}"
Visibility="{Binding IsSDGroup,ConverterParameter=true:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<!--<c:BButton Width="100"
Background="{Binding IncludeExceptionOrder,Converter={StaticResource objConverter},ConverterParameter=true:#8080FF:#F2F2F2}"
Foreground="{Binding IncludeExceptionOrder,Converter={StaticResource objConverter},ConverterParameter=true:White:#4A4A4A}"
Command="{Binding SetIncludeExceptionOrderCommand}"
Visibility="{Binding IsSDGroup,ConverterParameter=true:Collapsed:Visible,Converter={StaticResource objConverter}}">
<c:BButton.Content>
<TextBlock>
<Run Text="异常单"/>
<Run Text="{Binding ExceptionOrderCount,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"
Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
</c:BButton.Content>
</c:BButton>-->
</StackPanel>
<Border x:Name="bd_statistics" Grid.RowSpan="3" HorizontalAlignment="Right" Padding="15,0" TextBlock.Foreground="{StaticResource Text.Color}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.4*"/>
<ColumnDefinition Width="0.2*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="0.5*"/>
</Grid.RowDefinitions>
<Grid Grid.ColumnSpan="3" Grid.RowSpan="2" Margin="-10,0">
<Grid.Effect>
<DropShadowEffect BlurRadius="10" ShadowDepth="0" Direction="0" Color="#DCDCDC"/>
</Grid.Effect>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="0.5*"/>
</Grid.RowDefinitions>
<Border Background="{StaticResource Button.Selected.Background}">
</Border>
<Border Background="white" Grid.Row="1">
</Border>
</Grid>
<TextBlock VerticalAlignment="Center" Foreground="White">
<Run Text="成交额"/>
<LineBreak/>
<Run Text="{Binding ToDayOrderAchievement.SaleAmount}" FontSize="24"/>
</TextBlock>
<TextBlock Grid.Column="1" VerticalAlignment="Center" Foreground="White" Margin="10,0">
<Run Text="利润至"/>
<Run Text="{Binding ToDayOrderAchievement.PularizeEndDate,StringFormat=yyyy-MM-dd}"/>
<LineBreak/>
<Run Text="{Binding ToDayOrderAchievement.Profit}" FontSize="24"/>
<Run Text="{Binding ToDayOrderAchievement.ProfitRaito,StringFormat=({0}%)}"/>
</TextBlock>
<TextBlock Grid.Column="2" VerticalAlignment="Center" Foreground="White">
<Run Text="总单量"/>
<LineBreak/>
<Run Text="{Binding ToDayOrderAchievement.OrderCount}" FontSize="24"/>
</TextBlock>
<StackPanel Grid.Row="1" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal" Margin="0,0,0,5">
<TextBlock>
<Run Text="货物成本"/>
<Run Text="{Binding ToDayOrderAchievement.PurchaseAmount}"/>
</TextBlock>
</StackPanel>
<TextBlock>
<Run Text="平台扣点"/>
<Run Text="{Binding ToDayOrderAchievement.PlatformCommissionAmount}"/>
</TextBlock>
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" Margin="10,0">
<StackPanel Orientation="Horizontal" Margin="0,0,0,5">
<TextBlock>
<Run Text="推广成本"/>
<Run Text="{Binding ToDayOrderAchievement.AdvCost}"/>
</TextBlock>
<Path Style="{StaticResource path_question}" Fill="{StaticResource Text.Pink}" Width="14" Margin="5,0,0,0"
ToolTipService.InitialShowDelay="0"
ToolTipService.ShowDuration="20000">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<StackPanel>
<ListBox ItemsSource="{Binding ToDayOrderAchievement.ShoppopularizeList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Style="{StaticResource NoScrollViewListBoxStyle}"
Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding ItemName}"/>
<Run Text="{Binding Cost}"/>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock>
<Run Text="SD成本"/>
<Run Text="{Binding ToDayOrderAchievement.SdCost}"/>
</TextBlock>
</StackPanel>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<TextBlock>
<Run Text="人工成本"/>
<Run Text="{Binding ToDayOrderAchievement.EmployereCost}"/>
</TextBlock>
</StackPanel>
<StackPanel Grid.Row="1" Grid.Column="2" VerticalAlignment="Center">
<TextBlock Margin="0,0,0,5">
<Run Text="销售运费"/>
<Run Text="{Binding ToDayOrderAchievement.DeliveryExpressFreight}"/>
</TextBlock>
<TextBlock>
<Run Text="税务成本"/>
<Run Text="{Binding ToDayOrderAchievement.TaxCost}"/>
</TextBlock>
</StackPanel>
</Grid>
</Border>
<Border Grid.Row="4" Background="{StaticResource Border.Background}"
Visibility="{Binding Visibility,ElementName=listbox_order}">
<StackPanel Orientation="Horizontal" >
<CheckBox Content="过滤已取消" Margin="5,0,0,0" IsChecked="{Binding ExcludeCanceled,Mode=OneWayToSource,UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</Border>
<Grid Grid.Row="6">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0"
Background="#F2F2F2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="351"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="商品信息" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购信息" Grid.Column="1" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="成本信息" Grid.Column="2" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="利润信息" Grid.Column="3" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="物流信息" Grid.Column="4" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="备注信息" Grid.Column="5" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="操作" Grid.Column="6" Style="{StaticResource middleTextBlock}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="1"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="2"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="3"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="4"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="5"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="6"/>
</Grid>
</Border>
<ListBox x:Name="listbox_order"
Grid.Row="1"
ItemsSource="{Binding OrderList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
BorderBrush="{StaticResource Border.Brush}"
BorderThickness="1,1,1,0"
Foreground="{StaticResource Text.Color}"
Visibility="{Binding IncludeAfterOrder,Converter={StaticResource objConverter},ConverterParameter=true:Collapsed:Visible}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding ActualWidth,ElementName=listbox_order,Converter={StaticResource widthConverter},ConverterParameter=-0}"
MinHeight="185">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Background="#F2F2F2" Grid.ColumnSpan="2">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding OrderStartTime,StringFormat=yyyy-MM-dd HH:mm:ss}" VerticalAlignment="Center" Margin="5,0,0,0"/>
<TextBlock VerticalAlignment="Center" Text="订单号:" Margin="5,0,0,0" />
<c:BButton Content="{Binding Id}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding Id}" Margin="5,0,0,0"/>
<c:BButton x:Name="btn_orderState" Content="{Binding OrderState}" Margin="5,0,0,0" Height="25" Padding="5,0" Background="{StaticResource Text.Link.Color}"/>
<Border Width="1" Margin="5,5,0,5" Background="{StaticResource Border.Brush}"/>
<StackPanel x:Name="txt_consignee" Margin="5,0,0,0" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="收货人:"/>
<TextBox Text="{Binding Consignee.ContactName}" Foreground="{StaticResource Text.Color}"
IsReadOnly="True" Background="Transparent" BorderThickness="0"/>
<TextBlock Text="联系电话:" Margin="5,0,0,0"/>
<TextBox Text="{Binding Consignee.Mobile}" Foreground="{StaticResource Text.Color}"
IsReadOnly="True" Background="Transparent" BorderThickness="0"/>
</StackPanel>
</StackPanel>
<Border VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="350"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<!--<ColumnDefinition/>-->
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ListBox x:Name="listbox_orerSku" ItemsSource="{Binding ItemList}"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding ActualWidth,ElementName=listbox_orerSku}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!--{Binding Logo}-->
<c:BAsyncImage UrlSource="{Binding Logo}"
Width="80" DecodePixelWidth="80"
VerticalAlignment="Top" Margin="0,5,0,0"
Cursor="Hand"/>
<StackPanel Grid.Column="1" Orientation="Vertical" Margin="0,5,0,5">
<TextBlock TextTrimming="CharacterEllipsis">
<TextBlock.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="{Binding Title}"/>
</ToolTip>
</TextBlock.ToolTip>
<Run Text="SKU名称:"/>
<Run Text="{Binding Title}"/>
</TextBlock>
<TextBlock TextWrapping="Wrap">
<Run Text="单价:"/>
<Run Text="{Binding Price}"/>
</TextBlock>
<TextBlock TextWrapping="Wrap">
<Run Text="数量:"/>
<Run Text="{Binding ItemTotal}"/>
</TextBlock>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Text="SPU:"/>
<c:BButton Content="{Binding ProductId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}"
CommandParameter="{Binding ProductId}"
Margin=" 5,0,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="SKU:"/>
<c:BButton Content="{Binding Id}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}"
CommandParameter="{Binding Id}"
Margin=" 5,0,0,0"/>
</StackPanel>
</StackPanel>
</StackPanel>
</StackPanel>
<Border Grid.ColumnSpan="2" VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"
DataContext="{Binding DataContext,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
Visibility="{Binding ItemList.Count,Converter={StaticResource objConverter},ConverterParameter=1:Collapsed:Visible}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="2" HorizontalAlignment="Right"/>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="3" HorizontalAlignment="Right"/>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="4" HorizontalAlignment="Right"/>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="5" HorizontalAlignment="Right"/>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="6" HorizontalAlignment="Right"/>
<Border x:Name="bd_costbg" Background="#FCECEE" Grid.Column="3"
Visibility="{Binding IsCostException,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}" Margin="0,0,1,0"/>
<StackPanel Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock>
<Run Text="实收金额"/>
<Run Text="{Binding ActualAmount,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Margin="5,0,0,0" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<StackPanel>
<TextBlock>
<Run Text="货款金额"/>
<Run Text="{Binding OrderSellerPrice}"/>
</TextBlock>
<TextBlock>
<Run Text="用户支付运费"/>
<Run Text="{Binding FreightPrice}"/>
</TextBlock>
</StackPanel>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<TextBlock Visibility="{Binding StorageType,ConverterParameter=SD:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Run Text="实付金额"/>
<Run Text="{Binding OrderPayment,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"/>
</TextBlock>
<StackPanel x:Name="sp_orderCoupon" Orientation="Horizontal">
<TextBlock>
<Run Text="优惠金额"/>
<Run Text="{Binding PreferentialAmount}"/>
</TextBlock>
<Path Style="{StaticResource path_question}" Width="14" Margin="5,0,0,0" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<ListBox ItemsSource="{Binding OrderCouponList}"
Style="{StaticResource NoScrollViewListBoxStyle}" Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding CouponType}"/>
<Run Text="{Binding CouponPrice,StringFormat=¥{0}}"/>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel x:Name="sp_purchaseAmount" Orientation="Horizontal">
<TextBlock>
<Run Text="采购成本"/>
<Run Text="{Binding OrderCost.PurchaseAmount}"/>
</TextBlock>
<Path x:Name="path_purchaseAmount_question"
Style="{StaticResource path_question}"
Width="14" Margin="5,0,0,0" Fill="{StaticResource Text.Pink}"
ToolTipService.InitialShowDelay="0"
ToolTipService.ShowDuration="20000">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock x:Name="txt_isManualed" Text="该订单成本经过手动编辑"
Style="{StaticResource middleTextBlock}"
Foreground="Red"
Visibility="{Binding OrderCost.IsManualEdited,Converter={StaticResource objConverter},ConverterParameter=true:Visible:Collapsed}"/>
<ListBox Grid.Row="1"
ItemsSource="{Binding OrderCostDetailGroupList}"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding SkuId,StringFormat=SKU {0}}" VerticalAlignment="Center"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<Grid Background="{StaticResource Border.Background}" Grid.RowSpan="2">
<TextBlock Text="库存流水" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="1" Grid.ColumnSpan="2">
<TextBlock Text="商品成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="3" Grid.ColumnSpan="6">
<TextBlock Text="期间成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="9" Grid.RowSpan="2">
<TextBlock Text="小计成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="10" Grid.RowSpan="2">
<TextBlock Text="扣减时间" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="1" Grid.Row="1">
<TextBlock Text="货款成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="2" Grid.Row="1">
<TextBlock Text="采购运费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="3" Grid.Row="1">
<TextBlock Text="头程费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="4" Grid.Row="1">
<TextBlock Text="打包耗材" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="5" Grid.Row="1">
<TextBlock Text="快递费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="6" Grid.Row="1">
<TextBlock Text="入库操作" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="7" Grid.Row="1">
<TextBlock Text="出库操作" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="8" Grid.Row="1">
<TextBlock Text="仓储费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Border Grid.RowSpan="2" Grid.ColumnSpan="11" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1"/>
<Border Width="1" HorizontalAlignment="Right" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="1" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="2" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="3" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="4" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="5" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="6" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="7" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="8" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="9" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Height="1" VerticalAlignment="Bottom" Grid.Column="1" Grid.ColumnSpan="8" Background="{StaticResource Border.Brush}"/>
</Grid>
<ListBox Grid.Row="2"
BorderBrush="{StaticResource Border.Brush}"
BorderThickness="1,0,1,0"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="25">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding PurchaseOrderPKId}" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SkuAmount}" Grid.Column="1" Style="{StaticResource middleTextBlock}"
Visibility="{Binding SkuAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding PurchaseFreight}" Grid.Column="2" Style="{StaticResource middleTextBlock}"
Visibility="{Binding PurchaseFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding FirstFreight}" Grid.Column="3" Style="{StaticResource middleTextBlock}"
Visibility="{Binding FirstFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding ConsumableAmount}" Grid.Column="4" Style="{StaticResource middleTextBlock}"
Visibility="{Binding ConsumableAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding DeliveryExpressFreight}" Grid.Column="5" Style="{StaticResource middleTextBlock}"
Visibility="{Binding DeliveryExpressFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding InStorageAmount}" Grid.Column="6" Style="{StaticResource middleTextBlock}"
Visibility="{Binding InStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding OutStorageAmount}" Grid.Column="7" Style="{StaticResource middleTextBlock}"
Visibility="{Binding OutStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding StorageAmount}" Grid.Column="8" Style="{StaticResource middleTextBlock}"
Visibility="{Binding StorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding TotalCost2,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="9" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="10" Style="{StaticResource middleTextBlock}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Grid.Column="1" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="2" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="3" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="4" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="5" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="6" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="7" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="8" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="9" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Height="1" VerticalAlignment="Bottom" Grid.ColumnSpan="11" Background="{StaticResource Border.Brush}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<TextBlock>
<Run Text="平台扣点"/>
<Run Text="{Binding OrderCost.PlatformCommissionAmount}"/>
<Run Text="{Binding OrderCost.PlatformCommissionRatio,StringFormat=({0:P})}"/>
</TextBlock>
<TextBlock>
<Run Text="成本总计"/>
<Run Text="{Binding OrderCost.TotalCost,Mode=OneWay}"/>
</TextBlock>
</StackPanel>
<Border Height="1" Background="{StaticResource Border.Brush}" Grid.Column="3" VerticalAlignment="Bottom" Margin="0,0,0,23"
Visibility="{Binding Visibility,ElementName=btn_editCost}"/>
<c:BButton x:Name="btn_editCost" Content="修改" Grid.Column="3" VerticalAlignment="Bottom"
Foreground="{StaticResource Text.Color}"
HorizontalAlignment="Stretch"
Background="White"
Margin="0,0,1,0"
Command="{Binding DataContext.EditCostCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"
CommandParameter="{Binding }"
Visibility="{Binding StorageType,Converter={StaticResource objConverter},ConverterParameter=#null:Collapsed:Visible}"
Height="23"/>
<StackPanel Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock>
<Run Text="毛利"/>
<Run Text="{Binding OrderCost.Profit}"/>
</TextBlock>
<TextBlock>
<Run Text="销售毛利率"/>
<Run>
<Run.Text>
<MultiBinding Converter="{StaticResource sgpConverter}">
<Binding Path="OrderCost.Profit"/>
<Binding Path="ActualAmount" Mode="OneWay"/>
</MultiBinding>
</Run.Text>
</Run>
</TextBlock>
<TextBlock>
<Run Text="成本毛利率"/>
<Run Text="{Binding OrderCost.ProfitRatio,StringFormat=\{0\}%}"/>
</TextBlock>
</StackPanel>
<Border Background="{StaticResource Border.Background}" Margin="0,0,1,0"
Grid.Column="4"
Visibility="{Binding DataContext.IsSDGroup,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}},ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}"/>
<Grid x:Name="sp_store" Grid.Column="5">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock x:Name="txt_storeName"
Text="{Binding StoreName}"
TextWrapping="Wrap"
HorizontalAlignment="Center"
Visibility="{Binding StoreName,Converter={StaticResource objConverter},ConverterParameter=#null|0:Collapsed:Visible}"/>
<StackPanel x:Name="sp_waybill" Orientation="Horizontal">
<TextBlock Text="{Binding WaybillNo,Converter={StaticResource waybillConverter}}"/>
<c:BButton x:Name="btn_waybillCopy" Style="{StaticResource LinkButton}"
Content="复制"
Command="{Binding DataContext.CopyOrderWaybillCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }" Margin="5,0,0,0"/>
</StackPanel>
</StackPanel>
<c:BButton x:Name="btn_outStore" Content="出库" VerticalAlignment="Bottom"
Foreground="{StaticResource Text.Color}"
HorizontalAlignment="Stretch"
Background="White"
Margin="0,0,1,0"
Height="25"
Visibility="{Binding OrderState,Converter={StaticResource objConverter},ConverterParameter=待出库:Visible:Collapsed}"
Command="{Binding DataContext.OutStockCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
<Border Height="1" Background="{StaticResource Border.Brush}" VerticalAlignment="Bottom" Margin="0,0,0,25"
Visibility="{Binding Visibility,ElementName=btn_outStore}"/>
</Grid>
<StackPanel Orientation="Vertical" Grid.Column="6" Margin="5,5,5,0">
<StackPanel x:Name="sp_buyerRemark">
<StackPanel Orientation="Horizontal">
<TextBlock Text="买家备注"/>
<c:BButton Content="复制" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding BuyerRemark}"/>
</StackPanel>
<TextBlock Text="{Binding BuyerRemark}" TextWrapping="Wrap"/>
</StackPanel>
<StackPanel x:Name="sp_venderRemark" Margin="0,5,0,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="商家备注"/>
<c:BButton x:Name="btn_copyVenderRemark" Content="复制" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding VenderRemark}"/>
<c:BButton Content="修改" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.EditVenderRemarkCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Grid>
<Border Grid.Row="1" VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding WaybillNo}" Value="">
<Setter TargetName="sp_waybill" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding BuyerRemark}" Value="">
<Setter TargetName="sp_buyerRemark" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding VenderRemark}" Value="">
<Setter TargetName="btn_copyVenderRemark" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding PreferentialAmount}" Value="0">
<Setter TargetName="sp_orderCoupon" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding OrderCost.PurchaseAmount}" Value="0">
<Setter TargetName="path_purchaseAmount_question" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding OrderState}" Value="已取消">
<Setter TargetName="btn_orderState" Property="Background" Value="#EC808D"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
<c:PageControl PageIndex="{Binding PageIndex}"
PageSize="{Binding PageSize}"
RecordCount="{Binding OrderCount}"
Grid.Row="7"
HorizontalAlignment="Left">
<b:Interaction.Triggers>
<b:EventTrigger EventName="OnPageIndexChanged">
<b:InvokeCommandAction Command="{Binding OrderPageIndexChangedCommand}" PassEventArgsToCommand="True"/>
</b:EventTrigger>
</b:Interaction.Triggers>
</c:PageControl>
</Grid>
</Grid>
</Page>

39
BBWYB.Client/Views/Order/OrderList.xaml.cs

@ -0,0 +1,39 @@
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages;
using SJ.Controls.Extensions;
using System.Windows.Controls;
namespace BBWYB.Client.Views.Order
{
/// <summary>
/// OrderList.xaml 的交互逻辑
/// </summary>
public partial class OrderList : Page
{
private ScrollViewer scrollviewer_OrderList;
public OrderList()
{
InitializeComponent();
this.Loaded += OrderList_Loaded;
WeakReferenceMessenger.Default.Register<Message_OrderListScrollToTop>(this, (o, x) =>
{
this.Dispatcher.Invoke(() =>
{
scrollviewer_OrderList.Dispatcher.Invoke(() => scrollviewer_OrderList.ScrollToTop());
});
});
}
private void OrderList_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
scrollviewer_OrderList = listbox_order.FindFirstVisualChild<ScrollViewer>();
}
}
public class Message_OrderListScrollToTop : ValueChangedMessage<object>
{
public Message_OrderListScrollToTop(object value) : base(value)
{
}
}
}

110
BBWYB.Client/Views/Setting/ShopSetting.xaml

@ -0,0 +1,110 @@
<Page x:Class="BBWYB.Client.Views.Setting.ShopSetting"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:BBWYB.Client.Views.Setting"
mc:Ignorable="d"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:c="clr-namespace:SJ.Controls;assembly=SJ.Controls"
xmlns:cmodel="clr-namespace:BBWYB.Client.Models"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
d:DesignHeight="450" d:DesignWidth="800"
Title="ShopSetting"
DataContext="{Binding ShopSetting,Source={StaticResource Locator}}">
<Page.Resources>
<ObjectDataProvider x:Key="PlatformProvider" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="cmodel:Platform"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<Style x:Key="textblockPropertyStyle" TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Right"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="0,0,5,0"/>
</Style>
<Style x:Key="textboxValueStyle" TargetType="{x:Type c:BTextBox}">
<Setter Property="Width" Value="150"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Background" Value="White"/>
<Setter Property="BorderBrush" Value="{StaticResource TextBox.BorderBrush}"/>
</Style>
</Page.Resources>
<b:Interaction.Triggers>
<b:EventTrigger EventName="Loaded">
<b:InvokeCommandAction Command="{Binding LoadCommand}"/>
</b:EventTrigger>
</b:Interaction.Triggers>
<Grid>
<c:RoundWaitProgress Play="{Binding IsLoading}" Panel.ZIndex="999" Visibility="{Binding IsLoading,Converter={StaticResource objConverter},ConverterParameter=true:Visible:Collapsed}"/>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>
<StackPanel Margin="20,0" Visibility="{Binding PanelIndex,Converter={StaticResource objConverter},ConverterParameter=0:Visible:Collapsed}">
<Grid Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="采购平台" Style="{StaticResource textblockPropertyStyle}"/>
<ComboBox ItemsSource="{Binding Source={StaticResource PlatformProvider}}" Grid.Column="1"
SelectedItem="{Binding PurchasePlatform,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="."
Height="25"
Width="150"
HorizontalAlignment="Left"
VerticalContentAlignment="Center"/>
</Grid>
<Grid Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding PurchasePlatform}" Style="{StaticResource textblockPropertyStyle}" Grid.Row="1"/>
<c:BTextBox Grid.Column="1" Style="{StaticResource textboxValueStyle}" Grid.Row="1"
Text="{Binding PurchaseAccount.AccountName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
<Grid Margin="0,10,0,0"
Visibility="{Binding PurchasePlatform}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="AppKey" Style="{StaticResource textblockPropertyStyle}" Grid.Row="2"/>
<c:BTextBox Grid.Column="1" Grid.Row="2"
Text="{Binding PurchaseAccount.AppKey,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
<Grid Margin="0,10,0,0" Visibility="{Binding PurchasePlatform}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="AppSecret" Style="{StaticResource textblockPropertyStyle}" Grid.Row="3"/>
<c:BTextBox Grid.Column="1" Grid.Row="3"
Text="{Binding PurchaseAccount.AppSecret,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
<Grid Margin="0,10,0,0" Visibility="{Binding PurchasePlatform}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="AppToken" Style="{StaticResource textblockPropertyStyle}" Grid.Row="4"/>
<c:BTextBox Grid.Column="1" Grid.Row="4"
Text="{Binding PurchaseAccount.AppToken,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</StackPanel>
<c:BButton Content="保存" Grid.Row="1" Width="80" HorizontalAlignment="Left"
Command="{Binding SaveCommand}" Margin="20,0,0,0"/>
</Grid>
</Grid>
</Page>

28
BBWYB.Client/Views/Setting/ShopSetting.xaml.cs

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace BBWYB.Client.Views.Setting
{
/// <summary>
/// ShopSetting.xaml 的交互逻辑
/// </summary>
public partial class ShopSetting : Page
{
public ShopSetting()
{
InitializeComponent();
}
}
}

423
BBWYB.Client/Views/Ware/WareStock.xaml

@ -1,423 +0,0 @@
<Page x:Class="BBWYB.Client.Views.Ware.WareStock"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:BBWYB.Client.Views.Ware"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="1300"
DataContext="{Binding WareStock,Source={StaticResource Locator}}"
xmlns:c="clr-namespace:SJ.Controls;assembly=SJ.Controls"
xmlns:ts="clr-namespace:BBWYB.Client.TemplateSelectors"
xmlns:clientModel="clr-namespace:BBWYB.Client.Models"
xmlns:ctr="clr-namespace:BBWYB.Client.Converters"
Title="WareStock">
<b:Interaction.Triggers>
<b:EventTrigger EventName="Loaded">
<b:InvokeCommandAction Command="{Binding LoadCommand}"/>
</b:EventTrigger>
</b:Interaction.Triggers>
<Page.Resources>
<ObjectDataProvider x:Key="platformProvider" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="clientModel:Platform"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ctr:PurchaseOrderDelBtnConverter x:Key="poDelConverter"/>
<ctr:PurchaseOrderEditBtnConverter x:Key="poEditConverter"/>
<DataTemplate x:Key="purchaseOrderTemplate_normal">
<Grid Width="{Binding ActualWidth,ElementName= listbox_purchaseOrderList}"
Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="70"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding PurchasePlatform}" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding PurchaseOrderId}" Grid.Column="1" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleSkuAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="2" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleFreight,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="3" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleFirstFreight}" Grid.Column="4" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleInStorageAmount}" Grid.Column="5" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleOutStorageAmount}" Grid.Column="6" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleRefundInStorageAmount}" Grid.Column="7" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleConsumableAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="8" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="9" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleDeliveryFreight}" Grid.Column="10" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding PurchaseQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="11" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding RemainingQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="12" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding UnitCost,Mode=OneWay}" Grid.Column="13" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="14" Style="{StaticResource middleTextBlock}"/>
<StackPanel Grid.Column="15" HorizontalAlignment="Center" Orientation="Horizontal">
<c:BButton Content="编辑" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.EditPurchaseOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"
CommandParameter="{Binding }">
</c:BButton>
<c:BButton Content="删除" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.DeletePurchaseOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}" CommandParameter="{Binding }">
</c:BButton>
</StackPanel>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="1"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="2"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="3"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="4"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="5"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="6"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="7"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="8"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="9"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="10"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="11"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="12"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="13"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="14"/>
<Border Height="1" Grid.ColumnSpan="16" Background="{StaticResource Border.Brush}" VerticalAlignment="Bottom"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="purchaseOrderTemplate_edit">
<Grid Width="{Binding ActualWidth,ElementName= listbox_purchaseOrderList}"
Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="70"/>
</Grid.ColumnDefinitions>
<!--<c:BTextBox Text="{Binding PurchasePlatform}"/>-->
<ComboBox ItemsSource="{Binding Source={StaticResource platformProvider}}"
SelectedItem="{Binding PurchasePlatform}"
BorderThickness="0"
VerticalContentAlignment="Center"
FocusVisualStyle="{x:Null}"/>
<c:BTextBox Text="{Binding PurchaseOrderId}" Grid.Column="1" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleSkuAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}"
Grid.Column="2" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleFreight,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="3" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleFirstFreight,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="4" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleInStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="5" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleOutStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="6" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleRefundInStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="7" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleConsumableAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="8" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="9" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleDeliveryFreight,Converter={StaticResource inputNumberConverter}}" Grid.Column="10" BorderThickness="0"/>
<c:BTextBox Text="{Binding PurchaseQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="11" BorderThickness="0"/>
<c:BTextBox Text="{Binding RemainingQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="12" BorderThickness="0"/>
<TextBlock Text="{Binding UnitCost,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="13" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="14" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<StackPanel Grid.Column="15" HorizontalAlignment="Center" Orientation="Horizontal">
<c:BButton Content="保存" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.SavePurchaseOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"
CommandParameter="{Binding }" />
<c:BButton Content="删除" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.DeletePurchaseOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}" CommandParameter="{Binding }">
</c:BButton>
</StackPanel>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="1"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="2"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="3"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="4"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="5"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="6"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="7"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="8"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="9"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="10"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="11"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="12"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="13"/>
<Border Height="1" Grid.ColumnSpan="16" Background="{StaticResource Border.Brush}" VerticalAlignment="Bottom"/>
</Grid>
</DataTemplate>
</Page.Resources>
<Grid>
<c:RoundWaitProgress Play="{Binding IsLoading}" Panel.ZIndex="999"/>
<Grid Margin="5,0">
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="5"/>
<RowDefinition Height="30"/>
<RowDefinition/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Background="{StaticResource Border.Background}">
<TextBlock Text="SPU" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchSpu}" WaterRemark="精确匹配"/>
<TextBlock Text="SKU" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchSku}" WaterRemark="精确匹配"/>
<TextBlock Text="货号" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchProductItem}" WaterRemark="精确匹配"/>
<TextBlock Text="采购单号" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchPurchaseOrder}" WaterRemark="精确匹配"/>
<c:BButton Content="搜索" Padding="10,0" Margin="5,0,0,0"
Command="{Binding SearchCommand}"/>
</StackPanel>
<Border Grid.Row="2" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0"
Background="#F2F2F2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="70"/>
</Grid.ColumnDefinitions>
<TextBlock Text="商品信息" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="仓储平台" Grid.Column="1" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购平台" Grid.Column="2" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购订单号" Grid.Column="3" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购单价" Grid.Column="4" Style="{StaticResource middleTextBlock}"/>
<TextBlock Grid.Column="5" Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="采购运"/>
<LineBreak/>
<Run Text="单价"/>
</TextBlock>
<TextBlock Text="头程单价" Grid.Column="6" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="入仓单价" Grid.Column="7" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="出仓单价" Grid.Column="8" Style="{StaticResource middleTextBlock}"/>
<TextBlock Grid.Column="9" Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="退货"/>
<LineBreak/>
<Run Text="入仓单价"/>
</TextBlock>
<TextBlock Text="耗材单价" Grid.Column="10" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="仓储单价" Grid.Column="11" Style="{StaticResource middleTextBlock}"/>
<TextBlock Grid.Column="12" Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="销售运"/>
<LineBreak/>
<Run Text="单价"/>
</TextBlock>
<TextBlock Text="库存" Grid.Column="13" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="剩余库存" Grid.Column="14" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="均摊单价" Grid.Column="15" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购时间" Grid.Column="16" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="操作" Grid.Column="17" Style="{StaticResource middleTextBlock}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="1"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="2"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="3"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="4"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="5"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="6"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="7"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="8"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="9"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="10"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="11"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="12"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="13"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="14"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="15"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="16"/>
</Grid>
</Border>
<ListBox x:Name="listbox_productList"
Grid.Row="3"
ItemsSource="{Binding ProductList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Foreground="{StaticResource Text.Color}"
BorderThickness="1,1,1,0"
BorderBrush="{StaticResource Border.Brush}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding ActualWidth,ElementName=listbox_productList}">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Background="#F2F2F2" Grid.ColumnSpan="2">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Margin="5,0,0,0">
<Run Text="SPU:"/>
<Run Text="{Binding Id}"/>
</TextBlock>
<TextBlock VerticalAlignment="Center" Margin="5,0,0,0">
<Run Text="货号:"/>
<Run Text="{Binding ProductItemNum}"/>
</TextBlock>
</StackPanel>
<c:BButton HorizontalAlignment="Right" Content="采购库存" Width="110"
Command="{Binding DataContext.AddPurchaserOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}" CommandParameter="{Binding }"/>
</Grid>
<!--<Border Grid.ColumnSpan="2" BorderBrush="{StaticResource Border.Brush}" BorderThickness="0,0,0,1"/>-->
<ListBox x:Name="listbox_sku" Grid.Row="1" ItemsSource="{Binding SkuList}"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Foreground="{StaticResource Text.Color}"
BorderThickness="0,1,0,0"
BorderBrush="{StaticResource Border.Brush}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderThickness="0,0,0,1" BorderBrush="{StaticResource Border.Brush}"
Width="{Binding ActualWidth,ElementName=listbox_sku}">
<Grid Height="150">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="299"/>
<!--350-->
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!--SKU信息-->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<c:BAsyncImage UrlSource="{Binding Logo}" Width="80" DecodePixelWidth="80"
VerticalAlignment="Top" Margin="0,5,0,0"/>
<StackPanel Grid.Column="1" Orientation="Vertical" Margin="0,5,0,0">
<TextBlock>
<Run Text="售价:" />
<Run Text="{Binding Price}"/>
</TextBlock>
<TextBlock>
<Run Text="SKU:" />
<Run Text="{Binding Id}"/>
</TextBlock>
<TextBlock TextWrapping="Wrap">
<Run Text="SKU名称:" />
<Run Text="{Binding Title}"/>
</TextBlock>
</StackPanel>
</Grid>
<!--仓储平台-->
<ListBox x:Name="listbox_storageType" Grid.Column="1"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Style="{StaticResource NoScrollViewListBoxStyle}"
BorderBrush="{StaticResource Border.Brush}"
BorderThickness="1,0,0,0"
ItemsSource="{Binding StorageList}"
SelectedItem="{Binding SelectedStorageModel}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid x:Name="grid_storageType" Width="{Binding ActualWidth,ElementName=listbox_storageType,Converter={StaticResource widthConverter},ConverterParameter=7}" Margin="5,5,5,0" Height="25"
Background="{StaticResource Button.Normal.Background}">
<TextBlock x:Name="txt_storageType" Text="{Binding StorageType}" HorizontalAlignment="Center" VerticalAlignment="Center"
Foreground="{StaticResource Text.Color}"/>
<b:Interaction.Triggers>
<b:EventTrigger EventName="MouseLeftButtonDown">
<b:InvokeCommandAction Command="{Binding DataContext.SwitchStorageTypeCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"
CommandParameter="{Binding }"/>
</b:EventTrigger>
</b:Interaction.Triggers>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}}}"
Value="True">
<Setter TargetName="grid_storageType" Property="Background" Value="{StaticResource Button.Selected.Background}"/>
<Setter TargetName="txt_storageType" Property="Foreground" Value="White"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<!--采购订单-->
<ListBox x:Name="listbox_purchaseOrderList" ItemsSource="{Binding PurchaseOrderList}"
Grid.Column="2"
BorderThickness="1,0"
BorderBrush="{StaticResource Border.Brush}"
Style="{StaticResource NoScrollViewListBoxStyle}">
<!-- ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"-->
<!--<ListBox.ItemTemplateSelector>
<ts:PurchaseOrderDataTemplateSelector NormalTemplate="{StaticResource purchaseOrderTemplate_normal}"
EditTemplate="{StaticResource purchaseOrderTemplate_edit}"/>
</ListBox.ItemTemplateSelector>-->
<ListBox.ItemContainerStyle>
<Style BasedOn="{StaticResource NoBgListBoxItemStyle}" TargetType="ListBoxItem">
<Setter Property="ContentTemplate" Value="{StaticResource purchaseOrderTemplate_normal}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsEdit}" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource purchaseOrderTemplate_edit}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<c:PageControl PageIndex="{Binding PageIndex}"
PageSize="5"
RecordCount="{Binding ProductCount}"
Grid.Row="4">
<b:Interaction.Triggers>
<b:EventTrigger EventName="OnPageIndexChanged">
<b:InvokeCommandAction Command="{Binding ProductPageIndexChangedCommand}" PassEventArgsToCommand="True"/>
</b:EventTrigger>
</b:Interaction.Triggers>
</c:PageControl>
</Grid>
</Grid>
</Page>

48
BBWYB.Client/Views/Ware/WareStock.xaml.cs

@ -1,48 +0,0 @@
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages;
using SJ.Controls.Extensions;
using System.Windows;
using System.Windows.Controls;
namespace BBWYB.Client.Views.Ware
{
/// <summary>
/// WareStock.xaml 的交互逻辑
/// </summary>
public partial class WareStock : Page
{
private ScrollViewer scrollviewer_ProductList;
public WareStock()
{
InitializeComponent();
this.Loaded += WareStock_Loaded;
this.Unloaded += WareStock_Unloaded;
//Messenger.Default.Register<string>(this, "WareStock_ProductListScrollToTop", (x) =>
//{
// scrollviewer_ProductList.Dispatcher.Invoke(() => scrollviewer_ProductList.ScrollToTop());
//});
WeakReferenceMessenger.Default.Register<Message_WareStock_ProductListScrollToTop>(this, (o, x) =>
{
scrollviewer_ProductList.Dispatcher.Invoke(() => scrollviewer_ProductList.ScrollToTop());
});
}
private void WareStock_Unloaded(object sender, RoutedEventArgs e)
{
//Messenger.Default.Unregister(this);
WeakReferenceMessenger.Default.UnregisterAll(this);
}
private void WareStock_Loaded(object sender, RoutedEventArgs e)
{
scrollviewer_ProductList = listbox_productList.FindFirstVisualChild<ScrollViewer>();
}
}
public class Message_WareStock_ProductListScrollToTop : ValueChangedMessage<object>
{
public Message_WareStock_ProductListScrollToTop(object value) : base(value)
{
}
}
}

27
BBWYB.Server.API/Controllers/VenderController.cs

@ -0,0 +1,27 @@
using BBWYB.Server.Business;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Mvc;
namespace BBWYB.Server.API.Controllers
{
public class VenderController : BaseApiController
{
private VenderBusiness venderBusiness;
public VenderController(IHttpContextAccessor httpContextAccessor, VenderBusiness venderBusiness) : base(httpContextAccessor)
{
this.venderBusiness = venderBusiness;
}
/// <summary>
/// 保存店铺信息
/// </summary>
/// <param name="shopSettingRequest"></param>
/// <returns></returns>
[HttpPost]
public long SaveShopSetting([FromBody] ShopSettingRequest shopSettingRequest)
{
return venderBusiness.SaveShopSetting(shopSettingRequest);
}
}
}

16
BBWYB.Server.Business/Order/OrderBusiness.cs

@ -1,13 +1,11 @@
using BBWY.Server.Model.Dto;
using BBWYB.Common.Extensions;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using FreeSql;
using Yitter.IdGenerator;
using BBWYB.Server.Model.Db;
using System.Linq.Expressions;
using BBWYB.Common.Extensions;
using BBWYB.Server.Model;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business.Order
{
@ -69,14 +67,16 @@ namespace BBWYB.Server.Business.Order
Platform = o.Platform,
ShopId = o.ShopId,
StartTime = o.StartTime,
StorageType = o.StorageType,
VenderRemark = o.VenderRemark,
PurchaseRemark = o.PurchaseRemark,
WaybillNo = o.WaybillNo,
Flag = o.Flag,
IsAfterSaleOrder = o.IsAfterSaleOrder,
SellerPreferentialAmount = o.SellerPreferentialAmount,
PreferentialAmount = o.PreferentialAmount,
ClientOrderId = o.ClientOrderId,
SourceShopName = o.SourceShopName,
SourceSku = o.SourceSku,
ExpressName = o.ExpressName,
IsPurchased = o.IsPurchased,
ContactName = ocs.ContactName,
Address = ocs.Address,

13
BBWYB.Server.Business/Sync/OrderSyncBusiness.cs

@ -82,8 +82,8 @@ namespace BBWYB.Server.Business.Sync
foreach (var qtOrder in qtOrderList.Items)
{
var orderState = ConvertQuanTanOrderState(qtOrder.OrderState);
var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == qtOrder.OrderId);
var orderState = ConvertQuanTanOrderState(qtOrder.OrderState, dbOrder?.IsPurchased ?? false);
if (dbOrder == null)
{
//新订单
@ -95,8 +95,7 @@ namespace BBWYB.Server.Business.Sync
ExpressName = qtOrder.DeliveryResponse.ExpressName,
FreightPrice = qtOrder.FreightAmount,
ModifyTime = qtOrder.ModifyTime,
Flag = string.Empty,
IsAfterSaleOrder = false,
IsPurchased = false,
OrderPayment = qtOrder.OrderPayment,
OrderSellerPrice = qtOrder.OrderProductAmount,
OrderTotalPrice = qtOrder.OrderTotalAmount,
@ -108,7 +107,6 @@ namespace BBWYB.Server.Business.Sync
ShopId = shopId,
SellerPreferentialAmount = qtOrder.SellerPreferentialAmount,
StartTime = qtOrder.StartTime,
StorageType = 0,
VenderRemark = qtOrder.VenderRemark,
WaybillNo = qtOrder.DeliveryResponse.WayBillNo,
OrderState = orderState,
@ -221,7 +219,7 @@ namespace BBWYB.Server.Business.Sync
}
}
private Enums.OrderState ConvertQuanTanOrderState(string qtOrderState)
private Enums.OrderState ConvertQuanTanOrderState(string qtOrderState, bool isPurchased)
{
/*
-1退
@ -233,7 +231,12 @@ namespace BBWYB.Server.Business.Sync
if (qtOrderState == "-1")
return Enums.OrderState.退;
if (qtOrderState == "0")
{
if (!isPurchased)
return Enums.OrderState.;
return Enums.OrderState.;
}
if (qtOrderState == "1")
return Enums.OrderState.;
if (qtOrderState == "2")

92
BBWYB.Server.Business/Vender/VenderBusiness.cs

@ -2,6 +2,8 @@
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Db.MDS;
using BBWYB.Server.Model.Dto;
using Yitter.IdGenerator;
@ -25,5 +27,95 @@ namespace BBWYB.Server.Business
.ToList<ShopResponse>();
}
public long SaveShopSetting(ShopSettingRequest shopSettingRequest)
{
//根据shopId查询mds shop的主键Id
var shopId = shopSettingRequest.ShopId.ToString();
var mdsShop = fsqlManager.MDSfsql.Select<Shops>().Where(s => s.ShopId == shopId).ToOne();
if (mdsShop == null)
throw new BusinessException($"mds未找到shopId {shopSettingRequest.ShopId}");
if (shopSettingRequest.PurchaseAccountId == 0)
{
shopSettingRequest.PurchaseAccountId = idGenerator.NewLong();
var pa = new PurchaseAccount()
{
Id = shopSettingRequest.PurchaseAccountId,
AccountName = shopSettingRequest.AccountName,
AppKey = shopSettingRequest.AppKey,
AppSecret = shopSettingRequest.AppSecret,
AppToken = shopSettingRequest.AppToken,
CreateTime = DateTime.Now,
CreatorId = "",
Deleted = 0,
PurchasePlatformId = shopSettingRequest.PurchasePlatformId,
ShopId = shopSettingRequest.ShopId
};
var mdspa = new Purchaseaccount()
{
Id = shopSettingRequest.PurchaseAccountId.ToString(),
AccountName = shopSettingRequest.AccountName,
AppKey = shopSettingRequest.AppKey,
AppSecret = shopSettingRequest.AppSecret,
AppToken = shopSettingRequest.AppToken,
CreateTime = DateTime.Now,
CreatorId = "",
Deleted = 0,
PurchasePlatformId = ((int)shopSettingRequest.PurchasePlatformId).ToString(),
ShopId = mdsShop.Id
};
fsqlManager.BBWYfsql.Insert(pa).ExecuteAffrows();
fsqlManager.MDSfsql.Transaction(() =>
{
fsqlManager.MDSfsql.Insert(mdspa).ExecuteAffrows();
//修改扣点和管理密码
//fsqlManager.MDSfsql.Update<Shops>(mdsShop.Id).Set(s => s.ManagePwd, shopSettingRequest.ManagerPwd)
// .Set(s => s.PlatformCommissionRatio, shopSettingRequest.PlatformCommissionRatio)
// .Set(s => s.DingDingKey, shopSettingRequest.DingDingKey)
// .Set(s => s.DingDingWebHook, shopSettingRequest.DingDingWebHook)
// .Set(s => s.SkuSafeTurnoverDays, shopSettingRequest.SkuSafeTurnoverDays)
// .Set(s => s.SiNanDingDingKey, shopSettingRequest.SiNanDingDingKey)
// .Set(s => s.SiNanDingDingWebHook, shopSettingRequest.SiNanDingDingWebHook)
// .Set(s => s.SiNanPolicyLevel, shopSettingRequest.SiNanPolicyLevel)
// .ExecuteAffrows();
});
}
else
{
fsqlManager.BBWYfsql.Update<PurchaseAccount>(shopSettingRequest.PurchaseAccountId)
.Set(pa => pa.AppKey, shopSettingRequest.AppKey)
.Set(pa => pa.AppSecret, shopSettingRequest.AppSecret)
.Set(pa => pa.AppToken, shopSettingRequest.AppToken)
.Set(pa => pa.AccountName, shopSettingRequest.AccountName)
.Set(pa => pa.PurchasePlatformId, shopSettingRequest.PurchasePlatformId)
.ExecuteAffrows();
fsqlManager.MDSfsql.Transaction(() =>
{
fsqlManager.MDSfsql.Update<Purchaseaccount>(shopSettingRequest.PurchaseAccountId.ToString())
.Set(pa => pa.AppKey, shopSettingRequest.AppKey)
.Set(pa => pa.AppSecret, shopSettingRequest.AppSecret)
.Set(pa => pa.AppToken, shopSettingRequest.AppToken)
.Set(pa => pa.AccountName, shopSettingRequest.AccountName)
.Set(pa => pa.PurchasePlatformId, ((int)shopSettingRequest.PurchasePlatformId).ToString())
.ExecuteAffrows();
//修改扣点和管理密码
//fsqlManager.MDSfsql.Update<Shops>(mdsShop.Id).Set(s => s.ManagePwd, shopSettingRequest.ManagerPwd)
// .Set(s => s.PlatformCommissionRatio, shopSettingRequest.PlatformCommissionRatio)
// .Set(s => s.DingDingKey, shopSettingRequest.DingDingKey)
// .Set(s => s.DingDingWebHook, shopSettingRequest.DingDingWebHook)
// .Set(s => s.SkuSafeTurnoverDays, shopSettingRequest.SkuSafeTurnoverDays)
// .Set(s => s.SiNanDingDingKey, shopSettingRequest.SiNanDingDingKey)
// .Set(s => s.SiNanDingDingWebHook, shopSettingRequest.SiNanDingDingWebHook)
// .Set(s => s.SiNanPolicyLevel, shopSettingRequest.SiNanPolicyLevel)
// .ExecuteAffrows();
});
}
return shopSettingRequest.PurchaseAccountId;
}
}
}

60
BBWYB.Server.Model/Db/MDS/Purchaseaccount.cs

@ -0,0 +1,60 @@
using FreeSql.DataAnnotations;
using System;
namespace BBWYB.Server.Model.Db.MDS
{
/// <summary>
/// 采购账号表
/// </summary>
[Table(Name = "purchaseaccount", DisableSyncStructure = true)]
public partial class Purchaseaccount {
/// <summary>
/// 主键
/// </summary>
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
public string AccountName { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
public string AppToken { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人Id
/// </summary>
[Column(StringLength = 50)]
public string CreatorId { get; set; }
/// <summary>
/// 否已删除
/// </summary>
[Column(DbType = "tinyint(4)")]
public sbyte Deleted { get; set; }
[Column(StringLength = 50)]
public string PurchasePlatformId { get; set; }
/// <summary>
/// 采购账号归属店铺ID
/// </summary>
[Column(StringLength = 50)]
public string ShopId { get; set; }
}
}

22
BBWYB.Server.Model/Db/Order/Order.cs

@ -25,11 +25,6 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "datetime")]
public DateTime? EndTime { get; set; }
/// <summary>
/// 订单旗帜
/// </summary>
[Column(StringLength = 10)]
public string Flag { get; set; }
/// <summary>
/// 商品运费(用户承担)
@ -37,12 +32,6 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")]
public decimal? FreightPrice { get; set; }
/// <summary>
/// 是否为售后单
/// </summary>
public bool? IsAfterSaleOrder { get; set; } = false;
/// <summary>
/// 修改时间
/// </summary>
@ -123,13 +112,6 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "datetime")]
public DateTime? StartTime { get; set; }
/// <summary>
/// 仓储类型
/// </summary>
[Column(DbType = "int(1)")]
public int? StorageType { get; set; }
/// <summary>
/// 商家备注
/// </summary>
@ -166,6 +148,10 @@ namespace BBWYB.Server.Model.Db
[Column(StringLength = 100)]
public string ClientOrderId { get; set; }
/// <summary>
/// 是否采购
/// </summary>
public bool IsPurchased { get; set; }
#region 订单成本
/// <summary>

3
BBWYB.Server.Model/Db/Order/OrderCost.cs

@ -57,6 +57,9 @@ namespace BBWYB.Server.Model.Db
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PurchaseAmount { get; set; } = 0.00M;
[Column(DbType = "decimal(20,2)")]
public decimal? TotalCost { get; set; } = 0.00M;
}
}

10
BBWYB.Server.Model/Db/Order/OrderCostDetail.cs

@ -94,11 +94,11 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")]
public decimal? SkuAmount { get; set; } = 0.00M;
/// <summary>
/// sku毛利
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SkuGrossProfit { get; set; } = 0.00M;
///// <summary>
///// sku毛利
///// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal? SkuGrossProfit { get; set; } = 0.00M;
[Column(StringLength = 50)]
public string SkuId { get; set; }

64
BBWYB.Server.Model/Db/PurchaseAccount/PurchaseAccount.cs

@ -0,0 +1,64 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 采购账号表
/// </summary>
[Table(Name = "purchaseaccount", DisableSyncStructure = true)]
public partial class PurchaseAccount
{
/// <summary>
/// 主键
/// </summary>
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public long Id { get; set; }
public string AccountName { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
public string AppToken { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人Id
/// </summary>
[Column(StringLength = 50)]
public string CreatorId { get; set; }
/// <summary>
/// 否已删除
/// </summary>
[Column(DbType = "tinyint(4)")]
public sbyte Deleted { get; set; }
[Column(DbType = "int(1)", MapType = typeof(int?))]
public Enums.Platform? PurchasePlatformId { get; set; }
/// <summary>
/// 采购账号归属店铺ID
/// </summary>
[Column(DbType = "bigint(1)")]
public long? ShopId { get; set; }
}
}

23
BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs

@ -0,0 +1,23 @@
namespace BBWYB.Server.Model.Dto
{
public class ShopSettingRequest
{
public long ShopId { get; set; }
public long PurchaseAccountId { get; set; }
public string AccountName { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
public string AppToken { get; set; }
public Enums.Platform PurchasePlatformId { get; set; }
}
}

7
BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs

@ -89,8 +89,6 @@
/// </summary>
public string PurchaseRemark { get; set; }
public Enums.StorageType? StorageType { get; set; }
/// <summary>
/// 运单号
/// </summary>
@ -116,6 +114,11 @@
/// </summary>
public string ClientOrderId { get; set; }
/// <summary>
/// 是否采购
/// </summary>
public bool IsPurchased { get; set; }
/// <summary>
/// 收货人信息
/// </summary>

1
BBWYB.Server.Model/MappingProfiles.cs

@ -1,5 +1,4 @@
using AutoMapper;
using BBWY.Server.Model.Dto;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;

Loading…
Cancel
Save