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;
}
}
}