using HMI.Core.Util; using HMI.MenuManage.Entity; using HMI.MenuManage.Util; using HMI.UI.DpUtil; using HMI.UI.Util; using Panuon.WPF.UI; using System; using System.Collections.ObjectModel; using System.ComponentModel; 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) { ToastHelper.Error(this, $"Error!{ex.Message}"); e.Cancel = true; return; } finally { _isProcessing = false; ButtonHelper.SetIsPending(okButton, false); } } base.OnClosing(e); } private bool ValidateUsername(object value, out string err) { err = null; string segment = string.IsNullOrEmpty(Data.Id) ? "" : $" AND id!='{Data.Id}'"; string sql = $"SELECT 1 FROM user WHERE username='{TbUsername.Text}'{segment};"; if (sqliteHelper.HasData(sql)) { err = string.Format(LangUtil.Get("App.MustBeUnique"), LangUtil.Get("HMI.User.Account")); return false; } return true; } private bool ValidateForm() { bool flag = FormGroupHelper.ValidateForm(formPanel); if (flag) { Data.Username = TbUsername.Text; Data.Name = TbName.Text; Data.Password = TbPassword.Text; } return flag; } 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); } } }