using HMI.Core.Entity;
|
using HMI.Core.Manager;
|
using HMI.Core.Util;
|
using HMI.UI.DpUtil;
|
using HMI.UI.Util;
|
using HMI.Util;
|
using Microsoft.Win32;
|
using Panuon.WPF.UI;
|
using Plugin.DOControl.Entity;
|
using System;
|
using System.Collections.Generic;
|
using System.Collections.ObjectModel;
|
using System.ComponentModel;
|
using System.IO;
|
using System.Linq;
|
using System.Windows;
|
using System.Windows.Controls;
|
|
namespace Plugin.DOControl
|
{
|
/// <summary>
|
/// ModalWindow.xaml 的交互逻辑
|
/// </summary>
|
public partial class ControlList : WindowX
|
{
|
public ControlList()
|
{
|
this.DataContext = this;
|
InitializeComponent();
|
}
|
|
private ObservableCollection<DOControlData> datasource;
|
|
public ObservableCollection<DOControlData> Datasource
|
{
|
get { return datasource; }
|
set { Set(ref datasource, value); }
|
}
|
|
private bool dataChanged;
|
|
protected override void OnClosing(CancelEventArgs e)
|
{
|
DialogResult = dataChanged;
|
base.OnClosing(e);
|
}
|
|
private void Button_Click(object sender, RoutedEventArgs e)
|
{
|
Button btn = sender as Button;
|
DOControlData data = btn?.DataContext as DOControlData;
|
switch (btn.Name)
|
{
|
case "addBtn":
|
OpenDataModal(null);
|
break;
|
case "editBtn":
|
OpenDataModal(data);
|
break;
|
case "delBtn":
|
TryDeleteData(data);
|
break;
|
case "delBatchBtn":
|
TryDeleteBatch();
|
break;
|
case "refreshBtn":
|
LoadData();
|
break;
|
case "exportBtn":
|
TryExport();
|
break;
|
case "importBtn":
|
TryImport();
|
break;
|
default:
|
break;
|
}
|
}
|
|
public void LoadData()
|
{
|
ObservableCollection<DOControlData> datas = new ObservableCollection<DOControlData>();
|
try
|
{
|
if (File.Exists(DOControl.FilePath))
|
{
|
datas = XmlHelper.DeserializeFromXml<ObservableCollection<DOControlData>>(DOControl.FilePath);
|
}
|
}
|
catch (Exception ex)
|
{
|
DOControl.Logger?.Error("Data List Load Data Failed.", ex);
|
ToastHelper.Error($"{this.lang("App.LoadFailed")}: {ex.Message}");
|
}
|
Datasource = datas;
|
}
|
|
private void OpenDataModal(DOControlData data)
|
{
|
try
|
{
|
DataModal modal = new DataModal
|
{
|
Title = data == null ? this.lang("App.Add") : this.lang("App.Edit"),
|
Owner = Window.GetWindow(this)
|
};
|
if (modal.Open(data ?? new DOControlData(), Datasource) == true)
|
{
|
dataChanged = true;
|
LoadData();
|
}
|
}
|
catch (Exception ex)
|
{
|
DOControl.Logger?.Error($"Data List {(data == null ? "Add" : "Edit")} Data Failed.", ex);
|
ToastHelper.Error($"{(data == null ? this.lang("App.AddFailed") : this.lang("App.EditFailed"))}: {ex.Message}");
|
}
|
}
|
|
private void TryDeleteData(DOControlData data)
|
{
|
try
|
{
|
int index = Datasource.IndexOf(data);
|
if (index < 0)
|
{
|
ToastHelper.Error("Error");
|
return;
|
}
|
if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeleteSingle", data.Name)) == MessageBoxResult.OK)
|
{
|
var temp = XmlHelper.DeepClone(Datasource);
|
temp.RemoveAt(index);
|
XmlHelper.SerializeToXml(DOControl.FilePath, temp);
|
dataChanged = true;
|
LoadData();
|
}
|
}
|
catch (Exception ex)
|
{
|
DOControl.Logger?.Error($"Data List Try Delete Data Failed.", ex);
|
ToastHelper.Error($"{this.lang("App.DeleteFailed")}: {ex.Message}");
|
}
|
}
|
|
private void TryDeleteBatch()
|
{
|
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();
|
XmlHelper.SerializeToXml(DOControl.FilePath, temp);
|
dataChanged = true;
|
LoadData();
|
}
|
}
|
catch (Exception ex)
|
{
|
DOControl.Logger?.Error($"Data List Try Delete Batch Data Failed.", ex);
|
ToastHelper.Error($"{this.lang("App.DeleteFailed")}: {ex.Message}");
|
}
|
}
|
|
public void TryExport()
|
{
|
try
|
{
|
SaveFileDialog sfd = new SaveFileDialog();
|
|
sfd.Filter = "";
|
sfd.DefaultExt = "xls";
|
sfd.FileName = this.lang("doc.list");
|
if (sfd.ShowDialog() == true)
|
{
|
string targetPath = sfd.FileName;
|
ExcelHelper.ExportExcel(targetPath, Datasource);
|
ToastHelper.Success(Window.GetWindow(this), this.lang("App.ExportSuccess"));
|
}
|
}
|
catch (Exception ex)
|
{
|
DOControl.Logger?.Error("Export Data Failed.", ex);
|
MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}");
|
}
|
}
|
|
public void TryImport()
|
{
|
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<DOControlData> datas = ExcelHelper.ReadFromExcel<DOControlData>(openFileDialog.FileName);
|
XmlHelper.SerializeToXml(DOControl.FilePath, datas);
|
dataChanged = true;
|
LoadData();
|
}
|
}
|
catch (Exception ex)
|
{
|
DOControl.Logger?.Error("Export Test Item Failed.", ex);
|
MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}");
|
}
|
}
|
|
|
public bool? Open(ObservableCollection<DOControlData> datasource)
|
{
|
Datasource = datasource;
|
return this.ShowDialog();
|
}
|
}
|
}
|