42 changed files with 2403 additions and 935 deletions
@ -1,48 +0,0 @@ |
|||||
using BBWY.Client.Models.PackTask; |
|
||||
using BBWY.Common.Http; |
|
||||
using BBWY.Common.Models; |
|
||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using System.Net.Http; |
|
||||
using System.Text; |
|
||||
|
|
||||
namespace BBWY.Client.APIServices |
|
||||
{ |
|
||||
public class IncreateServiceService : BaseApiService, IDenpendency |
|
||||
{ |
|
||||
public IncreateServiceService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) |
|
||||
{ |
|
||||
} |
|
||||
|
|
||||
public ApiResponse<IncreateServiceModel[]> SearchAll() |
|
||||
{ |
|
||||
return SendRequest<IncreateServiceModel[]>(globalContext.QKApiHost, "api/IncreateService/SearchAll", |
|
||||
null |
|
||||
, null, HttpMethod.Get); |
|
||||
} |
|
||||
|
|
||||
public ApiResponse<object> Add(IncreateServiceModel consumable) |
|
||||
{ |
|
||||
return SendRequest<object>(globalContext.QKApiHost, "api/IncreateService/Add", |
|
||||
consumable |
|
||||
, null, HttpMethod.Post); |
|
||||
} |
|
||||
public ApiResponse<object> Edit(IncreateServiceModel consumable) |
|
||||
{ |
|
||||
return SendRequest<object>(globalContext.QKApiHost, "api/IncreateService/Edit", |
|
||||
consumable |
|
||||
, null, HttpMethod.Post); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
public ApiResponse<object> Deleted(long id) |
|
||||
{ |
|
||||
return SendRequest<object>(globalContext.QKApiHost, "api/IncreateService/Deleted", |
|
||||
new |
|
||||
{ |
|
||||
id = id |
|
||||
} |
|
||||
, null, HttpMethod.Get); |
|
||||
} |
|
||||
} |
|
||||
} |
|
@ -0,0 +1,37 @@ |
|||||
|
using BBWY.Client.Models.APIModel; |
||||
|
using BBWY.Client.Models.APIModel.Response.PackTask; |
||||
|
using BBWY.Common.Http; |
||||
|
using BBWY.Common.Models; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Net.Http; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace BBWY.Client.APIServices.QiKu |
||||
|
{ |
||||
|
public class MarkMessageService : BaseApiService, IDenpendency |
||||
|
{ |
||||
|
public MarkMessageService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public ApiResponse<bool> AppendMarkMessage(long TaskId, string MarkMessage, string UserName) |
||||
|
{ |
||||
|
return SendRequest<bool>(globalContext.QKApiHost, $"api/MarkMessage/AppendMarkMessage", |
||||
|
new |
||||
|
{ |
||||
|
TaskId, |
||||
|
MarkMessage, |
||||
|
UserName |
||||
|
} |
||||
|
, null, HttpMethod.Post); |
||||
|
} |
||||
|
|
||||
|
public ApiResponse<ShowTaskMarkMessageResponse[]> ShowTaskMarkMessage(long TaskId) |
||||
|
{ |
||||
|
return SendRequest<ShowTaskMarkMessageResponse[]>(globalContext.QKApiHost, $"api/MarkMessage/ShowTaskMarkMessage?TaskId={TaskId}", |
||||
|
null |
||||
|
, null, HttpMethod.Get); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -1,56 +0,0 @@ |
|||||
using BBWY.Client.Models.APIModel.Request; |
|
||||
using BBWY.Client.Models.PackTask; |
|
||||
using BBWY.Common.Http; |
|
||||
using BBWY.Common.Models; |
|
||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using System.Net.Http; |
|
||||
using System.Text; |
|
||||
|
|
||||
namespace BBWY.Client.APIServices |
|
||||
{ |
|
||||
public class WorkProcessService : BaseApiService, IDenpendency |
|
||||
{ |
|
||||
public WorkProcessService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) |
|
||||
{ |
|
||||
} |
|
||||
|
|
||||
public ApiResponse<WorkProcessModel[]> SearchAll() |
|
||||
{ |
|
||||
return SendRequest<WorkProcessModel[]>(globalContext.QKApiHost, "api/WorkProcess/SearchAll", |
|
||||
null |
|
||||
, null, HttpMethod.Get); |
|
||||
} |
|
||||
|
|
||||
public ApiResponse<object> Add(WorkProcessModel consumable) |
|
||||
{ |
|
||||
return SendRequest<object>(globalContext.QKApiHost, "api/WorkProcess/Add", |
|
||||
consumable |
|
||||
, null, HttpMethod.Post); |
|
||||
} |
|
||||
public ApiResponse<object> Edit(WorkProcessModel consumable) |
|
||||
{ |
|
||||
return SendRequest<object>(globalContext.QKApiHost, "api/WorkProcess/Edit", |
|
||||
consumable |
|
||||
, null, HttpMethod.Post); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
public ApiResponse<object> Deleted(long id) |
|
||||
{ |
|
||||
return SendRequest<object>(globalContext.QKApiHost, "api/WorkProcess/Deleted", |
|
||||
new |
|
||||
{ |
|
||||
id = id |
|
||||
} |
|
||||
, null, HttpMethod.Get); |
|
||||
} |
|
||||
|
|
||||
//public ApiResponse<ConsumableResponse> Search(ConsumableRequest consumable)
|
|
||||
//{
|
|
||||
// return SendRequest<ConsumableResponse>(globalContext.QKApiHost, "api/WorkProcess/Search",
|
|
||||
// consumable
|
|
||||
// , null, HttpMethod.Post);
|
|
||||
//}
|
|
||||
} |
|
||||
} |
|
@ -0,0 +1,30 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace BBWY.Client.Models.APIModel |
||||
|
{ |
||||
|
public class ShowTaskMarkMessageResponse |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 备注消息
|
||||
|
/// </summary>
|
||||
|
public string MarkMessage { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 备注人
|
||||
|
/// </summary>
|
||||
|
public string UserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 备注时间
|
||||
|
/// </summary>
|
||||
|
public DateTime? CreateTime { get; set; } |
||||
|
|
||||
|
|
||||
|
public override string ToString() |
||||
|
{ |
||||
|
return $"{CreateTime?.ToString("yyyy-MM-dd")} {UserName}:{MarkMessage}"; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,808 @@ |
|||||
|
using BBWY.Client.APIServices.QiKu; |
||||
|
using BBWY.Client.APIServices; |
||||
|
using BBWY.Client.Models.APIModel.Request; |
||||
|
using BBWY.Client.Models.PackTask; |
||||
|
using BBWY.Client.Models; |
||||
|
using BBWY.Client.Views.PackTask; |
||||
|
using BBWY.Common.Models; |
||||
|
using GalaSoft.MvvmLight.Command; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Collections.ObjectModel; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Windows.Input; |
||||
|
using System.Windows; |
||||
|
using BBWY.Client.Views.QualityTask; |
||||
|
using BBWY.Client.Models.QualityTask; |
||||
|
|
||||
|
namespace BBWY.Client.ViewModels.PackTask |
||||
|
{ |
||||
|
public class UpdatePurchaseTaskViewModel : BaseVM |
||||
|
{ |
||||
|
|
||||
|
#region 属性
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
private ObservableCollection<PurchaseSku> purchaseSkuList; |
||||
|
public ObservableCollection<PurchaseSku> PurchaseSkuList { get => purchaseSkuList; set { Set(ref purchaseSkuList, value); } } |
||||
|
|
||||
|
private string searchSkuId; |
||||
|
public string SearchSkuId { get => searchSkuId; set { Set(ref searchSkuId, value); } } |
||||
|
|
||||
|
// public long TaskId { get; set; }
|
||||
|
//private bool isSelected;
|
||||
|
//public bool IsSelected { get => isSelected; set { Set(ref isSelected, value); } }
|
||||
|
|
||||
|
private ObservableCollection<string> worryList = new ObservableCollection<string> { |
||||
|
"否","是" |
||||
|
}; |
||||
|
public ObservableCollection<string> WorryList { get => worryList; set { Set(ref worryList, value); } } |
||||
|
|
||||
|
private ObservableCollection<string> positionTypeList = new ObservableCollection<string> { |
||||
|
"商家仓","齐越仓", "京东仓","聚水潭仓"}; |
||||
|
public ObservableCollection<string> PositionTypeList { get => positionTypeList; set { Set(ref positionTypeList, value); } } |
||||
|
|
||||
|
private ObservableCollection<string> packTypeList = new ObservableCollection<string> { |
||||
|
"单件","多件" |
||||
|
}; |
||||
|
public ObservableCollection<string> PackTypeList { get => packTypeList; set { Set(ref packTypeList, value); } } |
||||
|
|
||||
|
private ObservableCollection<string> basicPackList = new ObservableCollection<string> { |
||||
|
"快递袋","纸箱","麻袋" |
||||
|
}; |
||||
|
public ObservableCollection<string> BasicPackList { get => basicPackList; set { Set(ref basicPackList, value); } } |
||||
|
|
||||
|
private ObservableCollection<string> isNeedBarCodeList = new ObservableCollection<string> { |
||||
|
"需要", "不需要" }; |
||||
|
public ObservableCollection<string> IsNeedBarCodeList { get => isNeedBarCodeList; set { Set(ref isNeedBarCodeList, value); } } |
||||
|
|
||||
|
private ObservableCollection<string> isNeedCerList = new ObservableCollection<string> { |
||||
|
"需要", "不需要" }; |
||||
|
public ObservableCollection<string> IsNeedCerList { get => isNeedCerList; set { Set(ref isNeedCerList, value); } } |
||||
|
|
||||
|
|
||||
|
private ObservableCollection<string> certificatePositionList = new ObservableCollection<string> { |
||||
|
"无","外部包装","产品包装" |
||||
|
}; |
||||
|
public ObservableCollection<string> CertificatePositionList { get => certificatePositionList; set { Set(ref certificatePositionList, value); } } |
||||
|
|
||||
|
private ObservableCollection<string> availabilityList = new ObservableCollection<string> { |
||||
|
"已到货","部分到货","未到货" |
||||
|
}; |
||||
|
public ObservableCollection<string> AvailabilityList { get => availabilityList; set { Set(ref availabilityList, value); } } |
||||
|
|
||||
|
private int skuCount; |
||||
|
/// <summary>
|
||||
|
/// Sku任务数
|
||||
|
/// </summary>
|
||||
|
public int SkuCount { get => skuCount; set { Set(ref skuCount, value); } } |
||||
|
|
||||
|
private string skuId; |
||||
|
/// <summary>
|
||||
|
/// Sku
|
||||
|
/// </summary>
|
||||
|
public string SkuId { get => skuId; set { Set(ref skuId, value); } } |
||||
|
|
||||
|
|
||||
|
|
||||
|
public string OrderId { get; set; } |
||||
|
|
||||
|
private string logo; |
||||
|
/// <summary>
|
||||
|
/// 店铺Sku图链接
|
||||
|
/// </summary>
|
||||
|
public string Logo { get => logo; set { Set(ref logo, value); } } |
||||
|
|
||||
|
private string skuName; |
||||
|
/// <summary>
|
||||
|
/// 采购Sku名称
|
||||
|
/// </summary>
|
||||
|
public string SkuName { get => skuName; set { Set(ref skuName, value); } } |
||||
|
|
||||
|
private string brand; |
||||
|
/// <summary>
|
||||
|
/// 品牌
|
||||
|
/// </summary>
|
||||
|
public string Brand { get => brand; set { Set(ref brand, value); } } |
||||
|
|
||||
|
|
||||
|
private string productNo; |
||||
|
/// <summary>
|
||||
|
/// 货号
|
||||
|
/// </summary>
|
||||
|
public string ProductNo { get => productNo; set { Set(ref productNo, value); } } |
||||
|
|
||||
|
private string brandName; |
||||
|
/// <summary>
|
||||
|
/// 品名(手写上传)
|
||||
|
/// </summary>
|
||||
|
public string BrandName { get => brandName; set { Set(ref brandName, value); } } |
||||
|
|
||||
|
|
||||
|
private int goodsNumber; |
||||
|
/// <summary>
|
||||
|
/// 配件数
|
||||
|
/// </summary>
|
||||
|
public int GoodsNumber { get => goodsNumber; set { Set(ref goodsNumber, value); } } |
||||
|
private Worry isWorry; |
||||
|
/// <summary>
|
||||
|
/// 是否加急
|
||||
|
/// </summary>
|
||||
|
public Worry IsWorry { get => isWorry; set { Set(ref isWorry, value); } } |
||||
|
|
||||
|
private Availability availability; |
||||
|
/// <summary>
|
||||
|
/// 到货情况(待收货=0,部分收货=1,已到货=2)
|
||||
|
/// </summary>
|
||||
|
public Availability Availability { get => availability; set { Set(ref availability, value); } } |
||||
|
|
||||
|
private PackType packType; |
||||
|
/// <summary>
|
||||
|
/// 打包类型(单件=0,多件=1)
|
||||
|
/// </summary>
|
||||
|
public PackType PackType { get => packType; set { Set(ref packType, value); } } |
||||
|
|
||||
|
private BasicPack basicPack; |
||||
|
/// <summary>
|
||||
|
/// 基础包装(快递袋=0,纸箱=1,麻袋=2)
|
||||
|
/// </summary>
|
||||
|
public BasicPack BasicPack { get => basicPack; set { Set(ref basicPack, value); } } |
||||
|
|
||||
|
private PositionType positionType; |
||||
|
/// <summary>
|
||||
|
/// 落仓(商家仓=0,齐越仓=1,京东仓=2,聚水潭仓=3)
|
||||
|
/// </summary>
|
||||
|
public PositionType PositionType { get => positionType; set { Set(ref positionType, value); } } |
||||
|
|
||||
|
private string skuTitle; |
||||
|
/// <summary>
|
||||
|
/// sku配件商品名称
|
||||
|
/// </summary>
|
||||
|
public string SkuTitle { get => skuTitle; set { Set(ref skuTitle, value); } } |
||||
|
|
||||
|
private Need isNeedBarCode; |
||||
|
/// <summary>
|
||||
|
/// 是否需要合格证
|
||||
|
/// </summary>
|
||||
|
public Need IsNeedBarCode { get => isNeedBarCode; set { Set(ref isNeedBarCode, value); } } |
||||
|
|
||||
|
|
||||
|
private Need isNeedCertificateModel; |
||||
|
/// <summary>
|
||||
|
/// 是否需要条形码
|
||||
|
/// </summary>
|
||||
|
public Need IsNeedCertificateModel { get => isNeedCertificateModel; set { Set(ref isNeedCertificateModel, value); } } |
||||
|
|
||||
|
|
||||
|
private BarCodeModel barCodeModel; |
||||
|
/// <summary>
|
||||
|
/// 条形码
|
||||
|
/// </summary>
|
||||
|
public BarCodeModel BarCodeModel { get => barCodeModel; set { Set(ref barCodeModel, value); } } |
||||
|
|
||||
|
|
||||
|
private bool isSetBarCode; |
||||
|
/// <summary>
|
||||
|
/// 设置显示(条形码)
|
||||
|
/// </summary>
|
||||
|
public bool IsSetBarCode |
||||
|
{ |
||||
|
get => isSetBarCode; |
||||
|
set |
||||
|
{ |
||||
|
|
||||
|
Set(ref isSetBarCode, value); |
||||
|
// IsNeedBarCode = IsSetBarCode ? Need.不需要 : Need.需要;
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private bool isSetCertificate; |
||||
|
/// <summary>
|
||||
|
/// 设置显示(合格证)
|
||||
|
/// </summary>
|
||||
|
public bool IsSetCertificate |
||||
|
{ |
||||
|
get => isSetCertificate; set |
||||
|
{ |
||||
|
|
||||
|
Set(ref isSetCertificate, value); |
||||
|
//IsNeedCertificateModel = IsSetCertificate ? Need.不需要 : Need.需要;
|
||||
|
} |
||||
|
} |
||||
|
private string setSpuCerStatus; |
||||
|
|
||||
|
public string SetSpuCerStatus { get => setSpuCerStatus; set { Set(ref setSpuCerStatus, value); } } |
||||
|
private bool isSetSpuCertificate = true; |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 设置spu显示(合格证)
|
||||
|
/// </summary>
|
||||
|
public bool IsSetSpuCertificate |
||||
|
{ |
||||
|
get => isSetSpuCertificate; set |
||||
|
{ |
||||
|
|
||||
|
Set(ref isSetSpuCertificate, value); |
||||
|
SetSpuCerStatus = IsSetSpuCertificate ? "设置spu模板" : "修改spu模板"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
private string saveTask; |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 设置显示(合格证)
|
||||
|
/// </summary>
|
||||
|
public string SaveTask { get => saveTask; set { Set(ref saveTask, value); } } |
||||
|
|
||||
|
|
||||
|
private string spuId; |
||||
|
/// <summary>
|
||||
|
/// spuid
|
||||
|
/// </summary>
|
||||
|
public string SpuId { get => spuId; set { Set(ref spuId, value); } } |
||||
|
|
||||
|
private CertificateModel spuCertificateModel; |
||||
|
/// <summary>
|
||||
|
/// spu合格证
|
||||
|
/// </summary>
|
||||
|
public CertificateModel SpuCertificateModel { get => spuCertificateModel; set { Set(ref spuCertificateModel, value); } } |
||||
|
|
||||
|
|
||||
|
|
||||
|
private CertificateModel certificateModel; |
||||
|
/// <summary>
|
||||
|
/// 合格证
|
||||
|
/// </summary>
|
||||
|
public CertificateModel CertificateModel { get => certificateModel; set { Set(ref certificateModel, value); } } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 合格证位置(外部包装=0,产品包装=1)
|
||||
|
/// </summary>
|
||||
|
private CertificatePosition certificatePosition; |
||||
|
/// <summary>
|
||||
|
/// 合格证位置(外部包装=0,产品包装=1)
|
||||
|
/// </summary>
|
||||
|
public CertificatePosition CertificatePosition { get => certificatePosition; set { Set(ref certificatePosition, value); } } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 注意事项(对接备注)
|
||||
|
/// </summary>
|
||||
|
private string markMessage; |
||||
|
/// <summary>
|
||||
|
/// 注意事项(对接备注)
|
||||
|
/// </summary>
|
||||
|
public string MarkMessage { get => markMessage; set { Set(ref markMessage, value); } } |
||||
|
|
||||
|
private long taskId; |
||||
|
public long TaskId { get => taskId; set { Set(ref taskId, value); } } |
||||
|
|
||||
|
private string showMarkMessage; |
||||
|
/// <summary>
|
||||
|
/// 显示备注列表(对接备注)
|
||||
|
/// </summary>
|
||||
|
public string ShowMarkMessage { get => showMarkMessage; set { Set(ref showMarkMessage, value); } } |
||||
|
|
||||
|
|
||||
|
private ObservableCollection<IncreateModel> increateList; |
||||
|
/// <summary>
|
||||
|
/// 增量耗材查询关键字
|
||||
|
/// </summary>
|
||||
|
public ObservableCollection<IncreateModel> IncreateList { get => increateList; set { Set(ref increateList, value); } } |
||||
|
string[] increates = new string[] { "气泡纸", "气泡袋", "POP袋", "折纸箱", "气泡纸封边", "彩盒", "剪胶", "剪彩带", "快递袋", "收纳盒", "纸箱子", "装纸箱", "封边", "胶带", "折彩盒" }; |
||||
|
|
||||
|
PackPurchaseTaskService packPurchaseTaskService; |
||||
|
PackTaskService packTaskService; |
||||
|
ProductService productService; |
||||
|
GlobalContext globalContext; |
||||
|
private bool isLoading = false; |
||||
|
public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } } |
||||
|
#endregion
|
||||
|
|
||||
|
public UpdatePurchaseTaskViewModel(ProductService productService, GlobalContext globalContext, PackPurchaseTaskService packPurchaseTaskService, PurchaseService purchaseService, MarkMessageService markMessageService, PackTaskService packTaskService) |
||||
|
{ |
||||
|
this.packPurchaseTaskService = packPurchaseTaskService; |
||||
|
this.productService = productService; |
||||
|
this.globalContext = globalContext; |
||||
|
CreateTaskCommand = new RelayCommand<object>(CreateTask); |
||||
|
OpenSkuDetailCommand = new RelayCommand<object>(OpenSkuDetail); |
||||
|
SetBarCodeCommand = new RelayCommand(SetBarCode); |
||||
|
SetCertificateCommand = new RelayCommand<PurchaseSku>(SetCertificate); |
||||
|
LookBarCommand = new RelayCommand(LookBar); |
||||
|
LookCerCommand = new RelayCommand<string>(LookCer); |
||||
|
|
||||
|
IncreateList = new ObservableCollection<IncreateModel>(); |
||||
|
foreach (var item in increates) |
||||
|
{ |
||||
|
|
||||
|
IncreateList.Add(new IncreateModel |
||||
|
{ |
||||
|
IncreateName = item, |
||||
|
IsSelected = false |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
this.purchaseService = purchaseService; |
||||
|
|
||||
|
AppendMarkMessageCommand = new RelayCommand(AppendMarkMessage); |
||||
|
this.markMessageService = markMessageService; |
||||
|
this.packTaskService = packTaskService; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
MarkMessageService markMessageService; |
||||
|
|
||||
|
private void AppendMarkMessage() |
||||
|
{ |
||||
|
var res = markMessageService.AppendMarkMessage(TaskId, MarkMessage, globalContext.User.Name); |
||||
|
if (res == null) |
||||
|
{ |
||||
|
|
||||
|
return; |
||||
|
} |
||||
|
if (!res.Success) |
||||
|
{ |
||||
|
MessageBox.Show(res.Msg); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
MarkMessage = string.Empty; |
||||
|
|
||||
|
var resShow = markMessageService.ShowTaskMarkMessage(TaskId); |
||||
|
if (resShow != null && resShow.Success && resShow.Data != null) |
||||
|
{ |
||||
|
ShowMarkMessage = string.Join("\r\n", resShow.Data.Select(d => d.ToString())); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
PurchaseService purchaseService; |
||||
|
public string OriginShopName { get; set; } |
||||
|
public string SkuPurchaseSchemeId { get; set; } |
||||
|
public Platform Platform { get; set; } |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
public SaveType SaveType { get; set; } |
||||
|
|
||||
|
#region 方法
|
||||
|
public ICommand SetBarCodeCommand { get; set; } |
||||
|
public ICommand SetCertificateCommand { get; set; } |
||||
|
public ICommand LookBarCommand { get; set; } |
||||
|
public ICommand LookCerCommand { get; set; } |
||||
|
|
||||
|
public ICommand OpenSkuDetailCommand { get; set; } |
||||
|
public ICommand CreateTaskCommand { get; set; } |
||||
|
|
||||
|
public ICommand SearchSkuCommand { get; set; } |
||||
|
|
||||
|
public ICommand AppendMarkMessageCommand { get; set; } |
||||
|
private void SetBarCode() |
||||
|
{ |
||||
|
if (string.IsNullOrEmpty(SkuId)) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
//if (TaskId > 0 && string.IsNullOrEmpty(SpuId))//修改界面刷新配置数据
|
||||
|
//{
|
||||
|
// SearchSku(SkuId);
|
||||
|
//}
|
||||
|
|
||||
|
if (BarCodeModel == null) |
||||
|
{ |
||||
|
BarCodeModel = new BarCodeModel(); |
||||
|
BarCodeModel.ProductNo = ProductNo; |
||||
|
BarCodeModel.Brand = Brand; |
||||
|
BarCodeModel.SkuId = SkuId; |
||||
|
BarCodeModel.SkuName = SkuName; |
||||
|
} |
||||
|
if (!string.IsNullOrEmpty(BrandName)) |
||||
|
BarCodeModel.BrandName = BrandName; |
||||
|
|
||||
|
SetBarCodeWindow setBarCodeWindow = new SetBarCodeWindow(); |
||||
|
setBarCodeWindow.LoadData(BarCodeModel, packTaskService); |
||||
|
setBarCodeWindow.SaveResult = b => |
||||
|
{ |
||||
|
BarCodeModel = b; |
||||
|
IsSetBarCode = false; |
||||
|
IsNeedBarCode = Need.需要; |
||||
|
}; |
||||
|
setBarCodeWindow.Show(); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 设置合格证
|
||||
|
/// </summary>
|
||||
|
private void SetCertificate(PurchaseSku model) |
||||
|
{ |
||||
|
|
||||
|
if (model.CerDTO == null) |
||||
|
{ |
||||
|
model.CerDTO = new CertificateModel |
||||
|
{ |
||||
|
ProductNo = ProductNo, |
||||
|
Brand = Brand, |
||||
|
SkuId = SkuId, |
||||
|
PurchaseSkuId = model.PurchaseSkuId |
||||
|
|
||||
|
}; |
||||
|
} |
||||
|
if (!string.IsNullOrEmpty(BrandName)) |
||||
|
model.CerDTO.BrandName = BrandName; |
||||
|
|
||||
|
QualitySetCerWindow setCerWindow = new QualitySetCerWindow(); |
||||
|
setCerWindow.LoadData(model.IsNeedCer, model.CerDTO, packPurchaseTaskService, spuCertificateModel, IsSetSpuCertificate, SaveType); |
||||
|
setCerWindow.SaveResult = (s, PackCerState) => |
||||
|
{ |
||||
|
var skus = PurchaseSkuList.SingleOrDefault(p => p.PurchaseSkuId == s.PurchaseSkuId); |
||||
|
skus.CerDTO = s; |
||||
|
skus.IsSetCertificate = false; |
||||
|
skus.IsNeedCer = PackCerState == PackCerState.合格证信息; |
||||
|
IsNeedCertificateModel = Need.需要; |
||||
|
}; |
||||
|
setCerWindow.Show(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 查看合格证
|
||||
|
/// </summary>
|
||||
|
private void LookCer(string id) |
||||
|
{ |
||||
|
QualityLookCerWindow lookCerWindow = new QualityLookCerWindow(PurchaseSkuList.SingleOrDefault(p => p.PurchaseSkuId == id).CerDTO); |
||||
|
lookCerWindow.Show(); |
||||
|
} |
||||
|
/// <summary>
|
||||
|
/// 查看条形码
|
||||
|
/// </summary>
|
||||
|
private void LookBar() |
||||
|
{ |
||||
|
LookBarCodeWindow look = new LookBarCodeWindow(); |
||||
|
look.SetData(BarCodeModel); |
||||
|
look.Show(); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 搜索 skuId(todo:)
|
||||
|
/// </summary>
|
||||
|
public bool SearchSku(PackTaskModel obj) |
||||
|
{ |
||||
|
//InitData();
|
||||
|
TaskId = obj.TaskId; |
||||
|
SaveType = SaveType.B端; |
||||
|
var resShow = markMessageService.ShowTaskMarkMessage(TaskId); |
||||
|
if (resShow != null && resShow.Success && resShow.Data != null) |
||||
|
{ |
||||
|
ShowMarkMessage = string.Join("\r\n", resShow.Data.Select(d => d.ToString())); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//SkuPurchaseSchemeId = "416647656341573";
|
||||
|
OriginShopName = obj.ShopName; |
||||
|
|
||||
|
|
||||
|
SkuId =obj.SkuId; |
||||
|
OrderId = obj.OrderId; |
||||
|
|
||||
|
var shopList = globalContext.User.ShopList; |
||||
|
var shop = shopList.SingleOrDefault(s => s.ShopName == OriginShopName); |
||||
|
Logo = obj.ItemList[0].Logo; |
||||
|
SkuName = obj.ItemList[0].SkuName; |
||||
|
if (string.IsNullOrEmpty(SkuId)) |
||||
|
return false; |
||||
|
|
||||
|
ApiResponse<ProductListResponse> productApiResponse = null; |
||||
|
var skuResponse = productService.GetProductSkuList(string.Empty, SkuId, shop.Platform, shop.AppKey, shop.AppSecret, shop.AppToken); |
||||
|
if (skuResponse.Success) |
||||
|
{ |
||||
|
if (skuResponse.Data.Count() == 0) |
||||
|
{ |
||||
|
return false; |
||||
|
} |
||||
|
Logo = skuResponse.Data[0].Logo.Replace("80x80", "200x200"); |
||||
|
SkuName = skuResponse.Data[0].Title; |
||||
|
|
||||
|
SpuId = skuResponse.Data[0].ProductId; |
||||
|
|
||||
|
productApiResponse = productService.GetProductList(skuResponse.Data[0].ProductId, string.Empty, string.Empty, 1, |
||||
|
shop.Platform, shop.AppKey, shop.AppSecret, shop.AppToken); |
||||
|
|
||||
|
if (productApiResponse.Success) |
||||
|
{ |
||||
|
if (productApiResponse.Data.Count == 0) |
||||
|
{ |
||||
|
|
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
ProductNo = productApiResponse.Data.Items[0].ProductItemNum; |
||||
|
Brand = productApiResponse.Data.Items[0].BrandName; |
||||
|
|
||||
|
} |
||||
|
var productSku = packPurchaseTaskService.GetConfigPack(SkuId, "", OrderId); |
||||
|
|
||||
|
if (productSku == null || !productSku.Success || productSku.Data == null) |
||||
|
{ |
||||
|
MessageBox.Show(productSku.Msg); |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
SkuPurchaseSchemeId = productSku.Data.SkuPurchaseSchemeId; |
||||
|
BarCodeModel = productSku.Data.BarCode; |
||||
|
if (BarCodeModel == null) |
||||
|
{ |
||||
|
BarCodeModel = new BarCodeModel(); |
||||
|
|
||||
|
} |
||||
|
if (!string.IsNullOrEmpty(Brand)) |
||||
|
BarCodeModel.Brand = Brand; |
||||
|
if (!string.IsNullOrEmpty(BrandName)) |
||||
|
BarCodeModel.BrandName = BrandName; |
||||
|
BarCodeModel.ProductNo = ProductNo; |
||||
|
BarCodeModel.SkuId = SkuId; |
||||
|
BarCodeModel.SkuName = SkuName; |
||||
|
PurchaseSkuList = new ObservableCollection<PurchaseSku>(); |
||||
|
foreach (var item in productSku.Data.PurchaseSkus) |
||||
|
{ |
||||
|
var list = purchaseService.GetPurchaseSkuBasicInfo(item.PurchaseProductId); |
||||
|
if (list == null) continue; |
||||
|
var skuItem = list.Data.ItemList.FirstOrDefault(f => f.PurchaseSkuId == item.PurchaseSkuId); |
||||
|
if (skuItem == null) |
||||
|
{ |
||||
|
MessageBox.Show($"{item.PurchaseProductId}采购商品列表不存在skuid:{item.PurchaseSkuId},sku商品可能被下架了."); |
||||
|
//return false;
|
||||
|
} |
||||
|
App.Current.Dispatcher.Invoke(new Action(() => |
||||
|
{ |
||||
|
PurchaseSkuList.Add(new PurchaseSku |
||||
|
{ |
||||
|
Logo = skuItem?.Logo, |
||||
|
Title = skuItem?.Title, |
||||
|
IsNeedCer = item.IsNeedCer, |
||||
|
PurchaseSkuId = item.PurchaseSkuId, |
||||
|
CerDTO = item.CerDTO, |
||||
|
IsSetCertificate = item.CerDTO == null ? true : false, |
||||
|
}); |
||||
|
})); |
||||
|
} |
||||
|
|
||||
|
IsNeedBarCode = Need.需要; |
||||
|
IsSetBarCode = true; |
||||
|
IsSetCertificate = true; |
||||
|
if (productSku.Data.PackConfig != null) |
||||
|
{ |
||||
|
var config = productSku.Data.PackConfig; |
||||
|
SkuTitle = config.SkuGoodsTitle; |
||||
|
BrandName = config.BrandName; |
||||
|
GoodsNumber = config.GoodsNumber; |
||||
|
PackType = (PackType)config.PackType; |
||||
|
BasicPack = (BasicPack)config.BasicPack; |
||||
|
//MarkMessage = config.MarkMessage;
|
||||
|
CertificatePosition = config.CertificatePosition == null ? CertificatePosition.无需合格证 : (CertificatePosition)config.CertificatePosition.Value; |
||||
|
// Increment1 = config.Increment1;
|
||||
|
|
||||
|
IsNeedBarCode = config.NeedBar ? Need.需要 : Need.不需要; |
||||
|
IsNeedCertificateModel = config.NeedCer ? Need.需要 : Need.不需要; |
||||
|
|
||||
|
IsSetBarCode = !config.NeedBar; |
||||
|
IsSetCertificate = !config.NeedCer; |
||||
|
|
||||
|
string[] increateDatas = config.Increment1?.Split(','); |
||||
|
bool isSelected = false; |
||||
|
|
||||
|
IncreateList = new ObservableCollection<IncreateModel>(); |
||||
|
foreach (var item in increates) |
||||
|
{ |
||||
|
isSelected = false; |
||||
|
if (increateDatas != null && increateDatas.Count() > 0 && increateDatas.Contains(item)) |
||||
|
{ |
||||
|
isSelected = true; |
||||
|
} |
||||
|
App.Current.Dispatcher.Invoke(() => |
||||
|
{ |
||||
|
IncreateList.Add(new IncreateModel |
||||
|
{ |
||||
|
IncreateName = item, |
||||
|
IsSelected = isSelected |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
return true; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
|
||||
|
App.Current.Dispatcher.Invoke(() => MessageBox.Show(skuResponse.Msg, "加载sku")); |
||||
|
return false; |
||||
|
} |
||||
|
return true; |
||||
|
//加载配置文件
|
||||
|
} |
||||
|
|
||||
|
//public void SearSpuCer()
|
||||
|
//{
|
||||
|
// if (string.IsNullOrEmpty(SpuId))
|
||||
|
// {
|
||||
|
// SearchSku(SkuId);
|
||||
|
// return;
|
||||
|
// }
|
||||
|
// SpuId = SpuId.Trim();//去掉空格 避免数据异常
|
||||
|
|
||||
|
|
||||
|
// var productSku = packPurchaseTaskService.GetSpuCer(SpuId);
|
||||
|
// if (productSku == null || !productSku.Success)
|
||||
|
// {
|
||||
|
// IsSetSpuCertificate = true;
|
||||
|
|
||||
|
// return;
|
||||
|
// }
|
||||
|
// SpuCertificateModel = productSku.Data;
|
||||
|
// IsSetSpuCertificate = false;
|
||||
|
// if (SpuCertificateModel == null)
|
||||
|
// {
|
||||
|
// SpuCertificateModel = new CertificateModel();
|
||||
|
// IsSetSpuCertificate = true;
|
||||
|
// SpuCertificateModel.Brand = Brand;
|
||||
|
// SpuCertificateModel.BrandName = BrandName;
|
||||
|
// SpuCertificateModel.ProductNo = ProductNo;
|
||||
|
// SpuCertificateModel.SpuId = SpuId;
|
||||
|
|
||||
|
// }
|
||||
|
|
||||
|
|
||||
|
//}
|
||||
|
|
||||
|
public Action ReflashWindow { get; set; } |
||||
|
public void InitData() |
||||
|
{ |
||||
|
PurchaseSkuList = new ObservableCollection<PurchaseSku>(); |
||||
|
IsSetBarCode = true; |
||||
|
SkuTitle = ""; |
||||
|
BrandName = ""; |
||||
|
GoodsNumber = 0; |
||||
|
PackType = PackType.单件; |
||||
|
BasicPack = BasicPack.快递袋; |
||||
|
SkuPurchaseSchemeId = ""; |
||||
|
SkuTitle = ""; |
||||
|
BarCodeModel = null; |
||||
|
OriginShopName = ""; |
||||
|
|
||||
|
// Availability = (TaskState.)config.Availability;
|
||||
|
MarkMessage = ""; |
||||
|
CertificatePosition = CertificatePosition.产品包装; |
||||
|
// Increment1 = config.Increment1;
|
||||
|
|
||||
|
IsNeedBarCode = Need.需要; |
||||
|
IsNeedCertificateModel = Need.不需要; |
||||
|
|
||||
|
|
||||
|
bool isSelected; |
||||
|
IncreateList = new ObservableCollection<IncreateModel>(); |
||||
|
foreach (var item in increates) |
||||
|
{ |
||||
|
isSelected = false; |
||||
|
App.Current.Dispatcher.Invoke(() => |
||||
|
{ |
||||
|
IncreateList.Add(new IncreateModel |
||||
|
{ |
||||
|
IncreateName = item, |
||||
|
IsSelected = isSelected |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
private void OpenSkuDetail(object param) |
||||
|
{ |
||||
|
var paramList = (object[])param; |
||||
|
// var orderId = paramList[0].ToString();
|
||||
|
var skuId = paramList[0].ToString(); |
||||
|
|
||||
|
|
||||
|
var url = $"https://item.jd.com/{skuId}.html"; |
||||
|
try |
||||
|
{ |
||||
|
System.Diagnostics.Process.Start("explorer.exe", url); |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Clipboard.SetText(url); |
||||
|
MessageBox.Show($"{ex.Message}\r\n调用浏览器失败,网页链接已复制到剪切板,请手动打开浏览器访问", "提示"); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
private void CreateTask(object obj) |
||||
|
{ |
||||
|
|
||||
|
string increateStr = ""; |
||||
|
var increates = IncreateList.Where(i => i.IsSelected).Select(i => i.IncreateName); |
||||
|
if (increates != null && increates.Count() > 0) |
||||
|
{ |
||||
|
increateStr = string.Join(",", increates); |
||||
|
} |
||||
|
var createTaskModel = new UpdatePurchaseTaskRequest |
||||
|
{ |
||||
|
ProductNo = ProductNo, |
||||
|
Logo = Logo.Replace("200x200", "80x80"), |
||||
|
SkuName = SkuName, |
||||
|
OrderId = OrderId, |
||||
|
BrandName = BrandName, |
||||
|
Availability = (int)Availability, |
||||
|
BasicPack = (int)BasicPack, |
||||
|
SkuId = SkuId, |
||||
|
Increment1 = increateStr, |
||||
|
|
||||
|
CertificatePosition = (int)CertificatePosition, |
||||
|
PackType = (int)PackType, |
||||
|
MarkMessage = MarkMessage, |
||||
|
PositionType = (int)PositionType, |
||||
|
GoodsNumber = GoodsNumber, |
||||
|
SkuGoodsTitle = SkuTitle, |
||||
|
SkuCount = SkuCount, |
||||
|
NeedBar = IsNeedBarCode == Need.需要, |
||||
|
NeedCer = IsNeedCertificateModel == Need.需要, |
||||
|
SkuPurchaseSchemeId = SkuPurchaseSchemeId, |
||||
|
Brand = Brand, |
||||
|
PurchaseSkuSpecs = PurchaseSkuList.Select(p => new PurchaseSkuSpec |
||||
|
{ |
||||
|
IsNeedCer = p.IsNeedCer, |
||||
|
PurchaseSkuId = p.PurchaseSkuId, |
||||
|
}).ToArray() |
||||
|
|
||||
|
//IsWorry = IsWorry
|
||||
|
}; |
||||
|
if (IsNeedBarCode == Need.需要) |
||||
|
{ |
||||
|
if (BarCodeModel == null || IsSetBarCode || BarCodeModel.Id <= 0) |
||||
|
{ |
||||
|
MessageBox.Show("请设置条形码模板"); |
||||
|
//new TipsWindow("请设置条形码模板").Show();
|
||||
|
return; |
||||
|
} |
||||
|
createTaskModel.BarCodeId = BarCodeModel.Id; |
||||
|
} |
||||
|
if (IsNeedCertificateModel == Need.需要) |
||||
|
{ |
||||
|
|
||||
|
if (purchaseSkuList.Any(p => p.IsNeedCer && p.CerDTO == null)) |
||||
|
{ |
||||
|
MessageBox.Show("有未设置的合格证,请设置完所有的合格证再保存"); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
var cerList = purchaseSkuList.Where(p => p.IsNeedCer).Select(p => p.CerDTO).Select(c => c.Id).Where(c => c > 0).ToList(); |
||||
|
if (purchaseSkuList.Count() <= 0 || cerList.Count <= 0) |
||||
|
{ |
||||
|
MessageBox.Show("请设置合格证模板"); |
||||
|
return; |
||||
|
} |
||||
|
createTaskModel.CerId = string.Join(",", cerList);//
|
||||
|
} |
||||
|
ApiResponse<long> res = null; |
||||
|
|
||||
|
res = packPurchaseTaskService.UpdatePurchaseTask(createTaskModel); |
||||
|
|
||||
|
if (res.Success) |
||||
|
{ |
||||
|
if (ReflashWindow != null) ReflashWindow();//刷新主界面
|
||||
|
|
||||
|
var win = obj as System.Windows.Window; |
||||
|
win.Close(); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
MessageBox.Show(res.Msg); |
||||
|
} |
||||
|
#endregion
|
||||
|
} |
||||
|
} |
@ -0,0 +1,385 @@ |
|||||
|
<c:BWindow x:Class="BBWY.Client.Views.PackTask.UpdatePurchaseTaskWindow" |
||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
||||
|
xmlns:local="clr-namespace:BBWY.Client.Views.PackTask" |
||||
|
mc:Ignorable="d" |
||||
|
xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls" |
||||
|
xmlns:b="http://schemas.microsoft.com/xaml/behaviors" |
||||
|
xmlns:ctr="clr-namespace:BBWY.Client.Converters" |
||||
|
xmlns:cmodel="clr-namespace:BBWY.Client.Models" |
||||
|
xmlns:hc="https://handyorg.github.io/handycontrol" |
||||
|
xmlns:sys="clr-namespace:System;assembly=mscorlib" |
||||
|
CloseButtonVisibility="Visible" |
||||
|
CloseButtonColor="{StaticResource WindowButtonColor}" |
||||
|
DataContext="{Binding UpdatePurchaseTask,Source={StaticResource Locator}}" |
||||
|
MinButtonVisibility="Collapsed" |
||||
|
MaxButtonVisibility="Collapsed" |
||||
|
RightButtonGroupMargin="0,5,5,0" |
||||
|
Height="680" Width="1305"> |
||||
|
<Window.Resources> |
||||
|
<ResourceDictionary> |
||||
|
<ResourceDictionary.MergedDictionaries> |
||||
|
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> |
||||
|
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/> |
||||
|
</ResourceDictionary.MergedDictionaries> |
||||
|
<!--<ObjectDataProvider x:Key="storageTypeProvider" MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> |
||||
|
<ObjectDataProvider.MethodParameters> |
||||
|
<x:Type TypeName="cmodel:StorageType"/> |
||||
|
</ObjectDataProvider.MethodParameters> |
||||
|
</ObjectDataProvider>--> |
||||
|
</ResourceDictionary> |
||||
|
|
||||
|
</Window.Resources> |
||||
|
|
||||
|
<Grid> |
||||
|
<Grid.RowDefinitions> |
||||
|
<RowDefinition Height="40"/> |
||||
|
<RowDefinition Height="60"/> |
||||
|
<RowDefinition/> |
||||
|
<RowDefinition Height="40"/> |
||||
|
</Grid.RowDefinitions> |
||||
|
<c:RoundWaitProgress Play="{Binding IsLoading}" Panel.ZIndex="999"/> |
||||
|
<Grid Background="{StaticResource Border.Background}"> |
||||
|
<TextBlock Text="配置打包信息" VerticalAlignment="Center" HorizontalAlignment="Center" /> |
||||
|
</Grid> |
||||
|
|
||||
|
<Grid Grid.Row="1" VerticalAlignment="Center"> |
||||
|
<Grid.ColumnDefinitions> |
||||
|
<ColumnDefinition Width="370"/> |
||||
|
<ColumnDefinition/> |
||||
|
</Grid.ColumnDefinitions> |
||||
|
<TextBlock Text="下单店铺商品信息" FontWeight="Bold" FontSize="13" Height="20" Width="110" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="19 0 0 0" /> |
||||
|
<TextBlock Grid.Column="1" Text="配件商品信息" FontWeight="Bold" FontSize="13" Height="20" Width="110" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="19 0 0 0" /> |
||||
|
|
||||
|
</Grid> |
||||
|
<Grid Grid.Row="2" > |
||||
|
<Grid.RowDefinitions> |
||||
|
<RowDefinition Height="200" /> |
||||
|
<RowDefinition/> |
||||
|
</Grid.RowDefinitions> |
||||
|
|
||||
|
|
||||
|
<Grid Grid.Row="0" VerticalAlignment="Center" Height="150"> |
||||
|
<Grid.ColumnDefinitions> |
||||
|
<ColumnDefinition Width="370"/> |
||||
|
<ColumnDefinition Width="auto"/> |
||||
|
</Grid.ColumnDefinitions> |
||||
|
|
||||
|
<StackPanel Orientation="Horizontal"> |
||||
|
<c:BAsyncImage UrlSource="{Binding Logo}" |
||||
|
Width="150" Height="150" Stretch="Fill" |
||||
|
VerticalAlignment="Top" Margin="25 0 0 0" |
||||
|
Cursor="Hand"> |
||||
|
<b:Interaction.Triggers> |
||||
|
<b:EventTrigger EventName="PreviewMouseLeftButtonDown"> |
||||
|
<b:InvokeCommandAction Command="{Binding DataContext.OpenSkuDetailCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"> |
||||
|
<b:InvokeCommandAction.CommandParameter> |
||||
|
<MultiBinding Converter="{StaticResource mptConverter}"> |
||||
|
<Binding Path="SkuId"/> |
||||
|
</MultiBinding> |
||||
|
</b:InvokeCommandAction.CommandParameter> |
||||
|
</b:InvokeCommandAction> |
||||
|
</b:EventTrigger> |
||||
|
</b:Interaction.Triggers> |
||||
|
</c:BAsyncImage> |
||||
|
<StackPanel Orientation="Vertical" Width="190"> |
||||
|
|
||||
|
<TextBlock Margin="10 10 0 0" TextTrimming="CharacterEllipsis"> |
||||
|
<TextBlock.ToolTip> |
||||
|
<ToolTip Style="{StaticResource OrderCouponToolipStyle}"> |
||||
|
<TextBlock Text="{Binding SkuId}"/> |
||||
|
</ToolTip> |
||||
|
</TextBlock.ToolTip> |
||||
|
<Run Text="SKU:"/> |
||||
|
<Run Text="{Binding SkuId}"/> |
||||
|
</TextBlock > |
||||
|
<TextBlock Margin="10 10 0 10" TextTrimming="CharacterEllipsis"> |
||||
|
<TextBlock.ToolTip> |
||||
|
<ToolTip Style="{StaticResource OrderCouponToolipStyle}"> |
||||
|
<TextBlock Text="{Binding SkuName}"/> |
||||
|
</ToolTip> |
||||
|
</TextBlock.ToolTip> |
||||
|
<Run Text="名称:"/> |
||||
|
<Run Text="{Binding SkuName}"/> |
||||
|
</TextBlock > |
||||
|
<TextBlock Margin="10 0 0 10"> |
||||
|
<Run Text="货号:"/> |
||||
|
<Run Text="{Binding ProductNo}"/> |
||||
|
</TextBlock> |
||||
|
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="10 0 0 10" Height="30"> |
||||
|
<TextBlock Text="品名:" VerticalAlignment="Center"/> |
||||
|
<c:BTextBox Text="{Binding BrandName}" Height="30" Width="140" WaterRemark="请输入品名"/> |
||||
|
|
||||
|
</StackPanel> |
||||
|
<StackPanel Margin="10 0 0 10" Orientation="Horizontal"> |
||||
|
<TextBlock Text="条形码:"/> |
||||
|
<c:BButton Content="待设置" Style="{StaticResource LinkButton}" Width="35" Height="15" Command="{Binding SetBarCodeCommand}" |
||||
|
Visibility="{Binding IsSetBarCode, Converter={StaticResource objConverter}, ConverterParameter=true:Visible:Collapsed }" |
||||
|
/> |
||||
|
<StackPanel Visibility="{Binding IsSetBarCode, Converter={StaticResource objConverter}, ConverterParameter=false:Visible:Collapsed }" Orientation="Horizontal" HorizontalAlignment="Center" > |
||||
|
<c:BButton Content="查看" Style="{StaticResource LinkButton}" Width="35" Height="15" Command="{Binding LookBarCommand}"/> |
||||
|
<c:BButton Content="修改" Style="{StaticResource LinkButton}" Width="35" Height="15" Command="{Binding SetBarCodeCommand}"/> |
||||
|
</StackPanel > |
||||
|
</StackPanel> |
||||
|
</StackPanel> |
||||
|
</StackPanel> |
||||
|
<Grid Grid.Column="1"> |
||||
|
<ListBox x:Name="listbox_order" HorizontalAlignment="Left" |
||||
|
Height="150" Width="900" Margin="0" ScrollViewer.HorizontalScrollBarVisibility="Visible" |
||||
|
|
||||
|
ScrollViewer.VerticalScrollBarVisibility="Visible" |
||||
|
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}" |
||||
|
ItemsSource="{Binding PurchaseSkuList,Mode=TwoWay}" |
||||
|
BorderBrush="{StaticResource Border.Brush}" |
||||
|
BorderThickness="0" |
||||
|
Foreground="{StaticResource Text.Color}"> |
||||
|
<ListBox.ItemsPanel> |
||||
|
<ItemsPanelTemplate> |
||||
|
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" /> |
||||
|
</ItemsPanelTemplate> |
||||
|
</ListBox.ItemsPanel> |
||||
|
|
||||
|
|
||||
|
<ListBox.ItemTemplate> |
||||
|
<DataTemplate> |
||||
|
<Grid |
||||
|
MinHeight="150"> |
||||
|
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" > |
||||
|
<c:BAsyncImage UrlSource="{Binding Logo}" |
||||
|
Height="150" Width="150" Stretch="Fill" |
||||
|
VerticalAlignment="Top" Margin="25 0 0 0" |
||||
|
Cursor="Hand"> |
||||
|
<!--<b:Interaction.Triggers> |
||||
|
<b:EventTrigger EventName="PreviewMouseLeftButtonDown"> |
||||
|
<b:InvokeCommandAction Command="{Binding DataContext.OpenSkuDetailCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"> |
||||
|
<b:InvokeCommandAction.CommandParameter> |
||||
|
<MultiBinding Converter="{StaticResource mptConverter}"> |
||||
|
<Binding Path="SkuId"/> |
||||
|
</MultiBinding> |
||||
|
</b:InvokeCommandAction.CommandParameter> |
||||
|
</b:InvokeCommandAction> |
||||
|
</b:EventTrigger> |
||||
|
</b:Interaction.Triggers>--> |
||||
|
</c:BAsyncImage> |
||||
|
<DockPanel VerticalAlignment="Top" Width="190" Height="150"> |
||||
|
|
||||
|
<TextBlock Margin="10 10 0 0" DockPanel.Dock="Top" TextTrimming="CharacterEllipsis"> |
||||
|
<TextBlock.ToolTip> |
||||
|
<ToolTip Style="{StaticResource OrderCouponToolipStyle}"> |
||||
|
<TextBlock Text="{Binding PurchaseSkuId}"/> |
||||
|
</ToolTip> |
||||
|
</TextBlock.ToolTip> |
||||
|
<Run Text="配件商品ID:"/> |
||||
|
<Run Text="{Binding PurchaseSkuId}"/> |
||||
|
</TextBlock > |
||||
|
<TextBlock Margin="10 10 0 10" DockPanel.Dock="Top" TextTrimming="CharacterEllipsis"> |
||||
|
<TextBlock.ToolTip> |
||||
|
<ToolTip Style="{StaticResource OrderCouponToolipStyle}"> |
||||
|
<TextBlock Text="{Binding Title}"/> |
||||
|
</ToolTip> |
||||
|
</TextBlock.ToolTip> |
||||
|
<Run Text="SKU名称:"/> |
||||
|
<Run Text="{Binding Title}"/> |
||||
|
</TextBlock > |
||||
|
|
||||
|
|
||||
|
<StackPanel Margin="10 0 0 5" Height="25" VerticalAlignment="Bottom" DockPanel.Dock="Bottom" Orientation="Horizontal"> |
||||
|
<TextBlock Text="合格证:" VerticalAlignment="Center"/> |
||||
|
|
||||
|
<StackPanel Orientation="Horizontal" |
||||
|
Visibility="{Binding IsNeedCer, Converter={StaticResource objConverter}, ConverterParameter=true:Visible:Collapsed }"> |
||||
|
|
||||
|
<c:BButton Content="待设置" Style="{StaticResource LinkButton}" Width="35" Height="15" |
||||
|
Command="{Binding DataContext. SetCertificateCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" |
||||
|
CommandParameter="{Binding }" |
||||
|
Visibility="{Binding IsSetCertificate, Converter={StaticResource objConverter}, ConverterParameter=true:Visible:Collapsed }"/> |
||||
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" |
||||
|
Visibility="{Binding IsSetCertificate, Converter={StaticResource objConverter}, ConverterParameter=false:Visible:Collapsed }"> |
||||
|
<c:BButton Content="查看" Style="{StaticResource LinkButton}" Width="35" Height="15" |
||||
|
CommandParameter="{Binding PurchaseSkuId}" |
||||
|
Command="{Binding DataContext. LookCerCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/> |
||||
|
<c:BButton Content="修改" Style="{StaticResource LinkButton}" Width="35" Height="15" CommandParameter="{Binding }" |
||||
|
Command="{Binding DataContext.SetCertificateCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" |
||||
|
/> |
||||
|
</StackPanel > |
||||
|
|
||||
|
</StackPanel> |
||||
|
|
||||
|
|
||||
|
<StackPanel Orientation="Horizontal" |
||||
|
Visibility="{Binding IsNeedCer, Converter={StaticResource objConverter}, ConverterParameter=true:Collapsed:Visible }"> |
||||
|
|
||||
|
<!--<c:BButton Content="" Style="{StaticResource LinkButton}" Width="35" Height="15" |
||||
|
Command="{Binding DataContext. SetCertificateCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" |
||||
|
CommandParameter="{Binding }" |
||||
|
Visibility="{Binding IsSetCertificate, Converter={StaticResource objConverter}, ConverterParameter=true:Visible:Collapsed }"/>--> |
||||
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" |
||||
|
> |
||||
|
<TextBlock Text="无需合格证" Height="15" Margin="5 0 0 0" |
||||
|
/> |
||||
|
|
||||
|
<!--<c:BButton Content="无需设置" Style="{StaticResource LinkButton}" Height="15" Margin="5 0 0 0" |
||||
|
CommandParameter="{Binding PurchaseSkuId}" |
||||
|
Command="{Binding DataContext. LookCerCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>--> |
||||
|
<c:BButton Content="修改" Style="{StaticResource LinkButton}" Width="35" Height="15" CommandParameter="{Binding }" |
||||
|
Command="{Binding DataContext.SetCertificateCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" |
||||
|
/> |
||||
|
</StackPanel > |
||||
|
</StackPanel> |
||||
|
|
||||
|
|
||||
|
|
||||
|
</StackPanel> |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
</DockPanel> |
||||
|
</StackPanel> |
||||
|
</Grid> |
||||
|
</DataTemplate> |
||||
|
</ListBox.ItemTemplate> |
||||
|
</ListBox> |
||||
|
</Grid> |
||||
|
</Grid> |
||||
|
<Grid Grid.Row="1"> |
||||
|
<Grid.RowDefinitions> |
||||
|
<RowDefinition Height="40"/> |
||||
|
<RowDefinition Height="80"/> |
||||
|
<RowDefinition MinHeight="70"/> |
||||
|
<RowDefinition Height="40"/> |
||||
|
</Grid.RowDefinitions> |
||||
|
<TextBlock Text="打包配置" FontWeight="Bold" FontSize="13" Margin="19 0 0 0 " HorizontalAlignment="Left" VerticalAlignment="Center"/> |
||||
|
<Grid Height="70" Grid.Row="1" Margin="20 0 20 0"> |
||||
|
<Grid.ColumnDefinitions> |
||||
|
<ColumnDefinition Width="77"/> |
||||
|
<ColumnDefinition Width="77"/> |
||||
|
<ColumnDefinition MinWidth="77"/> |
||||
|
<ColumnDefinition Width="90"/> |
||||
|
<ColumnDefinition Width="140"/> |
||||
|
<ColumnDefinition Width="86"/> |
||||
|
<ColumnDefinition Width="86"/> |
||||
|
<ColumnDefinition Width="100"/> |
||||
|
</Grid.ColumnDefinitions> |
||||
|
<Grid.RowDefinitions> |
||||
|
<RowDefinition Height="35"/> |
||||
|
<RowDefinition/> |
||||
|
</Grid.RowDefinitions> |
||||
|
<Border Grid.Row="0" Grid.ColumnSpan="8" VerticalAlignment="Top" Height="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.Row="0" Grid.ColumnSpan="8" VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.Row="1" Grid.ColumnSpan="8" VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"/> |
||||
|
|
||||
|
<Border Grid.RowSpan="2" Grid.Column="0" HorizontalAlignment="Left" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.RowSpan="2" Grid.Column="0" HorizontalAlignment="Right" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.RowSpan="2" Grid.Column="1" HorizontalAlignment="Right" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.RowSpan="2" Grid.Column="2" HorizontalAlignment="Right" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.RowSpan="2" Grid.Column="3" HorizontalAlignment="Right" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.RowSpan="2" Grid.Column="4" HorizontalAlignment="Right" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.RowSpan="2" Grid.Column="5" HorizontalAlignment="Right" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.RowSpan="2" Grid.Column="6" HorizontalAlignment="Right" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
<Border Grid.RowSpan="2" Grid.Column="7" HorizontalAlignment="Right" Width="1" Background="{StaticResource Border.Brush}"/> |
||||
|
|
||||
|
<TextBlock Grid.Row="0" Style="{StaticResource middleTextBlock}" Grid.Column="0" Text="组合类型"/> |
||||
|
<TextBlock Grid.Row="0" Style="{StaticResource middleTextBlock}" Grid.Column="1" Text="配件数量"/> |
||||
|
<TextBlock Grid.Row="0" Style="{StaticResource middleTextBlock}" Grid.Column="2" Text="SKU配件商品"/> |
||||
|
<TextBlock Grid.Row="0" Style="{StaticResource middleTextBlock}" Grid.Column="3" Text="基础包装"/> |
||||
|
<TextBlock Grid.Row="0" Style="{StaticResource middleTextBlock}" Grid.Column="4" Text="增量耗材"/> |
||||
|
<TextBlock Grid.Row="0" Style="{StaticResource middleTextBlock}" Grid.Column="5" Text="条码标签"/> |
||||
|
<TextBlock Grid.Row="0" Style="{StaticResource middleTextBlock}" Grid.Column="6" Text="合格证"/> |
||||
|
<TextBlock Grid.Row="0" Style="{StaticResource middleTextBlock}" Grid.Column="7" Text="合格证位置"/> |
||||
|
|
||||
|
|
||||
|
<Grid Grid.Row="1" Grid.Column="0" > |
||||
|
<ComboBox VerticalContentAlignment="Center" BorderThickness="0" Margin="1" ItemsSource="{Binding PackTypeList}" Text="{Binding PackType}" > |
||||
|
|
||||
|
</ComboBox> |
||||
|
</Grid> |
||||
|
<c:BTextBox BorderBrush="Transparent" Grid.Row="1" Grid.Column="1" Height="30" Margin="5" Text="{Binding GoodsNumber,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> |
||||
|
<c:BTextBox BorderBrush="Transparent" Grid.Row="1" Grid.Column="2" Height="30" Margin="5" Text="{Binding SkuTitle,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> |
||||
|
<Grid Grid.Row="1" Grid.Column="3" > |
||||
|
<ComboBox VerticalContentAlignment="Center" BorderThickness="0" Margin="1" ItemsSource="{Binding BasicPackList}" Text="{Binding BasicPack}" > |
||||
|
|
||||
|
</ComboBox> |
||||
|
</Grid> |
||||
|
|
||||
|
|
||||
|
<Grid Grid.Row="1" Grid.Column="4"> |
||||
|
<Grid.Resources> |
||||
|
|
||||
|
</Grid.Resources> |
||||
|
<hc:CheckComboBox BorderThickness="0" IsTextSearchEnabled="True" ItemsSource="{Binding IncreateList}" |
||||
|
ShowClearButton="True" |
||||
|
MinWidth="90" |
||||
|
Height="25" |
||||
|
Margin="5,0,5,0"> |
||||
|
<hc:CheckComboBox.ItemTemplate> |
||||
|
<DataTemplate> |
||||
|
<StackPanel Orientation="Horizontal" Margin="5,2.5"> |
||||
|
<CheckBox Content="{Binding IncreateName}" IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> |
||||
|
</StackPanel> |
||||
|
</DataTemplate> |
||||
|
</hc:CheckComboBox.ItemTemplate> |
||||
|
<hc:CheckComboBox.ItemContainerStyle> |
||||
|
<Style TargetType="{x:Type hc:CheckComboBoxItem}" BasedOn="{StaticResource NoBgListBoxItemStyle}"> |
||||
|
<Setter Property="IsSelected" Value="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> |
||||
|
</Style> |
||||
|
</hc:CheckComboBox.ItemContainerStyle> |
||||
|
</hc:CheckComboBox> |
||||
|
</Grid> |
||||
|
|
||||
|
<Grid Grid.Row="1" Grid.Column="5" > |
||||
|
<ComboBox VerticalContentAlignment="Center" BorderThickness="0" Margin="1" ItemsSource="{Binding IsNeedBarCodeList}" Text="{Binding IsNeedBarCode,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> |
||||
|
|
||||
|
</ComboBox> |
||||
|
</Grid> |
||||
|
<Grid Grid.Row="1" Grid.Column="6" > |
||||
|
<ComboBox VerticalContentAlignment="Center" BorderThickness="0" Margin="1" ItemsSource="{Binding IsNeedCerList}" Text="{Binding IsNeedCertificateModel,Mode=TwoWay}"> |
||||
|
|
||||
|
</ComboBox> |
||||
|
</Grid> |
||||
|
<Grid Grid.Row="1" Grid.Column="7" > |
||||
|
<ComboBox VerticalContentAlignment="Center" BorderThickness="0" Margin="1" ItemsSource="{Binding CertificatePositionList}" Text="{Binding CertificatePosition}"> |
||||
|
|
||||
|
</ComboBox> |
||||
|
</Grid> |
||||
|
</Grid> |
||||
|
|
||||
|
|
||||
|
|
||||
|
<Border BorderBrush="{StaticResource Border.Brush}" BorderThickness="1" CornerRadius="0" Grid.Row="2" Margin="20"> |
||||
|
<TextBox Name="btn_showMarkMessage" Text="{Binding ShowMarkMessage}" HorizontalAlignment="Stretch" VerticalAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Visible" |
||||
|
AcceptsReturn="True" TextWrapping="Wrap" IsReadOnly="True" BorderThickness="0"/> |
||||
|
</Border> |
||||
|
|
||||
|
|
||||
|
<Grid Grid.Row="3" Margin="20 0 0 0"> |
||||
|
<Grid.ColumnDefinitions> |
||||
|
<ColumnDefinition/> |
||||
|
<ColumnDefinition Width="120"/> |
||||
|
</Grid.ColumnDefinitions> |
||||
|
<c:BTextBox WaterRemark="添加备注" Height="30" HorizontalAlignment="Stretch" Text="{Binding MarkMessage}" /> |
||||
|
<c:BButton Grid.Column="1" Content="提交备注" Width="100" HorizontalAlignment="Right" VerticalAlignment="Stretch" Margin="0,2,5,2" Click="BButton_Click" |
||||
|
|
||||
|
Command="{Binding AppendMarkMessageCommand}" |
||||
|
CommandParameter="{Binding MarkMessage}" |
||||
|
Visibility="{Binding TaskId,Converter={StaticResource objConverter},ConverterParameter=0:Collapsed:Visible}" |
||||
|
Background="{StaticResource Button.Background}" BorderThickness="0" Foreground="White"/> |
||||
|
</Grid> |
||||
|
<!--<c:BTextBox Grid.Row="3" Text="{Binding MarkMessage,Mode=TwoWay}" WaterRemark="打包备注" AcceptsReturn="True" TextWrapping="Wrap" Grid.ColumnSpan="2" Margin="20 0 20 0" Height="60"/>--> |
||||
|
|
||||
|
|
||||
|
</Grid> |
||||
|
|
||||
|
</Grid> |
||||
|
<Grid Grid.Row="3"> |
||||
|
|
||||
|
<c:BButton Content="保存" Width="100" HorizontalAlignment="Right" VerticalAlignment="Stretch" Margin="0,2,5,2" |
||||
|
Command="{Binding CreateTaskCommand}" |
||||
|
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type c:BWindow}}}" |
||||
|
Background="{StaticResource Button.Selected.Background}" BorderThickness="0" Foreground="White"/> |
||||
|
</Grid> |
||||
|
|
||||
|
</Grid> |
||||
|
</c:BWindow> |
@ -0,0 +1,53 @@ |
|||||
|
using BBWY.Client.Models; |
||||
|
using BBWY.Client.ViewModels.PackTask; |
||||
|
using BBWY.Controls; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
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.Shapes; |
||||
|
using WebSocketSharp; |
||||
|
|
||||
|
namespace BBWY.Client.Views.PackTask |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// UpdatePurchaseTaskWindow.xaml 的交互逻辑
|
||||
|
/// </summary>
|
||||
|
public partial class UpdatePurchaseTaskWindow : BWindow |
||||
|
{ |
||||
|
public UpdatePurchaseTaskWindow(PackTaskModel obj, Action ReflashWindow = null) |
||||
|
{ |
||||
|
InitializeComponent(); |
||||
|
var updatePackTask = (this.DataContext as UpdatePurchaseTaskViewModel); |
||||
|
var show = updatePackTask.SearchSku(obj); |
||||
|
if (!show) { this.Close(); IsClosed = true; } |
||||
|
|
||||
|
if (ReflashWindow != null) |
||||
|
updatePackTask.ReflashWindow = ReflashWindow; |
||||
|
} |
||||
|
public bool IsClosed { get; set; } = false; |
||||
|
|
||||
|
private void BButton_Click(object sender, RoutedEventArgs e) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
if (btn_showMarkMessage != null && !btn_showMarkMessage.Text.IsNullOrEmpty()) |
||||
|
{ |
||||
|
btn_showMarkMessage.ScrollToEnd(); |
||||
|
} |
||||
|
} |
||||
|
catch |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue