You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
5.7 KiB
C#
172 lines
5.7 KiB
C#
using Prism.Commands;
|
|
using Prism.Events;
|
|
using Prism.Regions;
|
|
using Prism.Services.Dialogs;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
using System.Windows.Threading;
|
|
using Txgy.EWS.Client.Common;
|
|
using Txgy.EWS.Client.Entity;
|
|
using Txgy.EWS.Client.IBLL;
|
|
using Txgy.EWS.Client.Models;
|
|
using Unity;
|
|
|
|
namespace Txgy.EWS.Client.SysModule.ViewModels
|
|
{
|
|
public class MenuManagementViewModel : PageViewModelBase
|
|
{
|
|
public ObservableCollection<MenuItemModel> MenuTree { get; set; } = new ObservableCollection<MenuItemModel>();
|
|
private List<MenuEntity> origMenus = null;
|
|
private MenuItemModel currentMenu;
|
|
|
|
// ListView SelectedItem
|
|
|
|
public ICommand ItemSelectedCommand { get; set; }
|
|
|
|
IUnityContainer _unityContainer;
|
|
IDialogService _dialogService;
|
|
IMenuBLL _menuBLL;
|
|
public MenuManagementViewModel(
|
|
IRegionManager regionManager,
|
|
IUnityContainer unityContainer,
|
|
IEventAggregator ea,
|
|
IDialogService dialogService,
|
|
IMenuBLL menuBLL)
|
|
: base(regionManager, unityContainer, ea)
|
|
{
|
|
_unityContainer = unityContainer;
|
|
_dialogService = dialogService;
|
|
_menuBLL = menuBLL;
|
|
|
|
this.PageTitle = "系统菜单管理";
|
|
|
|
ItemSelectedCommand = new DelegateCommand<object>(o => { currentMenu = o as MenuItemModel; AddCommand.RaiseCanExecuteChanged(); });
|
|
//currentMenu = MenuTree[0];
|
|
//AddCommand.RaiseCanExecuteChanged();
|
|
}
|
|
|
|
public override void Refresh()
|
|
{
|
|
// 初始化当前用户权限下的所有菜单数据
|
|
//var global = _unityContainer.Resolve<GlobalEntity>();
|
|
//if (global != null && global.CurrentUserInfo != null)
|
|
this.ShowLoading();
|
|
MenuTree.Clear();
|
|
Task.Run(async () =>
|
|
{
|
|
origMenus = await _menuBLL.GetAllMenus();
|
|
GlobalData.CurrentUserInfo.Menus = origMenus;
|
|
|
|
MenuItemModel root = new MenuItemModel
|
|
{
|
|
MenuId = 0,
|
|
MenuHeader = "根节点",
|
|
HasChild = true,
|
|
IsExpanded = true,
|
|
IsCurrent = true,
|
|
MenuType = 1
|
|
};
|
|
currentMenu = root;
|
|
|
|
_unityContainer.Resolve<Dispatcher>().Invoke(() =>
|
|
{
|
|
MenuTree.Add(root);
|
|
FillMenus(origMenus, root.Children, 0);
|
|
});
|
|
|
|
this.HideLoading();
|
|
});
|
|
}
|
|
|
|
private void FillMenus(IList<MenuEntity> origMenus, IList<MenuItemModel> menus, int nodeId, int nodeType = 0)
|
|
{
|
|
var sub = origMenus.Where(m => m.ParentId == nodeId && m.MenuType >= nodeType).OrderBy(o => o.Index);
|
|
|
|
if (sub.Count() > 0)
|
|
{
|
|
foreach (var item in sub)
|
|
{
|
|
MenuItemModel mm = new MenuItemModel()
|
|
{
|
|
MenuId = item.MenuId,
|
|
MenuHeader = item.MenuHeader,
|
|
MenuIcon = item.MenuIcon,
|
|
TargetView = item.TargetView,
|
|
IsExpanded = true,
|
|
MenuType = item.MenuType,
|
|
ParentId = item.ParentId,
|
|
Index = item.Index
|
|
};
|
|
mm.EditCommand = new DelegateCommand<object>(EditMenuNode);
|
|
mm.DeleteCommand = new DelegateCommand<object>(DeleteMenuNode);
|
|
|
|
FillMenus(origMenus, mm.Children, item.MenuId, nodeType);
|
|
mm.HasChild = mm.Children.Count > 0;
|
|
menus.Add(mm);
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void AddItem()
|
|
{
|
|
// 添加菜单项
|
|
if (currentMenu.MenuType == 1)
|
|
{
|
|
DialogParameters param = new DialogParameters();
|
|
param.Add("type", 0);
|
|
param.Add("menu", currentMenu);
|
|
|
|
ShowEditDialog(param);
|
|
}
|
|
}
|
|
public override bool CanExcute()
|
|
{
|
|
if (currentMenu != null)
|
|
{
|
|
if (currentMenu.MenuType == 1)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
private void EditMenuNode(object obj)
|
|
{
|
|
DialogParameters param = new DialogParameters();
|
|
param.Add("type", 1);
|
|
param.Add("menu", obj as MenuItemModel);
|
|
|
|
ShowEditDialog(param);
|
|
}
|
|
|
|
private void ShowEditDialog(DialogParameters param)
|
|
{
|
|
_dialogService.ShowDialog(
|
|
"AddMenuDialog",
|
|
param,
|
|
new Action<IDialogResult>(result =>
|
|
{
|
|
if (result != null && result.Result == ButtonResult.OK)
|
|
{
|
|
System.Windows.MessageBox.Show("数据已保存", "提示");
|
|
this.Refresh();
|
|
}
|
|
}));
|
|
}
|
|
|
|
private async void DeleteMenuNode(object obj)
|
|
{
|
|
// 只要是做数据清理的时候 都做确认操作
|
|
if (System.Windows.MessageBox.Show("是否确定删除此菜单项?", "提示", System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Question) == System.Windows.MessageBoxResult.Yes)
|
|
{
|
|
await _menuBLL.DeleteMenu((obj as MenuItemModel).MenuId);
|
|
|
|
this.Refresh();
|
|
}
|
|
}
|
|
}
|
|
}
|