From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点
---
HMI.ParameterManage/TestItem.xaml.cs | 318 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 318 insertions(+), 0 deletions(-)
diff --git a/HMI.ParameterManage/TestItem.xaml.cs b/HMI.ParameterManage/TestItem.xaml.cs
new file mode 100644
index 0000000..f6c1308
--- /dev/null
+++ b/HMI.ParameterManage/TestItem.xaml.cs
@@ -0,0 +1,318 @@
+锘縰sing HMI.Base;
+using HMI.Core.Entity;
+using HMI.Core.Manager;
+using HMI.Core.Util;
+using HMI.UI.Util;
+using HMI.Util;
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Windows;
+
+namespace HMI.ParameterManage
+{
+ /// <summary>
+ /// UserControl1.xaml 鐨勪氦浜掗�昏緫
+ /// </summary>
+ public partial class TestItem : PluginControl
+ {
+ public TestItem()
+ {
+ DataContext = this;
+ InitializeComponent();
+ }
+
+ private ObservableCollection<ProductData> products;
+ public ObservableCollection<ProductData> Products
+ {
+ get => products;
+ set { Set(ref products, value); }
+ }
+
+ private ObservableCollection<TestItemData> testItems;
+ public ObservableCollection<TestItemData> 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()
+ {
+
+ }
+
+ 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;
+ }
+ }
+ /// <summary>
+ /// 鍔犺浇鏁版嵁
+ /// </summary>
+ public void LoadTestItems()
+ {
+ if (SelectedProduct == null)
+ {
+ TestItems = new ObservableCollection<TestItemData>();
+ return;
+ }
+ try
+ {
+ TestItems =
+ TestItemManager.GetTestItemByProduct<ObservableCollection<TestItemData>>(SelectedProduct.Name)
+ ?? new ObservableCollection<TestItemData>();
+ }
+ catch (Exception ex)
+ {
+ TestItems = new ObservableCollection<TestItemData>();
+ log.Error("Refresh Data Failed.", ex);
+ ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.RefreshFailed")}: {ex.Message}");
+ }
+ }
+
+ /// <summary>
+ /// 鎵撳紑鏂板鎴栫紪杈戠獥鍙�
+ /// </summary>
+ /// <param name="data"></param>
+ 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}");
+ }
+ }
+ }
+
+ /// <summary>
+ /// 鎵归噺鍒犻櫎
+ /// </summary>
+ 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}");
+ }
+ }
+
+ /// <summary>
+ /// 鍒犻櫎鍙傛暟
+ /// </summary>
+ /// <param name="data"></param>
+ 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;
+ }
+ }
+
+ /// <summary>
+ /// 瀵煎嚭鏁版嵁
+ /// </summary>
+ 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<TestItemData> datas = ExcelHelper.ReadFromExcel<TestItemData>(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<ProductData> products =
+ ProductManager.GetProducts<ObservableCollection<ProductData>>()
+ ?? new ObservableCollection<ProductData>();
+ Products = products;
+ }
+ catch (Exception ex)
+ {
+ Products = new ObservableCollection<ProductData>();
+ 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;
+ }
+ }
+}
--
Gitblit v1.9.1