using ComponentFactory.Krypton.Toolkit; using NXWMS.Client.Code.Extends; using NXWMS.Client.Model.AppModels.Condition; using NXWMS.Client.Model.AppModels.Condition.SysSettings; using NXWMS.Client.Model.AppModels.Result; using NXWMS.Client.Model.AppModels.Result.SysSettings; using NXWMS.Client.Model.CoreModels; using NXWMS.Client.String.Enums; using NXWMS.Commons; using NXWMS.Services; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace NXWMS.Forms.SysSettings { public partial class frmRole : KryptonForm { /// /// 界面最后执行操作 /// private EnumOperation _LastOperation; /// /// 窗体类名 /// private string _CrrentClassName; /// /// 客户端字段排序列表 /// private List _clientFieldOrderList; /// /// 菜单层级列表 /// private List _menuLevelList; /// /// 选择行主键列表 /// private List _CheckRowIdList = new List(); /// /// 当前页面操作的主键 /// private string _PrimaryKey = "ROLE_ID"; public frmRole() { InitializeComponent(); _CrrentClassName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName; InitData(); InitControl(); } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } /// /// 控件初始化 /// private void InitControl() { CheckForIllegalCrossThreadCalls = false; //groupOperation.LostFocus += new EventHandler(groupOperation_LostFocus); //groupOperation.GotFocus += new EventHandler(groupOperation_GostFocus); //界面数据初始化 dataGridView.CellClick += new DataGridViewCellEventHandler(dataGridView_CellClick); dataGridView.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderList), false); //菜单列表添加 //treeViewMainMenu.Scrollable = true; //treeViewMainMenu.ShowPlusMinus = true; //treeViewMainMenu.ShowRootLines = true; //treeViewMainMenu.Nodes.Clear(); var menuList = _menuLevelList.Where((x, i) => _menuLevelList.FindIndex(z => z.MainMenuId == x.MainMenuId) == i).Distinct().ToList(); foreach (var item in (from x in menuList select new { x.MainMenuId, x.MainMenuName, x.MainMenuCode, x.MainMenuOrder, x.MainMenuURL }).Distinct()) { var newTreeNode = new TreeNode { Checked = true, Name = item.MainMenuId.ToString(), Text = item.MainMenuName, }; newTreeNode.Checked = false; //var f1 = treeViewMainMenu.Nodes.Add(newTreeNode); } //treeViewMainMenu.ExpandAll(); //treeViewMainMenu.NodeMouseDoubleClick += new // TreeNodeMouseClickEventHandler(TreeMainMenuNodeDoubleClick); //暂时用代码限制长度,不用表配置之类做了.. txtSearchRoleCode.SetControlBase(50); txtSearchRoleName.SetControlBase(100); //txtRoleCode.SetControlBase(50); //txtRoleName.SetControlBase(100); _pageSize = 20; _pageIndex = 1; } /// /// 选中授权 /// private RolePermissionResult _selectRolePermission; /// /// 主菜单双击 /// /// /// public void TreeMainMenuNodeDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { var menuView = sender as KryptonTreeView; var selectedNode = menuView.SelectedNode; if (selectedNode == null) { return; } //菜单列表添加 //treeViewMenu.Scrollable = true; //treeViewMenu.ShowPlusMinus = true; //treeViewMenu.ShowRootLines = true; //treeViewMenu.Nodes.Clear(); _selectMainMenuIndex = e.Node.Index; foreach (var item in (from x in _menuLevelList.Where(m => m.MainMenuId == int.Parse(selectedNode.Name)) select new { x.MenuCode, x.MenuName, x.MenuId, x.MenuOrder, x.MenuURL }).Distinct()) { var newTreeNode = new TreeNode { Checked = true, Name = item.MenuId.ToString(), Text = item.MenuName, }; newTreeNode.Checked = false; //var f1 = treeViewMenu.Nodes.Add(newTreeNode); } //treeViewMenu.ExpandAll(); //授权打勾 if (!_menuCheckList.Any()) { _selectRolePermission = SysSettingsServices.roleService.GetPermissionInfo(new RolePermissionCondition { OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId, RoleId = _selectRoleId, }).Data; //foreach (TreeNode item in treeViewMainMenu.Nodes) //{ // item.Checked = false; //} //foreach (TreeNode item in treeViewMenu.Nodes) //{ // item.Checked = false; //} //foreach (var item in _selectRolePermission.RoleMenuList.Where(m => m.MainMenuId != null).Distinct().ToList()) //{ // if (treeViewMainMenu.Nodes[item.MainMenuId.Value.ToString()] != null) // { // treeViewMainMenu.Nodes[item.MainMenuId.Value.ToString()].Checked = true; // } // if (treeViewMenu.Nodes[item.MainMenuId.Value.ToString()] != null) // { // treeViewMenu.Nodes[item.MainMenuId.Value.ToString()].Checked = true; // } //} } else { //foreach (TreeNode item in treeViewMenu.Nodes) //{ // item.Checked = false; //} //foreach (var item in _menuCheckList) //{ // if (treeViewMenu.Nodes[item.ToString()] != null) // { // treeViewMenu.Nodes[item.ToString()].Checked = true; // } //} } //treeViewMenu.NodeMouseDoubleClick += new // TreeNodeMouseClickEventHandler(TreeMenuNodeDoubleClick); } /// /// 菜单双击 /// /// /// public void TreeMenuNodeDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { var menuView = sender as KryptonTreeView; var selectedNode = menuView.SelectedNode; if (selectedNode == null) { return; } _selectMenuIndex = e.Node.Index; //菜单列表添加 //treeViewFunction.Scrollable = true; //treeViewFunction.ShowPlusMinus = true; //treeViewFunction.ShowRootLines = true; //treeViewFunction.Nodes.Clear(); foreach (var item in (from x in _menuLevelList.Where(m => m.MenuId == int.Parse(selectedNode.Name) && m.FunctionCode != null) select new { x.FunctionCode, x.FunctionName, x.FunctionId, x.FunctionOrder, x.FunctionURL }).Distinct()) { var newTreeNode = new TreeNode { Checked = true, Name = item.FunctionId.ToString(), Text = item.FunctionName, }; newTreeNode.Checked = false; //var f1 = treeViewFunction.Nodes.Add(newTreeNode); } //treeViewFunction.ExpandAll(); //foreach (TreeNode item in treeViewFunction.Nodes) //{ // item.Checked = false; //} //授权打勾 if (!_menuCheckList.Any()) { var menuList = _selectRolePermission; foreach (var item in menuList.RoleMenuList.Where(m => m.MainMenuId != null)) { //if (treeViewFunction.Nodes[item.MainMenuId.Value.ToString()] != null) //{ // treeViewFunction.Nodes[item.MainMenuId.Value.ToString()].Checked = true; //} } } else { foreach (var item in _menuCheckList) { //if (treeViewFunction.Nodes[item.ToString()] != null) //{ // treeViewFunction.Nodes[item.ToString()].Checked = true; //} } } } /// /// 获取授权菜单列表 /// /// private List GetPermissionMenuIdList() { var permissionList = new List(); //foreach (TreeNode item in treeViewMainMenu.Nodes) //{ // if (item.Checked) // { // permissionList.Add(Convert.ToInt32(item.Name)); // } //} //foreach (TreeNode item in treeViewMenu.Nodes) //{ // if (item.Checked) // { // permissionList.Add(Convert.ToInt32(item.Name)); // } //} //foreach (TreeNode item in treeViewFunction.Nodes) //{ // if (item.Checked) // { // permissionList.Add(Convert.ToInt32(item.Name)); // } //} return permissionList; } /// /// 数据初始化 /// private void InitData() { //获取数据源配置 var result = ConfigServices.configService.GetDataViewOrderList(new ClientFieldOrderCondition { SourceCode = $"{_CrrentClassName}" }); if (result.Status == OperateStatus.Success) { _clientFieldOrderList = result.Data; } //获取菜单层级 var menuResult = SysSettingsServices.menuService.GetLevelList(new MenuLevelCondition { }); if (menuResult.Status == OperateStatus.Success) { _menuLevelList = menuResult.Data; } _menuCheckList = new List(); } /// /// ESC撤销此次编辑操作 /// /// /// /// protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { int WM_KEYDOWN = 256; int WM_SYSKEYDOWN = 260; if (msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN) { switch (keyData) { case Keys.Escape: //if (groupOperation.Visible) //{ // btnExit_Click(null, null); //} break; } } return false; } private void groupOperation_LostFocus(object sender, EventArgs e) { } private void groupOperation_GostFocus(object sender, EventArgs e) { //groupOperation.Values.Heading = _LastOperation.Display(); //groupOperation.Values.Image = Image.FromFile(_LastOperation.ImagePath()); //groupOperation.Text = $"{ _LastOperation.Display()}数据"; //lbStatusMessage.Visible = true; } private int _pageSize; private int _pageIndex; private int _totalCount; private void btnSearch_Click(object sender, EventArgs e) { _pageIndex = 1; var loadfrm = new frmLoading(); loadfrm.Show(); var message = loadfrm.EventCalExec(LoadSearch, this.pageTool.PageIndex, this.pageTool.PageSize); pageTool.DataCount = _totalCount; if (!string.IsNullOrWhiteSpace(message)) { KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private string LoadSearch(int pageIndex, int pageSize) { var result = SysSettingsServices.roleService.GetList(new RoleSearchCondition { RoleCode = txtSearchRoleCode.Text, RoleName = txtSearchRoleName.Text, PageIndex = pageIndex, PageSize = pageSize, IsUsed = chkSearchUse.Checked, }); if (result.Status == OperateStatus.Success) { _totalCount = result.Data.TotalCount; _pageIndex = pageIndex; _pageSize = pageSize; if (result.Data.RowData.Any()) { dataGridView.Columns.Clear(); dataGridView.DataSource = result.Data.RowData.ToList(); dataGridView.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderList)); } else { if (dataGridView.DataSource != null) { dataGridView.DataSource = new List(); } dataGridView.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderList), false); } return string.Empty; } else { return result.Message; } } private void btnAdd_Click(object sender, EventArgs e) { //if (!groupOperation.Visible) //{ var frm = new ChildFrm.frmRoleEdit(); frm.LastOperation = EnumOperation.Add; frm.tableLayoutPanelInput.SetGroupControlsEmpty(dataGridView); frm.MenuLevelList = this._menuLevelList; frm.InitControl(); if (frm.ShowDialog() == DialogResult.OK) { this.btnSearch_Click(null, null); } //richDescibe.Text = ""; //_LastOperation = EnumOperation.Add; //txtRoleCode.Enabled = true; //kryptonNavigatorOperation.SelectedPage = kryptonPageInfo; //groupOperation.Visible = true; //groupOperation.Focus(); //} } private int _selectIndex; private int _selectRoleId; private void btnEdit_Click(object sender, EventArgs e) { dataGridView_CellDoubleClick(null, null); } private void btnRemove_Click(object sender, EventArgs e) { if (_CheckRowIdList.Count == 0) { return; } if (KryptonMessageBox.Show($"确认删除选中数据?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { _LastOperation = EnumOperation.Remove; var editResult = SysSettingsServices.roleService.Deleted(new RoleCondition { OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId, RoleIds = string.Join(",", _CheckRowIdList) }); if (editResult.Status == OperateStatus.Success) { KryptonMessageBox.Show($"操作成功!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); //groupOperation.Visible = false; btnSearch_Click(null, null); } } } private void dataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { SelectInit(); if (_selectIndex >= 0) { var frm = new ChildFrm.frmRoleEdit(); frm.LastOperation = EnumOperation.Edit; //txtRoleCode.Enabled = false; //kryptonNavigatorOperation.SelectedPage = kryptonPageInfo; frm.tableLayoutPanelInput.SetGroupControls(dataGridView, dataGridView.Rows[_selectIndex]); //richDescibe.Text = dataGridView.Rows[_selectIndex].Cells["DESCRIBE"].Value == null ? "" : //dataGridView.Rows[_selectIndex].Cells["DESCRIBE"].Value.ToString(); //groupOperation.Visible = true; _selectRolePermission = SysSettingsServices.roleService.GetPermissionInfo(new RolePermissionCondition { OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId, RoleId = _selectRoleId, }).Data; var menuList = _selectRolePermission; foreach (var item in menuList.RoleMenuList.Where(m => m.MainMenuId != null)) { if (frm.treeViewMainMenu.Nodes[item.MainMenuId.Value.ToString()] != null) { frm. treeViewMainMenu.Nodes[item.MainMenuId.Value.ToString()].Checked = true; } } if (frm.ShowDialog()==DialogResult.OK) { this.btnSearch_Click(null, null); } } } private void SelectInit() { _selectIndex = dataGridView.SelectedRows[0].Index; if (_selectIndex >= 0) { _selectRoleId = Convert.ToInt32(dataGridView.Rows[_selectIndex].Cells[_PrimaryKey].Value); } } //private void btnSave_Click(object sender, EventArgs e) //{ // if (string.IsNullOrWhiteSpace(txtRoleCode.Text)) // { // KryptonMessageBox.Show($"请输入角色编码。", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); // return; // } // if (string.IsNullOrWhiteSpace(txtRoleName.Text)) // { // KryptonMessageBox.Show($"请输入角色名称。", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); // return; // } // _menuCheckList = new List(); // switch (_LastOperation) // { // case EnumOperation.Add: // var addResult = SysSettingsServices.roleService.Add(new RoleCondition // { // OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId, // IsUsed = chkUse.Checked, // RoleCode = txtRoleCode.Text, // RoleName = txtRoleName.Text, // Describe = richDescibe.Text, // PermissionMenuIdList = GetPermissionMenuIdList(), // }); // if (addResult.Status == OperateStatus.Success) // { // KryptonMessageBox.Show($"操作成功!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); // groupOperation.Visible = false; // btnSearch_Click(null, null); // dataGridView.ClearSelection(); // } // else // { // KryptonMessageBox.Show($"操作失败!\r\n{addResult.Message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); // } // break; // case EnumOperation.Edit: // var editResult = SysSettingsServices.roleService.Edit(new RoleCondition // { // OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId, // IsUsed = chkUse.Checked, // RoleCode = txtRoleCode.Text, // RoleName = txtRoleName.Text, // RoleId = _selectRoleId, // Describe = richDescibe.Text, // PermissionMenuIdList = GetPermissionMenuIdList(), // }); // if (editResult.Status == OperateStatus.Success) // { // KryptonMessageBox.Show($"操作成功!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); // groupOperation.Visible = false; // btnSearch_Click(null, null); // dataGridView.ClearSelection(); // } // else // { // KryptonMessageBox.Show($"操作失败!\r\n{editResult.Message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); // } // break; // } //} private void btnExit_Click(object sender, EventArgs e) { if (KryptonMessageBox.Show($"确认退出 {_LastOperation.Display()} 数据操作?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { _menuCheckList = new List(); //groupOperation.Visible = false; } else { //groupOperation.Visible = true; //groupOperation.Focus(); } } private Point mouse_offset; private void groupOperation_MouseDown(object sender, MouseEventArgs e) { mouse_offset = new Point(-e.X, -e.Y); } private void groupOperation_MouseMove(object sender, MouseEventArgs e) { ((Control)sender).Cursor = Cursors.Arrow; if (e.Button == MouseButtons.Left) { Point mousePos = MousePosition; mousePos.Offset(mouse_offset.X, mouse_offset.Y); ((Control)sender).Location = ((Control)sender).Parent.PointToClient(mousePos); Application.DoEvents(); } } private void btnSearchExport_Click(object sender, EventArgs e) { this.dataGridView.DataGridViewExport($"{AppConfig.CurrentMenu.FirstOrDefault()}列表" + DateTime.Now.ToString("yyyyMMddHH")); } private int _selectMainMenuIndex; private int _selectMenuIndex; private int _selectFunctionIndex; /// /// 选中的所有菜单 /// private List _menuCheckList; private void treeViewMainMenu_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action == TreeViewAction.ByMouse) { //foreach (TreeNode child in treeViewMenu.Nodes) //{ // child.Checked = e.Node.Checked; // if (!_menuCheckList.Where(s => s == int.Parse(child.Name)).Any()) // { // if (child.Checked) // { // _menuCheckList.Add(int.Parse(child.Name)); // } // } // else // { // if (!child.Checked) // { // _menuCheckList.Remove(int.Parse(child.Name)); // } // } //} } } private void treeViewMenu_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action == TreeViewAction.ByMouse) { //foreach (TreeNode child in treeViewFunction.Nodes) //{ // child.Checked = e.Node.Checked; // if (!_menuCheckList.Where(s => s == int.Parse(child.Name)).Any()) // { // if (child.Checked) // { // _menuCheckList.Add(int.Parse(child.Name)); // } // } // else // { // if (!child.Checked) // { // _menuCheckList.Remove(int.Parse(child.Name)); // } // } //} int index = 0; //foreach (TreeNode child in treeViewMenu.Nodes) //{ // if (child.Checked) // { // index++; // } //} //if (index > 0) //{ // treeViewMainMenu.Nodes[_selectMainMenuIndex].Checked = true; //} //else //{ // treeViewMainMenu.Nodes[_selectMainMenuIndex].Checked = false; //} } } private void treeViewFunction_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action == TreeViewAction.ByMouse) { _selectFunctionIndex = e.Node.Index; int index = 0; //foreach (TreeNode child in treeViewFunction.Nodes) //{ // if (child.Checked) // { // index++; // } // if (!_menuCheckList.Where(s => s == int.Parse(child.Name)).Any()) // { // if (child.Checked) // { // _menuCheckList.Add(int.Parse(child.Name)); // } // } // else // { // if (!child.Checked) // { // _menuCheckList.Remove(int.Parse(child.Name)); // } // } //} //if (index > 0) //{ // treeViewMenu.Nodes[_selectMenuIndex].Checked = true; //} //else //{ // treeViewMenu.Nodes[_selectMenuIndex].Checked = false; //} //index = 0; //foreach (TreeNode child in treeViewMenu.Nodes) //{ // if (child.Checked) // { // index++; // } //} //if (index > 0) //{ // treeViewMainMenu.Nodes[_selectMainMenuIndex].Checked = true; //} //else //{ // treeViewMainMenu.Nodes[_selectMainMenuIndex].Checked = false; //} } } private void dataGridView_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) { e.Row.HeaderCell.Value = string.Format("{0}", (_pageIndex - 1) * _pageSize + e.Row.Index + 1); } private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && e.ColumnIndex == 0) { if (this.dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null) { if (!_CheckRowIdList.Where(s => s == dataGridView.Rows[e.RowIndex].Cells[_PrimaryKey].Value.ToString()).Any()) { _CheckRowIdList.Add(dataGridView.Rows[e.RowIndex].Cells[_PrimaryKey].Value.ToString()); } this.dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 1; } else if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == "1") { if (_CheckRowIdList.Where(s => s == dataGridView.Rows[e.RowIndex].Cells[_PrimaryKey].Value.ToString()).Any()) { _CheckRowIdList.Remove(dataGridView.Rows[e.RowIndex].Cells[_PrimaryKey].Value.ToString()); } this.dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 0; } else { if (!_CheckRowIdList.Where(s => s == dataGridView.Rows[e.RowIndex].Cells[_PrimaryKey].Value.ToString()).Any()) { _CheckRowIdList.Add(dataGridView.Rows[e.RowIndex].Cells[_PrimaryKey].Value.ToString()); } this.dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 1; } } } private void pageTool_OnPageChange(int PageIndex, int PageSzie) { this.btnSearch_Click(null, null); } private void btnClear_Click(object sender, EventArgs e) { this.txtSearchRoleCode.Text = ""; this.txtSearchRoleName.Text = ""; this.chkSearchUse.Checked = true; } } }