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
|
{
|
/// <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 object Active()
|
{
|
if (!isActivated)
|
{
|
string folder = Path.Combine(ParameterManage.FileFolder, "TestItem");
|
PathHelper.InitFolder(folder);
|
base.SetBaseFolder(folder);
|
FileFolder = folder;
|
isActivated = true;
|
}
|
return null;
|
}
|
|
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 =
|
ParameterManager.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;
|
}
|
}
|
}
|