using System; using System.Collections.Generic; using System.Collections.ObjectModel; 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.Util; using HMI.MenuManage.Entity; using HMI.MenuManage.Util; namespace HMI.MenuManage { /// /// ModalWindow.xaml 的交互逻辑 /// public partial class RoleModal : WindowX { public RoleModal() { this.DataContext = this; InitializeComponent(); } public RoleData Data { get; set; } private ObservableCollection _TreeDataSource; public ObservableCollection TreeDataSource { get { return _TreeDataSource; } set { Set(ref _TreeDataSource, value); } } public SqliteHelper sqliteHelper { get; set; } private bool _isProcessing; 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) { Panuon.WPF.UI.Toast.Show(this, "Error!", ToastPosition.Top); e.Cancel = true; return; } finally { _isProcessing = false; ButtonHelper.SetIsPending(okButton, false); } } base.OnClosing(e); } private bool ValidateForm() { try { FormValidateException ex = new FormValidateException(); string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'"; string sql = $"SELECT 1 FROM user WHERE username='{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 (!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; } return false; } Data.Code = TbCode.Text; Data.Name = TbName.Text; return true; } public bool? Open(RoleData data) { Data = data; TbCode.Text = Data.Code; TbName.Text = Data.Name; TreeDataSource = RoleMenuHelper.SelectRoleMenuTreeData(sqliteHelper, Data.Code); return this.ShowDialog(); } private void SaveOrUpdateData() { if (string.IsNullOrEmpty(Data.Id)) { InsertData(Data); } else { UpdateData(Data); } } public void InsertData(RoleData data) { string sql = $@"INSERT INTO role (code,name) VALUES ('{data.Code}','{data.Name}');"; RoleMenuHelper.SaveRelData(sqliteHelper, TreeDataSource, data.Code, sql, null); } public void UpdateData(RoleData data) { string sql = $@"UPDATE role SET code='{data.Code}',name='{data.Name}' WHERE id='{data.Id}';"; RoleMenuHelper.SaveRelData(sqliteHelper, TreeDataSource, data.Code, sql, null); } } }