using ivf_tl_Entity.Entity.balance; using ivf_tl_Entity.Enums; using ivf_tl_Manage.Converts; using ivf_tl_Manage.ViewModels.Win; using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; namespace ivf_tl_Manage.Win { /// /// AddDishWindow.xaml 的交互逻辑 /// public partial class AddDishWindow : Window { public AddDishWindowViewModel vm = null; private Balance currentBalance { get; set; } public AddDishWindow(Dish dish, Balance balance, Window w) { InitializeComponent(); this.Owner = w; centerX = 352 / 2.0; centerY = 362 / 2.0; angle = 360.00 / 16; vm = new AddDishWindowViewModel(dish); currentBalance = balance; this.DataContext = vm; InitCustom(); } private Dictionary EmbryoStateImageList = new Dictionary(); private double centerX, centerY; private double angle; private double angleOffset = 90; private int ellipseCount = 16; private int imageRadius = 22; //115 private int imageBigRadius = 120; //65 private int textRadius = 93; private void InitCustom() { try { //List picList = new List(); //if (vm.CurrentDish != null && vm.CurrentDish.id > 0) //{ // var pro = AppData.Instance.GetDishProvider(); // var wellIdList = vm.CurrentDish.embryoList.Select(x => x.id).ToList(); // if (wellIdList.Any()) // { // picList = pro.GetNewPicApi(vm.CurrentDish.tlSn, vm.CurrentDish.houseSn, wellIdList); // } //} int currentWell = 1; //EllipseGeometry ellipseGeometry = new EllipseGeometry(new Point(imageRadius-2, imageRadius-2), imageRadius-2, imageRadius-2); for (int i = 0; i < ellipseCount; i++) { currentWell = i + 1; TextBlock textBlock = new TextBlock(); Image border = new Image(); textBlock.Text = $"{currentWell}"; textBlock.TextAlignment = TextAlignment.Center; textBlock.FontWeight = FontWeights.Medium; textBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#9B9B9B")); //textBlock.Foreground = new SolidColorBrush(Colors.Red); //textBlock.Background = new SolidColorBrush(Colors.LightBlue); textBlock.FontSize = 10; textBlock.Width = 12; textBlock.Height = 14; textBlock.SetValue(Canvas.LeftProperty, centerX + Math.Cos(((angle * i + angleOffset) * (Math.PI)) / 180) * textRadius - 6); textBlock.SetValue(Canvas.TopProperty, centerY + Math.Sin(((angle * i + angleOffset) * (Math.PI)) / 180) * textRadius - 7); Panel.SetZIndex(textBlock, 7); Panel.SetZIndex(border, 6); this._canvas.Children.Add(textBlock); this._canvas.Children.Add(border); border.Name = $"B{currentWell}"; EmbryoStateImageList.Add(currentWell, border); border.Width = imageRadius * 2; border.Height = imageRadius * 2; border.Tag = false; border.SetValue(Canvas.LeftProperty, centerX + Math.Cos(((angle * i + angleOffset) * (Math.PI)) / 180) * imageBigRadius - imageRadius); border.SetValue(Canvas.TopProperty, centerY + Math.Sin(((angle * i + angleOffset) * (Math.PI)) / 180) * imageBigRadius - imageRadius); var embryo = vm.CurrentDish.embryoList.FirstOrDefault(a => a.wellSn == currentWell); if (embryo == null) { border.Source = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/NoEmbryoYuanIcon.png", UriKind.Absolute)); border.MouseUp += (s, e) => { var sender = s as Image; sender.Tag = !(bool)sender.Tag; if ((bool)sender.Tag == true) border.Source = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/EditEmbryoSelectedIcon.png", UriKind.Absolute)); else border.Source = new BitmapImage(new Uri("pack://application:,,,/ivf_tl_Manage;component/Resources/Images/NoEmbryoYuanIcon.png", UriKind.Absolute)); if (vm.CurrentDish.id > 0) return; if (EmbryoStateImageList.FirstOrDefault(x => (bool)x.Value.Tag).Value == null) vm.IsEmbryo = 0; else vm.IsEmbryo = 1; }; } else { string imageUrl = null; //var currentPic= picList.FirstOrDefault(x => x.wellSn == embryo.wellSn); //if (currentPic != null) imageUrl = $"{AppData.Instance.BaseUrl}{currentPic.imageUrl}?token={AppData.Instance.HttpServiceCall.GetToken()}"; //if(imageUrl != null) //{ // border.Source = new BitmapImage(new Uri(imageUrl, UriKind.Absolute)); // border.SetValue(Image.ClipProperty, ellipseGeometry); // continue; //} EmbryoState state = (EmbryoState)embryo.state; switch (state) { case EmbryoState.None: imageUrl= "pack://application:,,,/ivf_tl_Manage;component/Resources/Images/EmbryoYuanIcon.png"; break; case EmbryoState.Freezing://冷冻 imageUrl = "pack://application:,,,/ivf_tl_Manage;component/Resources/Images/EmbryoFreezingIcon.png"; break; case EmbryoState.Transplant://移植 imageUrl = "pack://application:,,,/ivf_tl_Manage;component/Resources/Images/EmbryoTransplantIcon.png"; break; case EmbryoState.Cancellation://作废 imageUrl = "pack://application:,,,/ivf_tl_Manage;component/Resources/Images/EmbryoCancellationIcon.png"; break; case EmbryoState.Delete://删除 imageUrl = "pack://application:,,,/ivf_tl_Manage;component/Resources/Images/EmbryoDeleteIcon.png"; break; default: imageUrl = "pack://application:,,,/ivf_tl_Manage;component/Resources/Images/EmbryoYuanIcon.png"; break; } border.Source = new BitmapImage(new Uri(imageUrl, UriKind.Absolute)); } } if (vm.CurrentDish != null && vm.CurrentDish.id > 0) { this._balance_Button.Visibility = Visibility.Hidden; return; } if (currentBalance != null && currentBalance.id > 0) { this._balanceStop_Button.Visibility = Visibility.Visible; return; } this._balance_Button.Visibility = Visibility.Visible; } catch (Exception) { } } private void ExLog(Exception ex, string name) { AppData.Instance.LogService.ExceptionLog(ex, $"AddDishWindow.{name}", LogEnum.RunException); } private void ErrorLog(string message, LogEnum logType) { AppData.Instance.LogService.TLLog($"AddDishWindow.{message}", logType); } private void DefeatMessage(string message) { this._message.Text = message; } private void Ok_Click(object sender, RoutedEventArgs e) { this.DialogResult = false; } private void StartBalance_Click(object sender, RoutedEventArgs e) { if (vm == null) return; var error = vm.StartBalance(); if (string.IsNullOrEmpty(error)) { this.DialogResult = true; return; } //DefeatMessage($"开启平衡失败:{error}"); DefeatMessage($"{KeyToStringConvert.GetLanguageStringByKey("0313")}:{error}"); } private void StopBalance_Click(object sender, RoutedEventArgs e) { if (vm == null || currentBalance == null) return; if (currentBalance.id <= 0) return; var error = vm.StopBalance(currentBalance.id); if (string.IsNullOrEmpty(error)) { this.DialogResult = true; return; } //DefeatMessage($"结束平衡失败:{error}"); DefeatMessage($"{KeyToStringConvert.GetLanguageStringByKey("0314")}:{error}"); } private void StartDish_Click(object sender, RoutedEventArgs e) { //MessageBox.Show($"{vm.FerYear}-{vm.FerMonth}-{vm.FerDay} {vm.FerHour}:{vm.FerMin}"); //return; //Thread.Sleep(1000 * 5); if (vm.CurrentDish.wife.Length > 100 || vm.CurrentDish.husband.Length > 100) { //DefeatMessage("姓名长度不能超过100个字符"); DefeatMessage(KeyToStringConvert.GetLanguageStringByKey("0315")); return; } List newWellSnList = null; if (vm.CurrentDish.id == 0 && vm.IsEmbryo == 0) { //DefeatMessage("未选择胚胎"); DefeatMessage(KeyToStringConvert.GetLanguageStringByKey("0303")); return; } newWellSnList = EmbryoStateImageList.Where(x => (bool)x.Value.Tag).Select(x => x.Key).ToList(); if (vm.CurrentDish.id == 0) { string startDishResult = vm.StartDish(newWellSnList); if (!string.IsNullOrEmpty(startDishResult)) { DefeatMessage(startDishResult); return; } this.DialogResult = true; return; } foreach (var item in vm.CurrentDish.embryoList) { newWellSnList.Add(item.wellSn); } string updateResult = vm.UpdateDish(newWellSnList); if (!string.IsNullOrEmpty(updateResult)) { DefeatMessage(updateResult); return; } this.DialogResult = true; return; } bool isOneOpen = false; private void ComBoxCustomTime_DropDownOpened(object sender, EventArgs e) { if (isOneOpen) return; isOneOpen = true; if (vm.CurrentDish.id == 0) { var dateNow = DateTime.Now; vm.FerYear = dateNow.Year; vm.FerMonth = dateNow.Month; vm.FerDay = dateNow.Day; vm.FerHour = dateNow.Hour; vm.FerMin = dateNow.Minute; } ListBoxScrollIntoView(this._ferTime_ComBoxCustomTime.Template.FindName("yearListBox", this._ferTime_ComBoxCustomTime), vm.FerYear, vm.YearsList); ListBoxScrollIntoView(this._ferTime_ComBoxCustomTime.Template.FindName("monthListBox", this._ferTime_ComBoxCustomTime), vm.FerMonth, vm.MonthList); ListBoxScrollIntoView(this._ferTime_ComBoxCustomTime.Template.FindName("dayListBox", this._ferTime_ComBoxCustomTime), vm.FerDay, vm.DayList); ListBoxScrollIntoView(this._ferTime_ComBoxCustomTime.Template.FindName("hourListBox", this._ferTime_ComBoxCustomTime), vm.FerHour, vm.HourList); ListBoxScrollIntoView(this._ferTime_ComBoxCustomTime.Template.FindName("minListBox", this._ferTime_ComBoxCustomTime), vm.FerMin, vm.MinList); } private void ListBoxScrollIntoView(object listBoxObject, int selectItem, List sourceList) { if (!(listBoxObject is ListBox listBox)) return; if (listBox == null) return; int i = sourceList.IndexOf(selectItem) + 1; if (i <= 0) i = 0; if (i >= sourceList.Count) i = (sourceList.Count - 1); listBox.ScrollIntoView(sourceList[i]); } private void _ferTime_ComBoxCustomTime_DropDownClosed(object sender, EventArgs e) { this._ferTime_ComBoxCustomTime.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4D4D4D")); } private void Close_Click(object sender, RoutedEventArgs e) { this.DialogResult = false; } } }