using DevExpress.XtraBars.ToolbarForm;
using DevExpress.XtraTreeList.Nodes;
using DeviceRepair.Models;
using DeviceRepairAndOptimization.Biz;
using DeviceRepairAndOptimization.Common;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
namespace DeviceRepairAndOptimization.Pages.Users
{
public partial class frmRoleEdit : ToolbarForm
{
private RoleModel CurrentRole = null;
private string OperationType = "新增";
public frmRoleEdit(RoleModel currentRole = null)
{
InitializeComponent();
CurrentRole = currentRole;
if (currentRole != null) { OperationType = "修改"; }
}
///
/// 窗体加载
///
///
///
private void frmRoleEdit_Load(object sender, EventArgs e)
{
tvAuths.BeforeCheckNode += TvAuths_BeforeCheckNode;
tvAuths.AfterCheckNode += TvAuths_AfterCheckNode;
// 关闭列头右键菜单
gridView1.OptionsMenu.EnableColumnMenu = false;
#region 加载窗体数据
splashScreenManager1.ShowWaitForm();
try
{
APIResponseData apiResponseData = RoleManger.Instance.GetAuthList();
if (apiResponseData.Code != 1)
{
splashScreenManager1.CloseWaitForm();
XtraMessageBoxHelper.Error(apiResponseData.Message);
return;
}
List auths = apiResponseData.ToDeserializeObject>();
tvAuths.DataSource = auths;
tvAuths.KeyFieldName = "AuthCode";
tvAuths.ParentFieldName = "FatherAuthCode";
tvAuths.ExpandAll();
apiResponseData = UserManager.Instance.GetAllUsers();
if (!apiResponseData.IsSuccess)
{
throw new Exception(apiResponseData.Message);
}
List userLst = apiResponseData.ToDeserializeObject>();
dgvUsers.DataSource = userLst;
if (CurrentRole != null)
{
txtRoleCode.Tag = CurrentRole.AutoID;
txtRoleCode.Text = CurrentRole.RoleCode;
txtRoleName.Text = CurrentRole.RoleName;
txtRoleDesc.Text = CurrentRole.RoleDescription;
txtNote.Text = CurrentRole.RoleNote;
SelectCurrentRoleAuths();
SelectCurrentRoleUsers();
txtRoleCode.Enabled = false;
txtRoleName.SelectAll();
txtRoleName.Focus();
}
splashScreenManager1.TryCloseWait();
}
catch (Exception ex)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
}
#endregion
}
private void SelectCurrentRoleAuths()
{
APIResponseData result = RoleManger.Instance.GetRoleAuths(CurrentRole.AutoID, CurrentRole.RoleStatus);
if (result.Code == 1)
{
List lst = result.ToDeserializeObject>();
if (lst.Count > 0)
SelectTreeviewAuths(tvAuths.Nodes, lst);
}
}
private void SelectTreeviewAuths(TreeListNodes tvds, List auths)
{
foreach (TreeListNode item in tvds)
{
var drv = tvAuths.GetDataRecordByNode(item) as AuthModel;
if (drv != null)
{
int authID = drv.AutoID;
if (auths.Exists((A) => { return A.AutoID == authID; }))
{
item.Checked = true;
}
else
{
item.Checked = false;
}
}
else
{
item.Checked = false;
}
if (item.HasChildren)
{
item.CheckState = CheckState.Indeterminate;
SelectTreeviewAuths(item.Nodes, auths);
var vFindUnChecked = item.Nodes.Where(A =>
{
return A.CheckState == CheckState.Unchecked;
});
if (vFindUnChecked != null)
{
if (vFindUnChecked.Count() == 0)
{
item.CheckState = CheckState.Checked;
}
else
{
if (vFindUnChecked.Count() == item.Nodes.Count)
{
item.CheckState = CheckState.Unchecked;
}
else
{
item.CheckState = CheckState.Indeterminate;
}
}
}
else
{
item.CheckState = CheckState.Checked;
}
}
}
}
private void SelectCurrentRoleUsers()
{
APIResponseData result = RoleManger.Instance.GetRoleUsers(CurrentRole.AutoID);
if (result.Code == 1)
{
List lst = result.ToDeserializeObject>();
if (lst.Count > 0)
SetUserRowSelected(lst);
}
}
private void SetUserRowSelected(List lstUsers)
{
if (gridView1.DataSource == null || gridView1.RowCount < 1)
{
return;
}
for (int i = 0; i < gridView1.RowCount; i++)
{
var AutoID = gridView1.GetRowCellValue(i, "AutoID")?.ToString().Trim();
if (lstUsers.Exists((A) => { return A.AutoID.ToString().Equals(AutoID); }))
{
gridView1.SelectRow(i);
}
else
{
gridView1.UnselectRow(i);
}
}
}
private void TvAuths_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
{
e.State = (e.PrevState == CheckState.Checked ? CheckState.Unchecked : CheckState.Checked);
}
private void TvAuths_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
{
SetCheckedChildNodes(e.Node, e.Node.CheckState);
SetCheckedParentNodes(e.Node, e.Node.CheckState);
}
///
/// 设置子节点的状态
///
///
///
private void SetCheckedChildNodes(TreeListNode node, CheckState check)
{
for (int i = 0; i < node.Nodes.Count; i++)
{
node.Nodes[i].CheckState = check;
SetCheckedChildNodes(node.Nodes[i], check);
}
}
///
/// 设置父节点的状态
///
///
///
private void SetCheckedParentNodes(TreeListNode node, CheckState check)
{
if (node.ParentNode != null)
{
bool bCheck = false;
CheckState state;
for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
{
state = node.ParentNode.Nodes[i].CheckState;
if (!check.Equals(state))
{
bCheck = !bCheck;
break;
}
}
node.ParentNode.CheckState = bCheck ? CheckState.Indeterminate : check;
SetCheckedParentNodes(node.ParentNode, check);
}
}
///
/// 筛选
///
///
///
private void comboBoxEdit1_Properties_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
var iIndex = comboBoxEdit1.SelectedIndex;
string cFilterString = "";
if (iIndex == 0)
{
cFilterString = string.Empty;
}
else if (iIndex == 1)
{
cFilterString = "[Status] = true";
}
else if (iIndex == 2)
{
cFilterString = "[Status] = false";
}
gridView1.ActiveFilterString = cFilterString;
}
catch (Exception ex)
{
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 保存
///
///
///
private void bBtnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
splashScreenManager1.ShowWaitForm();
try
{
if (ValidateData())
{
RoleEditSubmitModel submitModel = new RoleEditSubmitModel();
submitModel.Role = CurrentRole;
// 权限列表选中项
authLst.Clear();
if (tvAuths.Nodes.Count > 0)
{
foreach (TreeListNode root in tvAuths.Nodes)
{
GetCheckedAuthorizatioId(root);
}
}
if (authLst.Count > 0)
{
foreach (int item in authLst)
{
submitModel.RoleAuths.Add(new RoleAuthModel
{
AuthID = item,
CreateBy = GlobalInfo.CurrentUser.AutoID,
RoleID = CurrentRole.AutoID,
Status = true,
});
}
}
List vUsers = GetSelectedUsers();
if (vUsers.Count > 0)
{
submitModel.Users.AddRange(vUsers);
}
APIResponseData apiResponseData = RoleManger.Instance.InsertOrEdit(submitModel);
if (apiResponseData.Code != 1)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(apiResponseData.Message);
return;
}
splashScreenManager1.TryCloseWait();
this.DialogResult = DialogResult.OK;
}
// 更新当前用户权限
new Action(GlobalInfo.RefreshAuths).BeginInvoke(null, null);
splashScreenManager1.TryCloseWait();
}
catch (Exception ex)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 数据验证
///
///
private bool ValidateData()
{
bool issuccess = false;
try
{
string roleCode = txtRoleCode.Text;
if (CurrentRole == null || CurrentRole.AutoID == 0)
{
if (string.IsNullOrWhiteSpace(roleCode))
{
dxErrorProvider1.SetError(txtRoleCode, "角色编号不能为空!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
return false;
}
else if (roleCode.Trim().Length > 50)
{
dxErrorProvider1.SetError(txtRoleCode, "角色编号长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
return false;
}
else
{
APIResponseData apiResponseData = RoleManger.Instance.CheckRoleCodeExists(roleCode.Trim());
if (!apiResponseData.IsSuccess)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(apiResponseData.Message);
return false;
}
else
{
if (apiResponseData.ToBool())
{
dxErrorProvider1.SetError(txtRoleCode, "角色编号已存在!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
return false;
}
else
{
dxErrorProvider1.SetError(txtRoleCode, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
}
}
}
}
string roleName = txtRoleName.Text;
if (string.IsNullOrWhiteSpace(roleName))
{
dxErrorProvider1.SetError(txtRoleName, "角色名称不能为空!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
return false;
}
else if (roleName.Trim().Length > 50)
{
dxErrorProvider1.SetError(txtRoleName, "角色名称长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
return false;
}
else
{
dxErrorProvider1.SetError(txtRoleName, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
}
string roleDesc = txtRoleDesc.Text;
if (roleDesc.Trim().Length > 500)
{
dxErrorProvider1.SetError(txtRoleDesc, "角色描述长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
return false;
}
else
{
dxErrorProvider1.SetError(txtRoleDesc, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
}
string note = txtNote.Text;
if (note.Trim().Length > 500)
{
dxErrorProvider1.SetError(txtNote, "备注长度超限!", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
return false;
}
else
{
dxErrorProvider1.SetError(txtNote, "", DevExpress.XtraEditors.DXErrorProvider.ErrorType.Warning);
}
CurrentRole = new RoleModel
{
AutoID = CurrentRole == null ? 0 : CurrentRole.AutoID,
RoleStatus = true,
RoleNote = note.Trim(),
RoleName = roleName.Trim(),
RoleCode = roleCode.Trim(),
RoleDescription = roleDesc.Trim(),
CreateBy = GlobalInfo.CurrentUser.AutoID,
ModifyBy = GlobalInfo.CurrentUser.AutoID
};
return true;
}
catch (Exception ex)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
}
return issuccess;
}
private List authLst = new List();//所选择的权限的ID集合
private void GetCheckedAuthorizatioId(TreeListNode parentNode)
{
if (parentNode.Nodes.Count == 0)
{
return;//递归终止
}
foreach (TreeListNode node in parentNode.Nodes)
{
if (node.CheckState == CheckState.Checked || node.CheckState == CheckState.Indeterminate)
{
var drv = tvAuths.GetDataRecordByNode(node) as AuthModel;
if (drv != null)
{
authLst.Add(drv.AutoID);
}
}
GetCheckedAuthorizatioId(node);
}
}
///
/// 选择用户
///
///
private List GetSelectedUsers()
{
int[] ia = gridView1.GetSelectedRows();
List lstSelectedUsers = new List();
for (int i = 0; i < ia.Length; i++)
{
var vUser = gridView1.GetRow(ia[i]) as UserInfoModel;
lstSelectedUsers.Add(vUser);
}
return lstSelectedUsers;
}
}
}