using 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;
using System.Windows.Controls;
namespace HMI.ParameterManage
{
///
/// UserControl1.xaml 的交互逻辑
///
public partial class ParameterSetting : PluginControl
{
private ObservableCollection datasource;
public ObservableCollection Datasource
{
get => datasource;
set
{
Set(ref datasource, value);
}
}
public ParameterSetting()
{
this.DataContext = this;
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var btn = ((Button)sender);
ParameterData data = btn.DataContext as ParameterData;
switch (btn.Name)
{
case "addBtn":
OpenDataModal(null, false);
break;
case "editBtn":
OpenDataModal(data, true);
break;
case "refreshBtn":
LoadData();
break;
case "delBatchBtn":
DeleteBatch();
break;
case "exportBtn":
ExportData();
break;
case "importBtn":
ImportData();
break;
case "delBtn":
DeleteData(data);
break;
default:
break;
}
}
///
/// 加载数据
///
public void LoadData()
{
try
{
Datasource = ParameterManager.GetCommonParameter>()
?? new ObservableCollection();
}
catch (Exception ex)
{
Datasource = new ObservableCollection();
log.Error("Refresh Data Failed.", ex);
ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.RefreshFailed")}: {ex.Message}");
}
}
///
/// 打开新增或编辑窗口
///
///
public void OpenDataModal(ParameterData data, bool isUpdate)
{
try
{
int index = isUpdate ? Datasource.IndexOf(data) : -1;
string title = isUpdate ? $"{this.lang("App.Edit")}" : $"{this.lang("App.Add")}";
SettingModal modal = new SettingModal()
{
Title = title,
Owner = Window.GetWindow(this)
};
if (modal.Open(data ?? new ParameterData(), Datasource) == true)
{
if (index == -1)
{
Datasource.Add(modal.Data);
ParameterManager.SaveCommonParameter(Datasource);
}
else
{
ParameterManager.SaveCommonParameter(Datasource);
}
LoadData();
}
}
catch (Exception ex)
{
if (isUpdate)
{
log.Error("Edit Data Failed.", ex);
MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.EditFailed")}: {ex.Message}");
}
else
{
log.Error("Add Data Failed.", ex);
MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.AddFailed")}: {ex.Message}");
}
}
}
///
/// 批量删除
///
public void DeleteBatch()
{
try
{
var count = Datasource.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 = Datasource.Where(d => !d.IsSelected).ToList();
ParameterManager.SaveCommonParameter(temp);
LoadData();
}
}
catch (Exception ex)
{
log.Error("Delete Batch Data Failed.", ex);
ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.DeleteFailed")}: {ex.Message}");
}
}
///
/// 删除参数
///
///
private void DeleteData(ParameterData data)
{
try
{
if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeleteSingle", data.Name))
== MessageBoxResult.OK)
{
int index = Datasource.IndexOf(data);
if (index < 0)
{
ToastHelper.Error(this, this.lang("App.ParameterException"));
return;
}
var temp = XmlHelper.DeepClone(Datasource);
temp.RemoveAt(index);
ParameterManager.SaveCommonParameter(temp);
LoadData();
}
}
catch (Exception ex)
{
log.Error("Delete Parameter Failed.", ex);
ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}");
return;
}
}
///
/// 导出数据
///
private void ExportData()
{
try
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "";
sfd.DefaultExt = "xls";
sfd.FileName = this.lang("Pm.Setting.Title");
if (sfd.ShowDialog() == true)
{
string targetPath = sfd.FileName;
ExcelHelper.ExportExcel(targetPath, Datasource);
ToastHelper.Success(Window.GetWindow(this), this.lang("App.ExportSuccess"));
}
}
catch (Exception ex)
{
log.Error("Export Data Failed.", ex);
MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}");
}
}
private void ImportData()
{
try
{
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);
ParameterManager.SaveCommonParameter(datas);
LoadData();
}
}
catch (Exception ex)
{
log.Error("Export Data Failed.", ex);
MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}");
}
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
LoadData();
Loaded -= UserControl_Loaded;
}
}
}