using 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 { /// /// ModelManage.xaml 的交互逻辑 /// [ObservableObject] public partial class ModelManage : SimpleMaskControl { private string dataFilePath; private SqliteHelper sqliteHelper; private double size = 30; [ObservableProperty] private ObservableCollection 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(); 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 list = ExcelHelper.ReadFromExcel(ofd.FileName); List sqls = new List { "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; } } }