using DevExpress.Utils.DragDrop; using DevExpress.XtraEditors; using DevExpress.XtraTreeList.Nodes; using System.Data; using Yw; using Yw.WinFrmUI; namespace HStation.WinFrmUI { /// /// 菜单管理界面 /// public partial class MenuMgrPage : DocumentPage { public MenuMgrPage() { InitializeComponent(); this.treeList1.InitialMultiColSettings(30); this.PageTitle.Caption = "菜单管理"; this.PageTitle.SvgImageSize = new Size(24, 24); } private List _allBindingList = null;//绑定列表 private Yw.BLL.ProjectMenu _bll = new Yw.BLL.ProjectMenu(); /// /// 初始化数据 /// public override async void InitialDataSource() { var allList = await new Yw.BLL.ProjectMenu().GetByProjectID(LoginUserInfo.ProjectID); _allBindingList = new List(); if (allList != null) { foreach (var item in allList) { var model = new MenuViewModel(item); _allBindingList.Add(model); } } this.menuViewModelBindingSource.DataSource = _allBindingList; this.menuViewModelBindingSource.ResetBindings(false); // this.treeList1.ForceInitialize(); this.treeList1.ExpandAll(); } public override void VerifyAuth() { this.AuthTree.VerifyAuth(this.ribbonControl1); } //添加 private void barBtnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_allBindingList == null) return; var row = this.treeList1.GetCurrentViewModel(_allBindingList); var dlg = new AddMenuDlg(); dlg.SetBindingData(row != null ? row.ID : 0); dlg.ReloadDataEvent += async (rhs) => { var id = await _bll.InsertEx(rhs); if (id > 0) { rhs.ID = id; this._allBindingList.Add(new MenuViewModel(rhs)); this.menuViewModelBindingSource.ResetBindings(false); //this.treeList1.Refresh(); return true; } return false; }; dlg.ShowDialog(); } //编辑 private async void barBtnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_allBindingList == null) return; var row = this.treeList1.GetCurrentViewModel(_allBindingList); if (row == null) return; var dlg = new EditMenuDlg(); var model = await _bll.GetByID(row.ID); if (model == null) return; dlg.SetBindingData(model); dlg.ReloadDataEvent += async (rhs) => { if (await _bll.Update(rhs)) { row.Reset(rhs); this.treeList1.RefreshNode(this.treeList1.FocusedNode); return true; } return false; }; dlg.ShowDialog(); } //显示详细信息 private void barBtnInfo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_allBindingList == null) return; var row = this.treeList1.GetCurrentViewModel(_allBindingList); if (row == null) return; var dlg = new ViewMenuDlg(); dlg.SetBindingData(row); dlg.ShowDialog(); } //删除 private async void barBtnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_allBindingList == null) return; var row = this.treeList1.GetCurrentViewModel(_allBindingList); if (row == null) return; if (XtraMessageBox.Show($"确认删除数据行?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK) return; if (!await new Yw.BLL.ProjectMenu().DeleteByID(row.ID)) { XtraMessageBox.Show($"删除失败!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } _allBindingList.Remove(row); this.menuViewModelBindingSource.ResetBindings(false); //this.treeList1.RefreshDataSource(); XtraMessageBox.Show($"删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } //设置菜单功能点 private void SetFuncList() { /* if (_allBindingList == null) return; var row = this.treeList1.GetCurrentViewModel(_allBindingList); if (row == null) return; var page = new FuncMgrPage(); page.SetBindingData(row); page.AuthTree = this.AuthTree?.Children?.Find(x => x.Code == "func"); this.ToNextPage(page);*/ } private async void dragDropEvents1_DragDrop(object sender, DevExpress.Utils.DragDrop.DragDropEventArgs e) { var nodes = e.Data as List; if (nodes == null || nodes.Count < 1) { e.Handled = true; return; } var sourceNode = nodes[0]; var sourceNodeObj = this.treeList1.GetDataRecordByNode(sourceNode) as MenuViewModel; if (sourceNodeObj == null) { e.Handled = true; return; } var destNode = this.treeList1.GetNodeByCP(e.Location); if (destNode == null) { e.Handled = true; return; } var destNodeObj = this.treeList1.GetDataRecordByNode(destNode) as MenuViewModel; if (destNode == null) { e.Handled = true; return; } long id = sourceNodeObj.ID; long parentId = 0; int sortCode = 0; var sorters = new List(); if (e.InsertType == InsertType.Before) { parentId = destNodeObj.ParentID; sortCode = destNodeObj.SortCode; _allBindingList.ForEach(x => { if (x.ParentID == destNodeObj.ParentID) { if (x.SortCode >= destNodeObj.SortCode) { if (x != sourceNodeObj) { sorters.Add(new Yw.Vmo.Sorter() { ID = x.ID, SortCode = x.SortCode + 1 }); } } } }); } else if (e.InsertType == InsertType.After) { parentId = destNodeObj.ParentID; sortCode = destNodeObj.SortCode + 1; _allBindingList.ForEach(x => { if (x.ParentID == destNodeObj.ParentID) { if (x.SortCode > destNodeObj.SortCode) { if (x != sourceNodeObj) { sorters.Add(new Yw.Vmo.Sorter() { ID = x.ID, SortCode = x.SortCode + 1 }); } } } }); } else if (e.InsertType == InsertType.AsChild) { parentId = destNodeObj.ID; var allChildList = _allBindingList.Where(x => x.ParentID == destNodeObj.ParentID).ToList(); sortCode = allChildList.Count < 1 ? 1 : allChildList.Max(x => x.SortCode) + 1; } else { e.Handled = true; return; } var bll = BLLFactory.Instance; var bol = await bll.UpdateTreeSortCode(id, parentId, sortCode); if (!bol) { e.Handled = true; return; } if (sorters != null && sorters.Count > 0) { bol = await bll.UpdateSorter(sorters); if (!bol) { e.Handled = true; return; } } _allBindingList.ForEach(x => { if (x.ID == id) { x.ParentID = parentId; x.SortCode = sortCode; } if (sorters.Count > 0) { var sorter = sorters.Find(t => t.ID == x.ID); if (sorter != null) { x.SortCode = sorter.SortCode; } } }); } //设置拖拽可用性 private void SetDragEnable(bool allowArag) { var be = this.behaviorManager1.GetBehavior(this.treeList1); be.Properties.AllowDrag = allowArag; } private void barBtnSearch_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.treeList1.OptionsFind.AlwaysVisible = !this.treeList1.OptionsFind.AlwaysVisible; } private void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.InitialDataSource(); } private void barCkDrag_CheckedChanged_1(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SetDragEnable(this.barCkDrag.Checked); } } }