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.ModelManage/ModelManage.xaml.cs |  300 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 300 insertions(+), 0 deletions(-)

diff --git a/Plugin.ModelManage/ModelManage.xaml.cs b/Plugin.ModelManage/ModelManage.xaml.cs
new file mode 100644
index 0000000..e5f0bd7
--- /dev/null
+++ b/Plugin.ModelManage/ModelManage.xaml.cs
@@ -0,0 +1,300 @@
+锘縰sing CommunityToolkit.Mvvm.ComponentModel;
+using HMI.Base;
+using HMI.Core.Util;
+using HMI.UI.Util;
+using HMI.Util;
+using Microsoft.Win32;
+using Plugin.ModelManage.Entity;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+
+namespace Plugin.ModelManage
+{
+    /// <summary>
+    /// ModelManage.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    [ObservableObject]
+    public partial class ModelManage : SimpleMaskControl
+    {
+        private string dataFilePath;
+        private SqliteHelper sqliteHelper;
+        private double size = 30;
+
+        [ObservableProperty]
+        private ObservableCollection<ModelData> datasource;
+
+        [ObservableProperty]
+        private int currentPage;
+        [ObservableProperty]
+        private int maxPage;
+
+        public ModelManage()
+        {
+            DataContext = this;
+            InitializeComponent();
+        }
+
+        public override void InitFinish()
+        {
+            base.InitFinish();
+            dataFilePath = Path.Combine(BaseFolder, "data.db");
+            if (!File.Exists(dataFilePath))
+            {
+                SqliteHelper.CreateDatabase(dataFilePath);
+            }
+            sqliteHelper = new SqliteHelper(dataFilePath);
+            sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS ModelData (
+                    Id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    Model TEXT NOT NULL,
+                    CodeLength INT,
+                    StartIndex INT,
+                    Length INT,
+                    Fixcode TEXT,
+                    UNIQUE(Model),
+                    UNIQUE(Fixcode));");
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            Button btn = sender as Button;
+            ModelData data;
+            switch (btn.Name)
+            {
+                case "addBtn":
+                    OpenDataModal(new ModelData());
+                    break;
+                case "rfhBtn":
+                    RefreshPage(CurrentPage);
+                    break;
+                case "exportBtn":
+                    ExportExcel();
+                    break;
+                case "importBtn":
+                    ImportExcel();
+                    break;
+                case "editBtn":
+                    data = btn.Tag as ModelData;
+                    OpenDataModal(data);
+                    break;
+                case "delBtn":
+                    data = btn.Tag as ModelData;
+                    DeleteData(data);
+                    break;
+                case "delBatchBtn":
+                    DeleteBatchData();
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        private void RefreshPage(int? page = null)
+        {
+            try
+            {
+                var sql = "SELECT COUNT (*) as num FROM ModelData;";
+                var dt = sqliteHelper.GetDataTable(sql);
+                if (dt.Rows.Count <= 0)
+                {
+                    CurrentPage = 1;
+                    MaxPage = 1;
+                    return;
+                }
+                int count = int.Parse(dt.Rows[0]["num"].ToString());
+                MaxPage = (int)Math.Ceiling(count / size);
+
+                if (page != null)
+                {
+                    CurrentPage = page.Value;
+                }
+
+                if (CurrentPage > MaxPage)
+                {
+                    CurrentPage = MaxPage;
+                }
+
+                if (page == CurrentPage)
+                {
+                    RefreshData();
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error("RefreshPage Error.", ex);
+                ToastHelper.Error($"鍒锋柊鏁版嵁澶辫触: {ex.Message}");
+            }
+        }
+
+        private void RefreshData()
+        {
+            try
+            {
+                var list = new ObservableCollection<ModelData>();
+                var sql = $"SELECT Id, Model, CodeLength, StartIndex, Length, Fixcode FROM ModelData ORDER BY Id DESC LIMIT ({CurrentPage - 1} * {size}), {size};";
+                var dt = sqliteHelper.GetDataTable(sql);
+                if (dt.Rows.Count > 0)
+                {
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        var at = new ModelData
+                        {
+                            Id = dr["Id"].ToString(),
+                            Model = dr["Model"].ToString(),
+                            CodeLength = int.Parse(dr["CodeLength"].ToString()),
+                            StartIndex = int.Parse(dr["StartIndex"].ToString()),
+                            //Length = int.Parse(dr["Length"].ToString()),
+                            Fixcode = dr["Fixcode"].ToString()
+                        };
+                        list.Add(at);
+                    }
+                }
+                Datasource = list;
+            }
+            catch (Exception ex)
+            {
+                log.Error("RefreshData Error.", ex);
+                ToastHelper.Error($"鍒锋柊鏁版嵁澶辫触: {ex.Message}");
+            }
+        }
+
+        private void ExportExcel()
+        {
+            try
+            {
+                SaveFileDialog sfd = new SaveFileDialog
+                {
+                    FileName = "鍨嬪彿绠$悊",
+                    Filter = "Excel|*.xls"
+                };
+                if (sfd.ShowDialog() == true)
+                {
+                    ExcelHelper.ExportExcel(sfd.FileName, Datasource);
+                    ToastHelper.Success("瀵煎嚭鎴愬姛");
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error("ExportExcel Error.", ex);
+                ToastHelper.Error($"瀵煎嚭澶辫触: {ex.Message}");
+            }
+        }
+
+        private void ImportExcel()
+        {
+            try
+            {
+                OpenFileDialog ofd = new OpenFileDialog
+                {
+                    Filter = "Excel|*.xls;*.xlsx"
+                };
+                if (ofd.ShowDialog() == true)
+                {
+                    List<ModelData> list = ExcelHelper.ReadFromExcel<ModelData>(ofd.FileName);
+                    List<string> sqls = new List<string> {
+                        "DELETE FROM ModelData;"
+                    };
+                    foreach (ModelData at in list)
+                    {
+                        sqls.Add($"INSERT INTO ModelData (Model,CodeLength,StartIndex,Fixcode) VALUES ('{at.Model}',{at.CodeLength},{at.StartIndex},'{at.Fixcode}');");
+                    }
+
+                    sqliteHelper.ExecuteBatchSql(sqls);
+                    ToastHelper.Success("瀵煎叆鎴愬姛");
+                    RefreshPage(CurrentPage);
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error("ImportExcel Error.", ex);
+                ToastHelper.Error($"瀵煎叆澶辫触: {ex.Message}");
+            }
+        }
+
+        private void DeleteData(ModelData data)
+        {
+            try
+            {
+                if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), "纭畾瑕佸垹闄よ鏁版嵁鍚楋紵") == MessageBoxResult.OK)
+                {
+                    string sql = $"DELETE FROM ModelData WHERE Id = {data.Id}";
+                    sqliteHelper.ExecuteSql(sql);
+                    ToastHelper.Success("鍒犻櫎鎴愬姛");
+                    RefreshPage(CurrentPage);
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error("DeleteData Error.", ex);
+                ToastHelper.Error($"鍒犻櫎澶辫触: {ex.Message}");
+            }
+        }
+
+        private void DeleteBatchData()
+        {
+            try
+            {
+                var datas = Datasource.Where(e => e.IsSelected).Select(e => e.Id).ToList();
+                if (datas.Count <= 0) return;
+                if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), "纭畾瑕佸垹闄ら�変腑鐨勬暟鎹悧锛�") == MessageBoxResult.OK)
+                {
+                    var ids = string.Join("','", datas);
+                    string sql = $"DELETE FROM ModelData WHERE Id IN ('{ids}')";
+                    sqliteHelper.ExecuteSql(sql);
+                    ToastHelper.Success("鍒犻櫎鎴愬姛");
+                    RefreshPage(CurrentPage);
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error("DeleteData Error.", ex);
+                ToastHelper.Error($"鍒犻櫎澶辫触: {ex.Message}");
+            }
+        }
+
+        private void OpenDataModal(ModelData data)
+        {
+            try
+            {
+                var win = new DataModal
+                {
+                    Title = string.IsNullOrEmpty(data.Id) ? "鏂板" : "缂栬緫",
+                    Owner = Window.GetWindow(this)
+                };
+                if (win.Open(data, sqliteHelper) == true)
+                {
+                    RefreshPage(CurrentPage);
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error("OpenDataModal Error.", ex);
+            }
+        }
+
+        partial void OnCurrentPageChanged(int value)
+        {
+            RefreshData();
+        }
+
+        private void SimpleMaskControl_Loaded(object sender, RoutedEventArgs e)
+        {
+            RefreshPage(1);
+            Loaded -= SimpleMaskControl_Loaded;
+        }
+    }
+}

--
Gitblit v1.9.1