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