using HMI.Base; using HMI.Core.Util; using HMI.ParameterManage.Entity; using HMI.ParameterManage.Util; using HMI.UI.Util; using HMI.Util; using Microsoft.Win32; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Windows; namespace HMI.ParameterManage { /// /// UserControl1.xaml 的交互逻辑 /// public partial class TestItem : PluginControl { public TestItem() { DataContext = this; InitializeComponent(); } private ObservableCollection products; public ObservableCollection Products { get => products; set { Set(ref products, value); } } private ObservableCollection testItems; public ObservableCollection TestItems { get => testItems; set { Set(ref testItems, value); } } private ProductData selectedProduct; public ProductData SelectedProduct { get => selectedProduct; set { Set(ref selectedProduct, value); LoadTestItems(); } } bool isActivated; public static string FileFolder { get; private set; } public override void Active() { if (!isActivated) { string folder = Path.Combine(ParameterManage.FileFolder, "TestItem"); PathHelper.InitFolder(folder); base.SetBaseFolder(folder); FileFolder = folder; isActivated = true; } } private void Button_Click(object sender, RoutedEventArgs e) { System.Windows.Controls.Button btn = sender as System.Windows.Controls.Button; TestItemData data = btn.DataContext as TestItemData; switch (btn.Name) { case "addBtn": OpenTestItemModal(null, false); break; case "editBtn": OpenTestItemModal(data, true); break; case "refreshBtn": LoadProducts(); break; case "delBtn": DeleteData(data); break; case "delBatchBtn": DeleteBatch(); break; case "exportBtn": ExportData(); break; case "importBtn": ImportData(); break; default: break; } } /// /// 加载数据 /// public void LoadTestItems() { if (SelectedProduct == null) { TestItems = new ObservableCollection(); return; } try { TestItems = TestItemManager.GetTestItemByProduct>(SelectedProduct.Name) ?? new ObservableCollection(); } catch (Exception ex) { TestItems = new ObservableCollection(); log.Error("Refresh Data Failed.", ex); ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.RefreshFailed")}: {ex.Message}"); } } /// /// 打开新增或编辑窗口 /// /// public void OpenTestItemModal(TestItemData data, bool isUpdate) { try { if (SelectedProduct == null) { ToastHelper.Warning(this, this.lang("Pm.Ti.PleaseSelectProduct")); return; } int index = isUpdate ? TestItems.IndexOf(data) : -1; string title = isUpdate ? $"{this.lang("App.Edit")}" : $"{this.lang("App.Add")}"; TestItemModal modal = new TestItemModal() { Title = title, Owner = Window.GetWindow(this) }; if (modal.Open(data ?? new TestItemData(), TestItems) == true) { if (index == -1) { TestItems.Add(modal.Data); TestItemManager.SaveTestItemByProduct(SelectedProduct.Name, TestItems); } else { TestItemManager.SaveTestItemByProduct(SelectedProduct.Name, TestItems); } LoadTestItems(); } } catch (Exception ex) { if (isUpdate) { log.Error("Edit Test Item Failed.", ex); MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.EditFailed")}: {ex.Message}"); } else { log.Error("Add Test Item Failed.", ex); MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.AddFailed")}: {ex.Message}"); } } } /// /// 批量删除 /// public void DeleteBatch() { try { if (SelectedProduct == null) { ToastHelper.Warning(this, this.lang("Pm.Ti.PleaseSelectProduct")); return; } var count = TestItems.Where(d => d.IsSelected).Count(); if (count <= 0) { ToastHelper.Warning(this, this.lang("HMI.NoDeleteData")); return; } if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeletes", count)) == MessageBoxResult.OK) { var temp = TestItems.Where(d => !d.IsSelected).ToList(); TestItemManager.SaveTestItemByProduct(SelectedProduct.Name, temp); LoadTestItems(); } } catch (Exception ex) { log.Error("Delete Batch Data Failed.", ex); ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.DeleteFailed")}: {ex.Message}"); } } /// /// 删除参数 /// /// private void DeleteData(TestItemData data) { try { if (SelectedProduct == null) { ToastHelper.Warning(this, this.lang("Pm.Ti.PleaseSelectProduct")); return; } if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeleteSingle", data.Name)) == MessageBoxResult.OK) { int index = TestItems.IndexOf(data); if (index < 0) { ToastHelper.Error(this, this.lang("App.ParameterException")); return; } var temp = XmlHelper.DeepClone(TestItems); temp.RemoveAt(index); TestItemManager.SaveTestItemByProduct(SelectedProduct.Name, temp); LoadTestItems(); } } catch (Exception ex) { log.Error("Delete Test Item Data Failed.", ex); ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}"); return; } } /// /// 导出数据 /// private void ExportData() { try { if (SelectedProduct == null) { ToastHelper.Warning(this, this.lang("Pm.Ti.PleaseSelectProduct")); return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = ""; sfd.DefaultExt = "xls"; sfd.FileName = $"{SelectedProduct.Name}{this.lang("Pm.Ti.Title")}"; if (sfd.ShowDialog() == true) { string targetPath = sfd.FileName; ExcelHelper.ExportExcel(targetPath, TestItems); ToastHelper.Success(Window.GetWindow(this), this.lang("App.ExportSuccess")); } } catch (Exception ex) { log.Error("Export Test Item Failed.", ex); MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}"); } } private void ImportData() { try { if (SelectedProduct == null) { ToastHelper.Warning(this, this.lang("Pm.Ti.PleaseSelectProduct")); return; } OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "execl(*.xlsx;*.xls)|*.xlsx;*.xls"; openFileDialog.Title = this.lang("App.SelectFile"); openFileDialog.Multiselect = false; if (openFileDialog.ShowDialog() == true) { List datas = ExcelHelper.ReadFromExcel(openFileDialog.FileName); TestItemManager.SaveTestItemByProduct(SelectedProduct.Name, TestItems); LoadTestItems(); } } catch (Exception ex) { log.Error("Export Test Item Failed.", ex); MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}"); } } private void LoadProducts() { try { ObservableCollection products = ParameterManager.GetProducts>() ?? new ObservableCollection(); Products = products; } catch (Exception ex) { Products = new ObservableCollection(); log.Error("Load Products Failed.", ex); ToastHelper.Error(this, this.lang("App.RefreshFailed")); } } private void PluginControl_Loaded(object sender, RoutedEventArgs e) { LoadProducts(); Loaded -= PluginControl_Loaded; } } }