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
|
{
|
/// <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;
|
}
|
}
|
}
|