| | |
| | | using System; |
| | | using System.ComponentModel; |
| | | using System.Reflection; |
| | | using System.Windows; |
| | | using Microsoft.Win32; |
| | | using Panuon.WPF.UI; |
| | | using HMI.Core.Annotation; |
| | | using HMI.Core.Entity; |
| | | using HMI.Core.Exceptions; |
| | | 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 |
| | | { |
| | |
| | | { |
| | | public MenuModal() |
| | | { |
| | | DataContext = this; |
| | | InitializeComponent(); |
| | | } |
| | | |
| | |
| | | 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) |
| | | { |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Panuon.WPF.UI.Toast.Show(this, "Error!", ToastPosition.Top); |
| | | ToastHelper.Error(this, "Error!"); |
| | | e.Cancel = true; |
| | | return; |
| | | } |
| | |
| | | base.OnClosing(e); |
| | | } |
| | | |
| | | private bool ValidateForm() |
| | | public bool ValidateCode(object value, out string err) |
| | | { |
| | | try |
| | | 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)) |
| | | { |
| | | FormValidateException ex = new FormValidateException(); |
| | | string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'"; |
| | | string sql = $"SELECT 1 FROM menu WHERE code='{TbCode.Text}'{segment};"; |
| | | if (string.IsNullOrEmpty(TbCode.Text)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("请输入菜单编号", FgCode)); |
| | | } |
| | | else if (sqliteHelper.HasData(sql)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("菜单编号不能重复", FgCode)); |
| | | } |
| | | else |
| | | { |
| | | FgCode.ValidateResult = ValidateResult.None; |
| | | FgCode.Message = null; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(TbName.Text)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("请输入菜单名称", FgName)); |
| | | } |
| | | else |
| | | { |
| | | FgName.ValidateResult = ValidateResult.None; |
| | | FgName.Message = null; |
| | | } |
| | | |
| | | if(string.IsNullOrEmpty(TbIcon.Text)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("请选择菜单图标", FgIcon)); |
| | | } |
| | | else |
| | | { |
| | | FgIcon.ValidateResult = ValidateResult.None; |
| | | FgIcon.Message = null; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(TbLevel.Text)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("请选择菜单级别", FgLevel)); |
| | | } |
| | | else |
| | | { |
| | | FgLevel.ValidateResult = ValidateResult.None; |
| | | FgLevel.Message = null; |
| | | } |
| | | |
| | | if (TbLevel.Text == "2") |
| | | { |
| | | if (string.IsNullOrEmpty(TbType.Text)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("请选择菜单类型", FgType)); |
| | | } |
| | | else |
| | | { |
| | | FgType.ValidateResult = ValidateResult.None; |
| | | FgType.Message = null; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(TbParentCode.Text)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("请选择上级菜单", FgParentCode)); |
| | | } |
| | | else |
| | | { |
| | | FgParentCode.ValidateResult = ValidateResult.None; |
| | | FgParentCode.Message = null; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(TbDllPath.Text)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("请选择Dll路径", FgDllPath)); |
| | | } |
| | | else |
| | | { |
| | | FgDllPath.ValidateResult = ValidateResult.None; |
| | | FgDllPath.Message = null; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(TbClassName.Text)) |
| | | { |
| | | ex.Result.Add(new FormGroupValidateResult("请输入类名", FgClassName)); |
| | | } |
| | | else |
| | | { |
| | | FgClassName.ValidateResult = ValidateResult.None; |
| | | FgClassName.Message = null; |
| | | } |
| | | |
| | | } |
| | | else { |
| | | |
| | | } |
| | | |
| | | if (!ex.Success) { |
| | | throw ex; |
| | | } |
| | | } |
| | | catch (FormValidateException ex) |
| | | { |
| | | foreach (var data in ex.Result) |
| | | { |
| | | var fg = (FormGroup)data.Sender; |
| | | fg.ValidateResult = ValidateResult.Error; |
| | | fg.Message = data.Message; |
| | | } |
| | | err = $"{LangUtil.Get("HMI.Menu.Code")}{LangUtil.Get("HMI.Menu.CodeMustBeUnique")}"; |
| | | return false; |
| | | } |
| | | |
| | | Data.Code = TbCode.Text; |
| | | Data.Name = TbName.Text; |
| | | Data.IconPath = TbIcon.Text; |
| | | Data.Level = TbLevel.Text; |
| | | Data.Type = TbType.Text; |
| | | Data.ParentCode = TbParentCode.Text; |
| | | Data.DllPath = TbDllPath.Text; |
| | | Data.ClassName = TbClassName.Text; |
| | | 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; |
| | | } |
| | | 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.IconPath; |
| | | TbIcon.Text = Data.Icon; |
| | | TbLevel.SelectedValue = Data.Level; |
| | | TbType.SelectedValue = Data.Type; |
| | | TbParentCode.Text = Data.ParentCode; |
| | | TbParentCode.SelectedValue = Data.ParentCode; |
| | | TbDllPath.Text = Data.DllPath; |
| | | TbClassName.Text = Data.ClassName; |
| | | return this.ShowDialog(); |
| | |
| | | |
| | | public void InsertMenu(MenuData data) |
| | | { |
| | | string sql = $@"INSERT INTO menu (code,name,iconPath,level,type,parentCode,dllPath,className) |
| | | string sql = $@"INSERT INTO menu (code,name,icon,level,type,parentCode,dllPath,className) |
| | | VALUES |
| | | ('{data.Code}','{data.Name}','{data.IconPath}','{data.Level}','{data.Type}','{data.ParentCode}', |
| | | ('{data.Code}','{data.Name}','{data.Icon}','{data.Level}','{data.Type}','{data.ParentCode}', |
| | | '{data.DllPath}','{data.ClassName}');"; |
| | | sqliteHelper.ExecuteSql(sql); |
| | | } |
| | |
| | | public void UpdateMenu(MenuData data) |
| | | { |
| | | string sql = $@"UPDATE menu SET code='{data.Code}',name='{data.Name}', |
| | | iconPath='{data.IconPath}',level='{data.Level}',type='{data.Type}',parentCode='{data.ParentCode}', |
| | | icon='{data.Icon}',level='{data.Level}',type='{data.Type}',parentCode='{data.ParentCode}', |
| | | dllPath='{data.DllPath}',className='{data.ClassName}' WHERE id='{data.Id}';"; |
| | | sqliteHelper.ExecuteSql(sql); |
| | | } |
| | |
| | | |
| | | private void IconSelect_Click(object sender, RoutedEventArgs e) |
| | | { |
| | | string BasePath = PathHelper.IconFolder; |
| | | //string BasePath = PathHelper.IconFolder; |
| | | |
| | | OpenFileDialog openFileDialog = new OpenFileDialog(); |
| | | openFileDialog.Filter = "(*.*)|*.*"; |
| | | openFileDialog.InitialDirectory = BasePath; |
| | | openFileDialog.Title = "选择图片"; |
| | | openFileDialog.Multiselect = false; |
| | | //OpenFileDialog openFileDialog = new OpenFileDialog(); |
| | | //openFileDialog.Filter = "(*.*)|*.*"; |
| | | //openFileDialog.InitialDirectory = BasePath; |
| | | //openFileDialog.Title = "选择图片"; |
| | | //openFileDialog.Multiselect = false; |
| | | |
| | | if (openFileDialog.ShowDialog() == true) |
| | | //if (openFileDialog.ShowDialog() == true) |
| | | //{ |
| | | // string FileName = openFileDialog.FileName; |
| | | // if (!FileName.StartsWith(BasePath)) |
| | | // { |
| | | // Panuon.WPF.UI.Toast.Show(this, "请将图标移动至程序Icon目录下!", ToastPosition.Top); |
| | | // } |
| | | // else |
| | | // { |
| | | // TbIcon.Text = FileName.Replace(BasePath, "."); |
| | | // } |
| | | //} |
| | | IconSelector selector = new IconSelector |
| | | { |
| | | string FileName = openFileDialog.FileName; |
| | | if (!FileName.StartsWith(BasePath)) |
| | | { |
| | | Panuon.WPF.UI.Toast.Show(this, "请将图标移动至程序Icon目录下!", ToastPosition.Top); |
| | | } |
| | | else |
| | | { |
| | | TbIcon.Text = FileName.Replace(BasePath, "."); |
| | | } |
| | | 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) |
| | |
| | | OpenFileDialog openFileDialog = new OpenFileDialog(); |
| | | openFileDialog.Filter = "(*.dll)|*.dll"; |
| | | openFileDialog.InitialDirectory = pluginPath; |
| | | openFileDialog.Title = "选择文件"; |
| | | openFileDialog.Title = LangUtil.Get("App.SelectFile"); |
| | | openFileDialog.Multiselect = false; |
| | | |
| | | if (openFileDialog.ShowDialog() == true) |
| | |
| | | string FileName = openFileDialog.FileName; |
| | | if (!FileName.StartsWith(pluginPath)) |
| | | { |
| | | Panuon.WPF.UI.Toast.Show(this, "请将插件移动至程序Plugin目录下!", ToastPosition.Top); |
| | | ToastHelper.Warning(this, LangUtil.Get("App.Msg.PluginMustInPluginFolder")); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | } |