using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; 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 UserModal : WindowX { public UserModal() { this.DataContext = this; InitializeComponent(); } public UserData Data { get; set; } private ObservableCollection _Roles; public ObservableCollection Roles { get => _Roles; set { Set(ref _Roles, 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='{TbUsername.Text}'{segment};"; if (string.IsNullOrEmpty(TbUsername.Text)) { ex.Result.Add(new FormGroupValidateResult("请输入账号", FgUsername)); } else if (sqliteHelper.HasData(sql)) { ex.Result.Add(new FormGroupValidateResult("账号不能重复", FgUsername)); } else { FgUsername.ValidateResult = ValidateResult.None; FgUsername.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.Username = TbUsername.Text; Data.Name = TbName.Text; Data.Password = TbPassword.Text; return true; } public bool? Open(UserData data) { Data = data; TbUsername.Text = Data.Username; TbName.Text = Data.Name; TbPassword.Text = Data.Password; Roles = UserRoleRelHelper.SelectUserRoleData(sqliteHelper, Data.Username); return this.ShowDialog(); } private void SaveOrUpdateData() { if (string.IsNullOrEmpty(Data.Id)) { InsertData(Data); } else { UpdateData(Data); } } public void InsertData(UserData data) { string sql = $@"INSERT INTO user (username,password,name) VALUES ('{data.Username}','{data.Password}','{data.Name}');"; UserRoleRelHelper.SaveUserRoleRel(sqliteHelper, Roles, data, sql, null); } public void UpdateData(UserData data) { string sql = $@"UPDATE user SET username='{data.Username}',password='{data.Password}',name='{data.Name}' WHERE id='{data.Id}';"; UserRoleRelHelper.SaveUserRoleRel(sqliteHelper, Roles, data, sql, null); } } }