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