using ivf_tl_CustomControls;
using ivf_tl_Entity.Entity;
using ivf_tl_Entity.Entity.balance;
using ivf_tl_Entity.Enums;
using ivf_tl_Entity.Pic;
using ivf_tl_Manage.UserControls;
using ivf_tl_Manage.ViewModels;
using ivf_tl_Manage.Win;
using ivf_tl_Service;
using ivf_tl_Service.HttpProvider;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
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 ivf_tl_Manage.Views
{
///
/// DetailPicView.xaml 的交互逻辑
///
public partial class DetailPicView : UserControl
{
private DetailPicViewModel vm = null;
private int CheckBoxImageNum = 1;
private int CheckBoxNum = 1;
private List CheckBoxImageList = new List();
private DetailProvider DetailProvider = null;
public DetailPicView()
{
InitializeComponent();
this._photoBox0.Tag = new PhotoBoxSetting() { MinHour = 0, MaxHour = 24 * 60 };
this._photoBox1.Tag = new PhotoBoxSetting() { MinHour = 24 * 60, MaxHour = 48 * 60 };
this._photoBox2.Tag = new PhotoBoxSetting() { MinHour = 48 * 60, MaxHour = 72 * 60 };
this._photoBox3.Tag = new PhotoBoxSetting() { MinHour = 72 * 60, MaxHour = 96 * 60 };
this._photoBox4.Tag = new PhotoBoxSetting() { MinHour = 96 * 60, MaxHour = 120 * 60 };
this._photoBox5.Tag = new PhotoBoxSetting() { MinHour = 120 * 60, MaxHour = 144 * 60 };
this._photoBox6.Tag = new PhotoBoxSetting() { MinHour = 18 * 60, MaxHour = 20 * 60 };
this._photoBox7.Tag = new PhotoBoxSetting() { MinHour = 25 * 60, MaxHour = 26 * 60 };
this._photoBox8.Tag = new PhotoBoxSetting() { MinHour = 42 * 60, MaxHour = 44 * 60 };
this._photoBox9.Tag = new PhotoBoxSetting() { MinHour = 62 * 60, MaxHour = 68 * 60 };
DetailProvider = AppData.Instance.GetDetailProvider();
var a = DetailProvider.GetPicTimeButtonsApi();
foreach (var item in a)
{
if (item.type == "COMMON_BUTTON")
{
var b = item.button.Take(7).ToList();
for (int i = 0; i < b.Count; i++)
{
var item1 = b[i];
switch (i)
{
case 0:
this._photoBox0.Content = item1.buttonName;
this._photoBox0.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 1:
this._photoBox1.Content = item1.buttonName;
this._photoBox1.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 2:
this._photoBox2.Content = item1.buttonName;
this._photoBox2.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 3:
this._photoBox3.Content = item1.buttonName;
this._photoBox3.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 4:
this._photoBox4.Content = item1.buttonName;
this._photoBox4.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 5:
this._photoBox5.Content = item1.buttonName;
this._photoBox5.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 6:
this._photoBox5_1.Content = item1.buttonName;
this._photoBox5_1.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
}
}
}
else if (item.type == "KEY_BUTTON")
{
var b = item.button.Take(7).ToList();
for (int i = 0; i < b.Count; i++)
{
var item1 = b[i];
switch (i)
{
case 0:
this._photoBox6.Content = item1.buttonName;
this._photoBox6.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 1:
this._photoBox7.Content = item1.buttonName;
this._photoBox7.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 2:
this._photoBox8.Content = item1.buttonName;
this._photoBox8.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 3:
this._photoBox9.Content = item1.buttonName;
this._photoBox9.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 4:
this._photoBox9_1.Content = item1.buttonName;
this._photoBox9_1.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 5:
this._photoBox9_2.Content = item1.buttonName;
this._photoBox9_2.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
case 6:
this._photoBox9_3.Content = item1.buttonName;
this._photoBox9_3.Tag = new PhotoBoxSetting() { MinHour = item1.minHour * 60, MaxHour = item1.maxHour * 60 };
break;
}
}
}
}
Loaded += DetailPicView_Loaded;
Unloaded += (s, e) =>
{
Canvas_Root.Children.Clear();
vm = null;
DataContext = null;
};
}
private void DetailPicView_Loaded(object sender, RoutedEventArgs e)
{
vm = (DetailPicViewModel)this.DataContext;
if (vm == null) return;
InitNav();
if (vm.ShowPictureList == null || vm.ViewCheckBoxImageList.Any()) return;
Task.Run(() =>
{
this.Dispatcher.Invoke(() =>
{
_root_Canvas.Children.Clear();
CheckBoxImageList.Clear();
this._allCheck.IsChecked = false;
vm.ViewCheckBoxImageList.Clear();
var list = vm.ShowPictureList.Take(vm.PicPageSize);
CheckBoxImageNum = 1;
foreach (var item in list)
{
if (string.IsNullOrEmpty(item.imageUrl)) continue;
PicUserControl checkBoxImage = new PicUserControl()
{
//ImageSourceUrl = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{item.imageUrl}?token={AppData.Instance.HttpServiceCall.GetToken()}"),
ImageSourceUrl = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{item.imageUrl.Replace(AppData.Instance.PicSuf, $"_240x240{AppData.Instance.PicSuf}")}?token={AppData.Instance.HttpServiceCall.GetToken()}"),
ImageInfoString = $"{item.imageTime.ToString("MM-dd HH:mm")}",
Tag = item.id,
};
if (checkBoxImage.ImageSourceUrl == null) continue;
if (CheckBoxImageNum > 6)
{
if ((CheckBoxImageNum - 1) % 6 == 0) checkBoxImage.Margin = new Thickness(40, 18, 0, 0);
else checkBoxImage.Margin = new Thickness(18, 18, 0, 0);
}
else
{
if (CheckBoxImageNum == 1) checkBoxImage.Margin = new Thickness(40, 0, 0, 0);
else checkBoxImage.Margin = new Thickness(18, 0, 0, 0);
}
CheckBoxImageNum++;
checkBoxImage.MouseDown += CheckBoxImage_MouseDown;
checkBoxImage.SelectedPropertyChangedEevent += CheckBoxImage_SelectedPropertyChangedEevent;
//checkBoxImage.Checked += CheckBoxImage_Checked;
//checkBoxImage.Unchecked += CheckBoxImage_Unchecked;
vm.ViewCheckBoxImageList.Add(checkBoxImage);
_root_Canvas.Children.Add(checkBoxImage);
}
});
});
}
private void InitNav()
{
_nav_StackPanel.Children.Clear();
for (int i = 0; i < vm.NavList.Count; i++)
{
var item = vm.NavList[i];
if (i == vm.NavList.Count - 1)
{
TextBlock textBlock1 = new TextBlock();
textBlock1.Margin = new Thickness(8, 0, 0, 0);
textBlock1.FontWeight = FontWeights.Bold;
textBlock1.Foreground = new SolidColorBrush(Colors.Black);
textBlock1.FontSize = 32d;
textBlock1.VerticalAlignment = VerticalAlignment.Center;
textBlock1.Text = item.NavName;
_nav_StackPanel.Children.Add(textBlock1);
return;
}
Button button = new Button();
button.Content = item.NavName;
button.FontWeight = FontWeights.Bold;
button.FontSize = 28d;
button.BorderThickness = new Thickness(0);
button.Background = new SolidColorBrush(Colors.Transparent);
button.Style = App.Current.FindResource("ButtonStyle1") as Style;
if (i == 0)
{
button.Margin = new Thickness(0, 0, 0, 0);
}
else
{
button.Margin = new Thickness(8, 0, 0, 0);
}
button.Click += (s, e) =>
{
if (vm != null) vm.NavList.Clear();
if (item is PatientManageViewModel patient)
{
patient.SetTLInfo(AppData.Instance.CurrentTlInfo);
AppData.Instance.MainWindowViewModel.CurrentViewModle = patient;
return;
}
AppData.Instance.MainWindowViewModel.CurrentViewModle = item;
};
TextBlock textBlock = new TextBlock();
textBlock.Margin = new Thickness(8, 0, 0, 0);
textBlock.VerticalAlignment = VerticalAlignment.Center;
textBlock.FontWeight = FontWeights.Bold;
textBlock.FontSize = 28d;
textBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#9B9B9B"));
textBlock.Text = ">";
_nav_StackPanel.Children.Add(button);
_nav_StackPanel.Children.Add(textBlock);
}
}
private void ExLog(Exception ex, string name)
{
AppData.Instance.LogService.ExceptionLog(ex, $"DetailPicView.{name}", LogEnum.RunException);
}
private void ErrorLog(string message, LogEnum logType)
{
AppData.Instance.LogService.TLLog($"DetailPicView.{message}", logType);
}
private void Toast(bool success)
{
new ToastWindow(AppData.Instance.MainWindow, 1920, 65, success).Show();
}
///
/// 设备管理
///
///
///
private void Button_Click(object sender, RoutedEventArgs e)
{
AppData.Instance.MainWindowViewModel.CurrentViewModle = AppData.Instance.MainWindowViewModel.devManageViewModel;
}
///
/// 患者管理
///
///
///
private void Parien_Click(object sender, RoutedEventArgs e)
{
AppData.Instance.MainWindowViewModel.patientManageViewModel.SetTLInfo(vm.tLInfo);
AppData.Instance.MainWindowViewModel.CurrentViewModle = AppData.Instance.MainWindowViewModel.patientManageViewModel;
}
///
/// 详情界面
///
///
///
private void Detail_Click(object sender, RoutedEventArgs e)
{
//AppData.Instance.MainWindowViewModel.detailViewModel.Init(null, vm.tLInfo, vm.CurrentDish);
//AppData.Instance.MainWindowViewModel.CurrentViewModle = vm.DetailViewModel;
}
private void RecordDetail_Click(object sender, RoutedEventArgs e)
{
//AppData.Instance.MainWindowViewModel.CurrentViewModle = vm.DetailViewModel;
}
private void RecordParien_Click(object sender, RoutedEventArgs e)
{
//AppData.Instance.MainWindowViewModel.CurrentViewModle = vm.RecordViewModel;
}
private void SmallFocus_Click(object sender, RoutedEventArgs e)
{
ChangeFocal(false);
}
private void BigFocus_Click(object sender, RoutedEventArgs e)
{
ChangeFocal(true);
}
///
/// 切换图层
///
///
private void ChangeFocal(bool isMax)
{
try
{
int newCurrentFocal = vm.CurrentFocal;
if (isMax)
{
newCurrentFocal++;
}
else
{
newCurrentFocal--;
}
if (newCurrentFocal < vm.MaxFocal) this._bigFocal_Button.IsEnabled = true;
else this._bigFocal_Button.IsEnabled = false;
if (newCurrentFocal > vm.MinFocal) this._smallFocal_Button.IsEnabled = true;
else this._smallFocal_Button.IsEnabled = false;
if (newCurrentFocal < vm.MinFocal || newCurrentFocal > vm.MaxFocal)
{
return;
}
vm.CurrentFocal = newCurrentFocal;
vm.RefPic(vm.CurrentFocal);
}
catch (Exception ex)
{
ExLog(ex, "ChangeFocal");
}
}
private void ImageSource_Click(object sender, RoutedEventArgs e)
{
//List allList = new List();
//if (vm.CurrentEmbryoAllPicDic.ContainsKey(vm.CurrentFocal)) allList = vm.CurrentEmbryoAllPicDic[vm.CurrentFocal];
AppData.Instance.MainWindowViewModel.MaskVisibility = true;
if (new SafeWindow(AppData.Instance.MainWindow).ShowDialog() != true)
{
AppData.Instance.MainWindowViewModel.MaskVisibility = false;
return;
}
List settings = new List();
foreach (var item in vm.CheckBoxNoFrameCustomList) if (item.Tag is PhotoBoxSetting itemsetting) settings.Add(new PhotoBoxSetting1 { minHour = itemsetting.MinHour / 60, maxHour = itemsetting.MaxHour / 60 });
new ImageSourceNewWindow(vm.CurrentEmbryo, vm.CurrentEmbryo.houseSn, vm.CurrentFocal, vm.CurrentEmbryo.tlSn, vm.CurrentDish, vm.MaxFocal, vm.MinFocal, settings).ShowDialog();
AppData.Instance.MainWindowViewModel.MaskVisibility = false;
}
private void ImageExport_Click(object sender, RoutedEventArgs e)
{
if (vm == null || !vm.ShowPictureList.Any())
{
Toast(false);
return;
}
AppData.Instance.MainWindowViewModel.MaskVisibility = true;
if (new PicExportWindow(AppData.Instance.MainWindow, CheckBoxImageList.Count).ShowDialog() != true)
{
AppData.Instance.MainWindowViewModel.MaskVisibility = false;
return;
}
string dateString = DateTime.Now.ToString("yy-MM-dd-HH-mm");
string fileName = SaveFileName(dateString);
AppData.Instance.MainWindowViewModel.MaskVisibility = false;
if (string.IsNullOrEmpty(fileName)) return;
if (CheckBoxImageList.Any())
{
vm.DowLoadPic(CheckBoxImageList.Select(x => (long)x.Tag).ToList(), fileName);
}
else
{
vm.DowLoadPic(vm.ShowPictureList.Select(x => x.id).ToList(), fileName);
}
}
private void ScrollViewer_ManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e)
{
e.Handled = true;
}
private void PaginationUserControl_PageChangedEvent(PaginationUserControl source, int obj)
{
if (source == null) return;
if (!source.IsLoaded) return;
Task.Run(() =>
{
this.Dispatcher.Invoke(() =>
{
_root_Canvas.Children.Clear();
CheckBoxImageList.Clear();
this._allCheck.IsChecked = false;
if (vm == null || vm.ShowPictureList == null) return;
vm.CurrentPage = obj;
vm.ViewCheckBoxImageList.Clear();
var list = vm.ShowPictureList.Skip(vm.PicPageSize * (obj - 1)).Take(vm.PicPageSize);
CheckBoxNum = 1;
CheckBoxImageNum = 1;
foreach (var item in list)
{
if (string.IsNullOrEmpty(item.imageUrl)) continue;
PicUserControl checkBoxImage = new PicUserControl()
{
ImageSourceUrl = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{item.imageUrl.Replace(AppData.Instance.PicSuf, $"_240x240{AppData.Instance.PicSuf}")}?token={AppData.Instance.HttpServiceCall.GetToken()}"),
ImageInfoString = $"{item.imageTime.ToString("MM-dd HH:mm")}",
Tag = item.id,
};
if (checkBoxImage.ImageSourceUrl == null) continue;
if (CheckBoxImageNum > 6)
{
if ((CheckBoxImageNum - 1) % 6 == 0) checkBoxImage.Margin = new Thickness(40, 18, 0, 0);
else checkBoxImage.Margin = new Thickness(18, 18, 0, 0);
}
else
{
if (CheckBoxImageNum == 1) checkBoxImage.Margin = new Thickness(40, 0, 0, 0);
else checkBoxImage.Margin = new Thickness(18, 0, 0, 0);
}
CheckBoxImageNum++;
checkBoxImage.MouseDown += CheckBoxImage_MouseDown;
checkBoxImage.SelectedPropertyChangedEevent += CheckBoxImage_SelectedPropertyChangedEevent;
//checkBoxImage.Checked += CheckBoxImage_Checked;
//checkBoxImage.Unchecked += CheckBoxImage_Unchecked;
vm.ViewCheckBoxImageList.Add(checkBoxImage);
_root_Canvas.Children.Add(checkBoxImage);
}
this._ScrollViewer.ScrollToVerticalOffset(0);
//this._ScrollViewer.ScrollToTop();
//this._ScrollViewer.ScrollToHome();
});
});
}
private void CheckBoxImage_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount >= 2)
{
e.Handled = true;
}
}
private bool isImage = false;
private void CheckBoxImage_Unchecked(object sender, RoutedEventArgs e)
{
//if (!(sender is CheckBoxImage source)) return;
//isImage = true;
//this._allCheck.IsChecked = false;
//isImage = false;
//CheckBoxNum--;
//if (!CheckBoxImageList.Any()) return;
//if (CheckBoxImageList.Last() == source)
//{
// CheckBoxImageList.Remove(source);
// return;
//}
//CheckBoxImageList.Remove(source);
//int k = 1;
//foreach (var item in CheckBoxImageList)
//{
// source.SelectedNum = k++;
//}
}
private void CheckBoxImage_Checked(object sender, RoutedEventArgs e)
{
// if (!(sender is CheckBoxImage source)) return;
// source.SelectedNum = CheckBoxNum++;
// CheckBoxImageList.Add(source);
//if(vm != null)
// {
// var a = vm.ViewCheckBoxImageList.FirstOrDefault(x => x.IsChecked == false);
// if (a == null) this._allCheck.IsChecked = true;
// }
}
private void CheckBoxImage_SelectedPropertyChangedEevent(PicUserControl arg1, bool arg2)
{
if (arg1 == null) return;
if (!arg1.IsLoaded) return;
if (arg2)
{
arg1.SelectedNum = CheckBoxNum++;
CheckBoxImageList.Add(arg1);
if (vm != null)
{
var a = vm.ViewCheckBoxImageList.FirstOrDefault(x => x.IsSelected == false);
if (a == null) this._allCheck.IsChecked = true;
}
return;
}
isImage = true;
this._allCheck.IsChecked = false;
isImage = false;
CheckBoxNum--;
if (!CheckBoxImageList.Any()) return;
if (CheckBoxImageList.Last() == arg1)
{
CheckBoxImageList.Remove(arg1);
return;
}
CheckBoxImageList.Remove(arg1);
int k = 1;
foreach (var item in CheckBoxImageList)
{
item.SelectedNum = k++;
}
}
private void CheckBoxImage_MouseDown(object sender, MouseButtonEventArgs e)
{
if (!(sender is PicUserControl source)) return;
if (!source.IsLoaded) return;
if (source.IsSelected) return;
if (vm == null || vm.CurrentDish == null || vm.CurrentEmbryo == null) return;
AppData.Instance.MainWindowViewModel.MaskVisibility = true;
PhotoWindowNew photoWindowNew = new PhotoWindowNew(AppData.Instance.MainWindow, vm.ShowPictureList, (long)source.Tag, vm.CurrentDish.tlSn, vm.CurrentDish.houseSn, vm.CurrentDish.wife, vm.CurrentEmbryo.wellSn);
photoWindowNew.ShowDialog();
AppData.Instance.MainWindowViewModel.MaskVisibility = false;
}
private ButtonRightImage GetButtonImage(CheckBoxNoFrameCustom checkBoxNoFrameCustom)
{
var a = new ButtonRightImage()
{
Margin = new Thickness(7, 0, 0, 0),
Padding = new Thickness(15, 0, 0, 0),
MinWidth = 127,
Height = 42,
Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#E8E8E8")),
IconMargin = new Thickness(20, 0, 15, 0),
FontWeight = FontWeights.Medium,
Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4D75AC")),
FontSize = 18,
CornerRadiusButton = new CornerRadius(10),
Tag = checkBoxNoFrameCustom,
Content = checkBoxNoFrameCustom.Content,
IconWidth = 18,
IconHeight = 18,
IconSource = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/CloseGrayIcon.png", UriKind.Absolute)),
MouseOverIconSource = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/CloseBlueIcon.png", UriKind.Absolute)),
};
a.Click += (s, e) =>
{
if (checkBoxNoFrameCustom.IsChecked == true)
{
checkBoxNoFrameCustom.IsChecked = false;
}
};
vm.ButtonRightImageList.Add(a);
return a;
}
private void CheckBoxNoFrameCustom_Checked(object sender, RoutedEventArgs e)
{
if (vm == null) return;
if (!(sender is CheckBoxNoFrameCustom source)) return;
this._stack.Children.Add(GetButtonImage(source));
if (!vm.CheckBoxNoFrameCustomList.Contains(source))
{
vm.CheckBoxNoFrameCustomList.Add(source);
}
vm.RefPic(vm.CurrentFocal);
}
private void CheckBoxNoFrameCustom_Unchecked(object sender, RoutedEventArgs e)
{
if (vm == null) return;
if (!(sender is CheckBoxNoFrameCustom source)) return;
ButtonRightImage k = null;
foreach (var item in vm.ButtonRightImageList)
{
if (!(item.Tag is CheckBoxNoFrameCustom c)) continue;
if (c == source)
{
k = item;
break;
}
}
if (k != null)
{
vm.ButtonRightImageList.Remove(k);
this._stack.Children.Remove(k);
}
if (vm.CheckBoxNoFrameCustomList.Contains(source))
{
var a = vm.CheckBoxNoFrameCustomList.Remove(source);
}
vm.RefPic(vm.CurrentFocal);
}
public string SaveFileName(string dateString)
{
var dialog = new Microsoft.Win32.SaveFileDialog();
dialog.FileName = $"{vm.CurrentDish.wife}_{dateString}.zip";
dialog.DefaultExt = ".zip";
dialog.Filter = "zip|*.zip";
if (dialog.ShowDialog() != true)
{
return null;
}
return dialog.FileName;
}
private void CheckBoxContent_Checked(object sender, RoutedEventArgs e)
{
if (sender is CheckBoxContent source && source.IsLoaded && vm != null)
{
foreach (var item in vm.ViewCheckBoxImageList)
{
item.IsSelected = true;
}
}
}
private void CheckBoxContent_Unchecked(object sender, RoutedEventArgs e)
{
if (isImage) return;
if (sender is CheckBoxContent source && source.IsLoaded && vm != null)
{
foreach (var item in vm.ViewCheckBoxImageList)
{
item.IsSelected = false;
}
}
}
private void ListBox_Selected(object sender, RoutedEventArgs e)
{
this._bigFocal_Button.IsEnabled = true;
this._smallFocal_Button.IsEnabled = true;
}
private void ListBox_Selected(object sender, SelectionChangedEventArgs e)
{
this._bigFocal_Button.IsEnabled = true;
this._smallFocal_Button.IsEnabled = true;
}
}
}