diff --git a/BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs b/BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs index 1c46b57d..50837c5d 100644 --- a/BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs +++ b/BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs @@ -5,6 +5,7 @@ namespace BBWY.Client.Models { public class ServiceOrderItemResponse { + public long Id { get; set; } /// diff --git a/BBWY.Client/Models/ServiceOrder/ServiceOrder.cs b/BBWY.Client/Models/ServiceOrder/ServiceOrder.cs index fb57526c..48804be8 100644 --- a/BBWY.Client/Models/ServiceOrder/ServiceOrder.cs +++ b/BBWY.Client/Models/ServiceOrder/ServiceOrder.cs @@ -1,6 +1,37 @@ -namespace BBWY.Client.Models +using System.Collections.Generic; + +namespace BBWY.Client.Models { public class ServiceOrder : ServiceOrderItemResponse { + public ServiceOrder() + { + ThumbnailImageList = new List(); + } + + /// + /// 是否显示商品情况 + /// + public bool IsShowProductInfo + { + get + { + return ProductAppearance != null || ProductFunction != null || ProductHealth != null || ProductPackage != null; + } + } + + public IList ThumbnailImageList { get; set; } + + public void Init() + { + if (!string.IsNullOrEmpty(ImageName)) + { + var imageNameArray = ImageName.Split(',', System.StringSplitOptions.RemoveEmptyEntries); + foreach (var imgItemName in imageNameArray) + { + ThumbnailImageList.Add($"https://qiyue-qiku.oss-cn-beijing.aliyuncs.com/tuihuo/{imgItemName}.jpg?x-oss-process=image/resize,m_lfit,w_35/quality,q_100"); + } + } + } } } diff --git a/BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs b/BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs index ceba8ede..875a298a 100644 --- a/BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs +++ b/BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs @@ -1,12 +1,17 @@ using BBWY.Client.APIServices; +using BBWY.Client.Helpers; using BBWY.Client.Models; using BBWY.Common.Extensions; +using BBWY.Common.Http; using BBWY.Common.Models; +using BBWY.Controls; using GalaSoft.MvvmLight.Command; using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using System.Linq; +using System.Net.Http; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; @@ -16,6 +21,7 @@ namespace BBWY.Client.ViewModels public class ServiceOrderViewModel : BaseVM, IDenpendency { private ServiceOrderService serviceOrderService; + private IHttpClientFactory httpClientFactory; private bool isLoading; private ServiceOrderState? serviceOrderState; @@ -47,6 +53,10 @@ namespace BBWY.Client.ViewModels public ICommand SearchServiceOrderCommand { get; set; } + public ICommand NavigateToDetailCommand { get; set; } + + public ICommand PreviewImgCommand { get; set; } + public IList ServiceOrderList { get; set; } public long ServiceOrderCount { get => serviceOrderCount; set { Set(ref serviceOrderCount, value); } } @@ -69,23 +79,27 @@ namespace BBWY.Client.ViewModels public GlobalContext GlobalContext { get; set; } - public ServiceOrderViewModel(ServiceOrderService serviceOrderService, GlobalContext globalContext) + public ServiceOrderViewModel(ServiceOrderService serviceOrderService, GlobalContext globalContext, IHttpClientFactory httpClientFactory) { + this.httpClientFactory = httpClientFactory; this.serviceOrderService = serviceOrderService; SetServiceOrderStateCommand = new RelayCommand(SetServiceOrderState); SetReturnDirectionCommand = new RelayCommand(SetReturnDirection); CopyTextCommand = new RelayCommand(s => { try { Clipboard.SetText(s); } catch (Exception ex) { } }); SetSearchDateCommand = new RelayCommand(SetSearchDate); - SearchServiceOrderCommand = new RelayCommand(SearchServiceOrder); + SearchServiceOrderCommand = new RelayCommand(InitQueryServiceOrder); + NavigateToDetailCommand = new RelayCommand(NavigateToDetail); + OnPageIndexChangedCommand = new RelayCommand(OnPageIndexChanged); + PreviewImgCommand = new RelayCommand(PreviewImg); ServiceOrderList = new ObservableCollection() { new ServiceOrder(), new ServiceOrder(), new ServiceOrder() }; PageSize = 10; GlobalContext = globalContext; EndDate = DateTime.Now.Date; StartDate = DateTime.Now.Date.AddDays(-15); - SearchServiceOrder(); + InitQueryServiceOrder(); } - private void SearchServiceOrder() + private void InitQueryServiceOrder() { PageIndex = 1; Task.Factory.StartNew(() => QueryServiceOrder(PageIndex)); @@ -95,31 +109,26 @@ namespace BBWY.Client.ViewModels { EndDate = d == 1 ? DateTime.Now.Date.AddDays(-1) : DateTime.Now; StartDate = DateTime.Now.Date.AddDays(d * -1); - SearchServiceOrder(); + InitQueryServiceOrder(); } private void SetServiceOrderState(ServiceOrderState? state) { this.ServiceOrderState = state; //query - SearchServiceOrder(); + InitQueryServiceOrder(); } private void SetReturnDirection(ReturnDirection? returnDirection) { this.ReturnDirection = returnDirection; //query - SearchServiceOrder(); + InitQueryServiceOrder(); } private void QueryServiceOrder(int pageIndex) { IsLoading = true; - App.Current.Dispatcher.Invoke(() => - { - this.ServiceOrderList.Clear(); - ServiceOrderCount = 0; - }); var response = serviceOrderService.GetList(OrderId, Sku, Spu, ServiceId, GlobalContext.User.Shop.ShopId.ToString(), ServiceOrderState, ReturnDirection, pageIndex, PageSize, StartDate, EndDate); if (!response.Success) { @@ -130,24 +139,107 @@ namespace BBWY.Client.ViewModels return; }); } - if (response.Data.Items == null || response.Data.Items.Count() == 0) - { - IsLoading = false; - return; - } IsLoading = false; ServiceOrderCount = response.Data.Count; + App.Current.Dispatcher.Invoke(() => ServiceOrderList.Clear()); + + if (response.Data.Items == null || response.Data.Items.Count() == 0) + return; + var list = response.Data.Items.Map>(); App.Current.Dispatcher.Invoke(() => { foreach (var s in list) { + #region Test //转换ImageName + if (int.Parse(s.ServiceId) % 2 == 0) + { + s.ProductPackage = ProductPackage.新; s.ImageName = "20230317071208762563,8d58b491-7859-4187-9f43-4fd177a0f25f,b0df0763-9cf4-40ca-a1fc-57695e4b8d33"; + } + + s.Init(); + #endregion + ServiceOrderList.Add(s); } }); } + + private void NavigateToDetail(string serviceId) + { + var url = $"https://sh.shop.jd.com/afs/detail/waitReceive?afsApplyId=undefined&afsServiceId={serviceId}"; + try + { + //System.Diagnostics.Process.Start("explorer.exe", url); + ShellExecuteHelper.ShellExecute(IntPtr.Zero, "open", url, string.Empty, string.Empty, ShellExecuteHelper.ShowCommands.SW_SHOWNORMAL); + } + catch (Exception ex) + { + Clipboard.SetText(url); + MessageBox.Show($"{ex.Message}\r\n调用浏览器失败,网页链接已复制到剪切板,请手动打开浏览器访问", "提示"); + } + } + + private void OnPageIndexChanged(PageArgs pageArgs) + { + Task.Factory.StartNew(() => QueryServiceOrder(pageArgs.PageIndex)); + } + + private void PreviewImg(string thumbnailImg) + { + var fullUrl = thumbnailImg.Substring(0, thumbnailImg.IndexOf("?")); + var fileName = fullUrl.Substring(fullUrl.LastIndexOf("/") + 1); + var localPath = Path.Combine(Path.GetTempPath(), fileName); + if (!File.Exists(localPath)) + { + IsLoading = true; + var downloader = new HttpDownloader(httpClientFactory); + downloader.OnDownloadComplated += (s, e) => + { + IsLoading = false; + if (e.Error != null) + { + App.Current.Dispatcher.Invoke(() => MessageBox.Show(e.Error.Message)); + return; + } + CallWindowsPhoto(localPath); + }; + Task.Factory.StartNew(() => downloader.DownloadFile(fullUrl, Path.GetTempPath(), fileName, null)); + } + else + { + CallWindowsPhoto(localPath); + } + } + + private void CallWindowsPhoto(string path) + { + //建立新的系统进程 + try + { + System.Diagnostics.Process process = new System.Diagnostics.Process(); + + //设置图片的真实路径和文件名 + process.StartInfo.FileName = path; + + //设置进程运行参数,这里以最大化窗口方法显示图片。 + process.StartInfo.Arguments = "rundl132.exe C://WINDOWS//system32//shimgvw.dll,ImageView_Fullscreen"; + + //此项为是否使用Shell执行程序,因系统默认为true,此项也可不设,但若设置必须为true + process.StartInfo.UseShellExecute = true; + + //此处可以更改进程所打开窗体的显示样式,可以不设 + process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; + process.Start(); + process.Close(); + } + catch (Exception ex) + { + App.Current.Dispatcher.Invoke(() => MessageBox.Show($"打开照片查看器失败 {ex.Message}")); + } + } } } diff --git a/BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml b/BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml index 3129a6f3..c99e8315 100644 --- a/BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml +++ b/BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml @@ -9,7 +9,7 @@ xmlns:cmodel="clr-namespace:BBWY.Client.Models" xmlns:sys="clr-namespace:System;assembly=mscorlib" mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="2048" + d:DesignHeight="450" d:DesignWidth="1920" Title="ServiceOrderList" DataContext="{Binding ServiceOrderList,Source={StaticResource Locator}}"> @@ -61,9 +61,9 @@ - + - + - + - + @@ -224,7 +224,7 @@ VerticalAlignment="Center"/> - + @@ -341,26 +341,57 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + @@ -410,7 +441,9 @@ - + @@ -429,6 +462,8 @@ + +