using HMI.Core.Annotation;
|
using HMI.Core.Util;
|
using HMI.MenuManage.Entity;
|
using HMI.UI.DpUtil;
|
using HMI.UI.Util;
|
using Microsoft.Win32;
|
using Panuon.WPF.UI;
|
using System;
|
using System.Collections.ObjectModel;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Reflection;
|
using System.Windows;
|
using System.Windows.Controls;
|
|
namespace HMI.MenuManage
|
{
|
/// <summary>
|
/// ModalWindow.xaml 的交互逻辑
|
/// </summary>
|
public partial class MenuModal : WindowX
|
{
|
public MenuModal()
|
{
|
DataContext = this;
|
InitializeComponent();
|
}
|
|
public MenuData Data { get; set; }
|
public SqliteHelper sqliteHelper { get; set; }
|
|
private bool _isProcessing;
|
|
private ObservableCollection<MenuData> parentSource;
|
|
public ObservableCollection<MenuData> ParentSource
|
{
|
get { return parentSource; }
|
set { Set(ref parentSource, value); }
|
}
|
|
protected override void OnClosing(CancelEventArgs e)
|
{
|
//Press Continue Button
|
if (DialogResult == true)
|
{
|
if (_isProcessing)
|
{
|
e.Cancel = true;
|
return;
|
}
|
var okButton = WindowXModalDialog.GetOKButton(this);
|
try
|
{
|
_isProcessing = true;
|
ButtonHelper.SetIsPending(okButton, true);
|
if (!ValidateForm())
|
{
|
e.Cancel = true;
|
return;
|
}
|
|
SaveOrUpdateData();
|
}
|
catch (Exception ex)
|
{
|
MenuManage.PluginLog.Error("Modal Commit Error.", ex);
|
ToastHelper.Error(this, ex.Message);
|
e.Cancel = true;
|
return;
|
}
|
finally
|
{
|
_isProcessing = false;
|
ButtonHelper.SetIsPending(okButton, false);
|
}
|
}
|
base.OnClosing(e);
|
}
|
|
public bool ValidateCode(object value, out string err)
|
{
|
err = null;
|
string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'";
|
string sql = $"SELECT 1 FROM menu WHERE code='{TbCode.Text}'{segment};";
|
if (sqliteHelper.HasData(sql))
|
{
|
err = this.lang("App.MustBeUnique", LangUtil.Get("HMI.Menu.Code")); ;
|
return false;
|
}
|
return true;
|
}
|
|
public bool ValidateName(object value, out string err)
|
{
|
err = null;
|
string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'";
|
string sql = $"SELECT 1 FROM menu WHERE name='{TbName.Text}'{segment};";
|
if (sqliteHelper.HasData(sql))
|
{
|
err = string.Format(LangUtil.Get("App.MustBeUnique"), LangUtil.Get("HMI.Menu.Name"));
|
return false;
|
}
|
return true;
|
}
|
|
private bool ValidateForm()
|
{
|
//PreValidate();
|
bool flag = FormGroupHelper.ValidateForm(formPanel);
|
if (flag)
|
{
|
Data.Code = TbCode.Text;
|
Data.Name = TbName.Text;
|
Data.Icon = TbIcon.Text;
|
Data.Level = TbLevel.Text;
|
Data.Type = TbType.Text;
|
Data.ParentCode = TbParentCode.SelectedValue?.ToString();
|
Data.DllPath = TbDllPath.Text;
|
Data.ClassName = TbClassName.Text;
|
Data.Sort = NiSort.Value;
|
}
|
return flag;
|
}
|
|
private void RefreshParentCode()
|
{
|
ObservableCollection<MenuData> datas = new ObservableCollection<MenuData>();
|
string sql = $"SELECT code,name FROM menu WHERE level = 1 ORDER By id;";
|
DataTable dt = sqliteHelper.GetDataTable(sql);
|
if (dt != null)
|
{
|
foreach (DataRow dr in dt.Rows)
|
{
|
var menu = new MenuData
|
{
|
Code = dr["code"].ToString(),
|
Name = dr["name"].ToString(),
|
};
|
datas.Add(menu);
|
}
|
}
|
ParentSource = datas;
|
}
|
|
public bool? Open(MenuData data)
|
{
|
RefreshParentCode();
|
Data = data;
|
TbCode.Text = Data.Code;
|
TbName.Text = Data.Name;
|
TbIcon.Text = Data.Icon;
|
TbLevel.SelectedValue = Data.Level;
|
TbType.SelectedValue = Data.Type;
|
TbParentCode.SelectedValue = Data.ParentCode;
|
TbDllPath.Text = Data.DllPath;
|
TbClassName.Text = Data.ClassName;
|
NiSort.Value = Data.Sort;
|
return this.ShowDialog();
|
}
|
|
private void SaveOrUpdateData()
|
{
|
if (string.IsNullOrEmpty(Data.Id))
|
{
|
InsertMenu(Data);
|
}
|
else
|
{
|
UpdateMenu(Data);
|
}
|
}
|
|
public void InsertMenu(MenuData data)
|
{
|
string sql = $@"INSERT INTO menu (code,name,icon,level,type,parentCode,dllPath,className,sort)
|
VALUES
|
('{data.Code}','{data.Name}','{data.Icon}','{data.Level}','{data.Type}','{data.ParentCode}',
|
'{data.DllPath}','{data.ClassName}',{data.Sort});";
|
sqliteHelper.ExecuteSql(sql);
|
}
|
|
public void UpdateMenu(MenuData data)
|
{
|
string sql = $@"UPDATE menu SET code='{data.Code}',name='{data.Name}',
|
icon='{data.Icon}',level='{data.Level}',type='{data.Type}',parentCode='{data.ParentCode}',
|
dllPath='{data.DllPath}',className='{data.ClassName}',sort={data.Sort} WHERE id='{data.Id}';";
|
sqliteHelper.ExecuteSql(sql);
|
}
|
|
|
private void IconSelect_Click(object sender, RoutedEventArgs e)
|
{
|
//string BasePath = PathHelper.IconFolder;
|
|
//OpenFileDialog openFileDialog = new OpenFileDialog();
|
//openFileDialog.Filter = "(*.*)|*.*";
|
//openFileDialog.InitialDirectory = BasePath;
|
//openFileDialog.Title = "选择图片";
|
//openFileDialog.Multiselect = false;
|
|
//if (openFileDialog.ShowDialog() == true)
|
//{
|
// string FileName = openFileDialog.FileName;
|
// if (!FileName.StartsWith(BasePath))
|
// {
|
// (this, "请将图标移动至程序Icon目录下!", ToastPosition.Top);
|
// }
|
// else
|
// {
|
// TbIcon.Text = FileName.Replace(BasePath, ".");
|
// }
|
//}
|
IconSelector selector = new IconSelector
|
{
|
Title = LangUtil.Get("App.SelectIcon"),
|
Owner = this
|
};
|
if (selector.Open(Data.Icon) == true)
|
{
|
TbIcon.Text = selector.Data;
|
}
|
}
|
|
private void DllSelect_Click(object sender, RoutedEventArgs e)
|
{
|
string pluginPath = PathHelper.PluginFolder();
|
|
OpenFileDialog openFileDialog = new OpenFileDialog();
|
openFileDialog.Filter = "(*.dll)|*.dll";
|
openFileDialog.InitialDirectory = pluginPath;
|
openFileDialog.Title = LangUtil.Get("App.SelectFile");
|
openFileDialog.Multiselect = false;
|
|
if (openFileDialog.ShowDialog() == true)
|
{
|
string FileName = openFileDialog.FileName;
|
if (!FileName.StartsWith(pluginPath))
|
{
|
ToastHelper.Warning(this, LangUtil.Get("App.Msg.PluginMustInPluginFolder"));
|
}
|
else
|
{
|
TbDllPath.Text = FileName.Replace(pluginPath, ".");
|
try
|
{
|
object[] infos = Assembly.LoadFrom(FileName).GetCustomAttributes(typeof(PluginClassNameAttribute), false);
|
if (infos != null && infos.Length > 0)
|
{
|
PluginClassNameAttribute attr = (PluginClassNameAttribute)infos[0];
|
TbClassName.Text = attr.ClassName;
|
}
|
}
|
catch (Exception ex)
|
{
|
|
}
|
}
|
}
|
}
|
|
private void TbLevel_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
{
|
bool flag = (((ComboBoxItem)e.AddedItems[0])?.Content?.ToString() == "2");
|
FormGroupHelper.SetIsRequired(FgType, flag);
|
FormGroupHelper.SetIsRequired(FgParentCode, flag);
|
FormGroupHelper.SetIsRequired(FgDllPath, flag);
|
FormGroupHelper.SetIsRequired(FgClassName, flag);
|
}
|
}
|
}
|