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 作为历史根节点
---
Plugin.DOControl/ControlList.xaml.cs | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 224 insertions(+), 0 deletions(-)
diff --git a/Plugin.DOControl/ControlList.xaml.cs b/Plugin.DOControl/ControlList.xaml.cs
new file mode 100644
index 0000000..1d9c0e0
--- /dev/null
+++ b/Plugin.DOControl/ControlList.xaml.cs
@@ -0,0 +1,224 @@
+锘縰sing 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();
+ }
+ }
+}
--
Gitblit v1.9.1