using DevExpress.Utils.DragDrop;
using DevExpress.XtraBars.Docking2010;
using DevExpress.XtraEditors;
using DevExpress.XtraTreeList.Nodes;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
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(GlobalParas._GlobalParas.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.Insert(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);
}
}
}