using DevExpress.XtraBars.ToolbarForm; using DeviceRepair.Models; using DeviceRepair.Utils.Security; using DeviceRepairAndOptimization.Biz; using DeviceRepairAndOptimization.Common; using System; using System.Collections.Generic; using System.Data; using System.Linq; namespace DeviceRepairAndOptimization.Pages.Users { public partial class frmUserAdd : ToolbarForm { /// /// 是否设定用户角色 /// public bool IsSetUserRoles = false; private UserInfoModel CurrentEntity; private string OperationType = "新增"; public frmUserAdd(UserInfoModel entity = null, bool AllocationRole = false, string title = "用户新增") { InitializeComponent(); this.Text = title; // 关闭右键Customize Layout菜单 Root.ViewInfo.OwnerILayoutControl.AllowCustomizationMenu = false; #region 选项框多选改单选 // 设置 全选框改为标题 gridView1.CustomDrawColumnHeader += (s, e) => { if (e.Column != null && e.Column.Caption == "Selection") { e.Info.Caption = "选择"; } }; // 选项框多选改单选 gridView1.RowCellClick += (s, e) => { if (e.Column.Caption == "Selection") { if (gridView1.SelectedRowsCount > 0) { for (int i = 0; i < this.gridView1.RowCount; i++) { if (e.Clicks == 1 && this.gridView1.IsRowSelected(i) && this.gridView1.FocusedRowHandle.ToString().Equals(i.ToString()) == false) { this.gridView1.UnselectRow(i); } } } } }; #endregion this.Load += FrmRoleAdd_Load; if (entity != null) { OperationType = "修改"; CurrentEntity = entity; bBtnSaveClose.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; txtUserCode.Enabled = false; if (AllocationRole) { txtEMail.Enabled = false; txtTel.Enabled = false; txtNote.Enabled = false; } } IsSetUserRoles = AllocationRole; } /// /// 窗体加载 /// /// /// private void FrmRoleAdd_Load(object sender, EventArgs e) { try { // 关闭列头右键菜单 gridView1.OptionsMenu.EnableColumnMenu = false; #region 加载角色列表 if (IsSetUserRoles) { txtUserName.Enabled = false; txtTel.Enabled = false; txtPassword.Enabled = false; txtEMail.Enabled = false; txtNote.Enabled = false; } splashScreenManager1.ShowWaitForm(); APIResponseData apiResponseData = RoleManger.Instance.GetAllRole(); if (apiResponseData.IsSuccess) { List lst = apiResponseData.ToDeserializeObject>(); dgvRoles.DataSource = lst.Where(x => x.RoleStatus).ToList(); if (CurrentEntity != null) { txtUserCode.Text = CurrentEntity.LoginCode; txtUserCode.Tag = CurrentEntity.AutoID; txtUserName.Text = CurrentEntity.RealName; txtTel.Text = CurrentEntity.Phone; txtEMail.Text = CurrentEntity.Email; txtNote.Text = CurrentEntity.Description; txtPassword.Text = string.IsNullOrEmpty(CurrentEntity.PassWord) ? string.Empty : "******"; #region 如果修改用户,则不允许修改密码,只能重置密码 Myl20210115 txtPassword.Enabled = false; #endregion txtUserCode.Enabled = false; txtUserName.SelectAll(); txtUserName.Focus(); } } else { splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(apiResponseData.Message); } #endregion #region 角色选择 if (CurrentEntity != null && CurrentEntity.RoleGroup != 0) { // 遍历每一行,找到符合条件的行并选择 for (int i = 0; i < gridView1.RowCount; i++) { int v = 0; if (int.TryParse(gridView1.GetRowCellValue(i, "AutoID") + "", out v) && v == CurrentEntity.RoleGroup) { gridView1.SelectRow(i); break; // 可以选择中断循环,如果只需要选择第一行 } } } #endregion splashScreenManager1.TryCloseWait(); } catch (Exception ex) { splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(ex.Message); } } /// /// 保存 /// /// /// private void bBtnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { try { splashScreenManager1.ShowWaitForm(); if (ValidateData()) { if (CurrentEntity.AutoID > 0) { CurrentEntity.ModifyBy = GlobalInfo.CurrentUser.AutoID; } else { CurrentEntity.CreateBy = GlobalInfo.CurrentUser.AutoID; } APIResponseData apiResponseData = UserManager.Instance.InsertOrEdit(CurrentEntity); if (apiResponseData.IsSuccess) { if (CurrentEntity.AutoID != 0) { splashScreenManager1.TryCloseWait(); DialogResult = System.Windows.Forms.DialogResult.OK; return; } CurrentEntity = null; txtEMail.Text = ""; txtNote.Text = ""; txtPassword.Text = ""; txtTel.Text = ""; txtUserCode.Text = ""; txtUserName.Text = ""; gridView1.ClearSelection(); splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Info("操作成功!"); } else { splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(apiResponseData.Message); } } splashScreenManager1.TryCloseWait(); } catch (Exception ex) { splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(ex.Message); } } /// /// 保存并且关闭 /// /// /// private void bBtnSaveClose_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { try { splashScreenManager1.ShowWaitForm(); if (ValidateData()) { if (CurrentEntity.AutoID > 0) { CurrentEntity.ModifyBy = GlobalInfo.CurrentUser.AutoID; } else { CurrentEntity.CreateBy = GlobalInfo.CurrentUser.AutoID; } APIResponseData apiResponseData = UserManager.Instance.InsertOrEdit(CurrentEntity); if (!apiResponseData.IsSuccess) { throw new Exception(apiResponseData.Message); } DialogResult = System.Windows.Forms.DialogResult.OK; } splashScreenManager1.TryCloseWait(); } catch (Exception ex) { splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(ex.Message); } } /// /// 数据验证 /// /// private bool ValidateData() { bool isSuccess = false; try { string userCode = string.Empty; if (CurrentEntity == null || CurrentEntity.AutoID == 0) { userCode = txtUserCode.Text; if (string.IsNullOrWhiteSpace(userCode)) { dxErrorProvider1.SetError(txtUserCode, "账号不可以为空!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else if (userCode.Trim().Length > 50) { dxErrorProvider1.SetError(txtUserCode, "账号长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else { APIResponseData apiResponseData = UserManager.Instance.ExistLoginCode(userCode); if (!apiResponseData.IsSuccess) { dxErrorProvider1.SetError(txtUserCode, apiResponseData.Message, DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else if (apiResponseData.ToBool()) { dxErrorProvider1.SetError(txtUserCode, "账号已经存在!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else { dxErrorProvider1.SetError(txtUserCode, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); } } } string RealName = txtUserName.Text; if (string.IsNullOrWhiteSpace(RealName)) { dxErrorProvider1.SetError(txtUserName, "姓名不可以为空!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else if (RealName.Trim().Length > 50) { dxErrorProvider1.SetError(txtUserName, "姓名长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else { dxErrorProvider1.SetError(txtUserName, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); } #region 新密码校验 string Password = string.Empty; if (CurrentEntity == null || CurrentEntity.AutoID == 0) { Password = txtPassword.Text; int MinPasswordStrategyTypeCounts = PassWordValidata.Instance.GetTrueNumber(Password); if (string.IsNullOrWhiteSpace(Password)) { dxErrorProvider1.SetError(txtPassword, "新密码不可以为空!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else if (EncryptionHelper.EncryptByMD5(Password).Length > 50) { dxErrorProvider1.SetError(txtPassword, "新密码长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else if (EncryptionHelper.EncryptByMD5(Password).Length > 50) { dxErrorProvider1.SetError(txtPassword, "密码长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else if (PassWordValidata.Instance.PasswordMinLength != 0 && Password.Length < PassWordValidata.Instance.PasswordMinLength) { dxErrorProvider1.SetError(txtPassword, PassWordValidata.Instance.PasswordMinLengthText, DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else if (MinPasswordStrategyTypeCounts < 3) { dxErrorProvider1.SetError(txtPassword, $"密码不合符密码强度策略(大写字母/小写字母/数字/特殊字符中最好满足其中3种)!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else { dxErrorProvider1.SetError(txtPassword, $"", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); } } #endregion string Phone = txtTel.Text; if (!string.IsNullOrWhiteSpace(Phone)) { if (!RexEX.TaxMatch(Phone.Trim()) || Phone.Length != 11) { dxErrorProvider1.SetError(txtTel, "手机号码格式不正确!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else { dxErrorProvider1.SetError(txtTel, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); } } string Email = txtEMail.Text; if (!string.IsNullOrWhiteSpace(Email) || Email.Length > 200) { if (!RexEX.EmailMatch(Email.Trim())) { dxErrorProvider1.SetError(txtEMail, "邮箱格式不正确!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else { dxErrorProvider1.SetError(txtEMail, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); } } string description = txtNote.Text; if (!string.IsNullOrWhiteSpace(description) && description.Trim().Length > 4000) { dxErrorProvider1.SetError(txtNote, "备注的长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); return false; } else { dxErrorProvider1.SetError(txtNote, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning); } CurrentEntity = new UserInfoModel { AutoID = CurrentEntity?.AutoID ?? 0, LoginCode = userCode.Trim(), RealName = RealName.Trim(), PassWord = EncryptionHelper.EncryptByMD5(Password), Phone = Phone.Trim(), Email = Email.Trim(), Status = true, Description = description.Trim() }; int[] roles = gridView1.GetSelectedRows(); if (roles.Length > 0) { RoleModel role = (RoleModel)gridView1.GetRow(roles[0]); CurrentEntity.RoleCode = role.RoleCode; CurrentEntity.RoleName = role.RoleName; CurrentEntity.RoleGroup = role.AutoID; } return true; } catch (Exception ex) { splashScreenManager1.TryCloseWait(); XtraMessageBoxHelper.Error(ex.Message); } return isSuccess; } /// /// 查看密码或随机密码 /// /// /// private void txtPassword_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { try { if (!e.Button.Caption.Equals("WATCHPWD")) { txtPassword.Text = PasswordStrategy.Instance.GenRandomPassword(); } else { txtPassword.Properties.UseSystemPasswordChar = !txtPassword.Properties.UseSystemPasswordChar; } } catch (Exception ex) { XtraMessageBoxHelper.Error(ex.Message); } } private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { if (e.Column.FieldName == "DX$CheckboxSelectorColumn") { if (gridView1.SelectedRowsCount > 0) { for (int i = 0; i < this.gridView1.RowCount; i++) { if (e.Clicks == 1 && this.gridView1.IsRowSelected(i) && this.gridView1.FocusedRowHandle.ToString().Equals(i.ToString()) == false) { this.gridView1.UnselectRow(i); } } } } } private void gridView1_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e) { (new Action(BaseControl.GridControlExtend.CustomDrawColumnHeader)).Invoke(e); } } }