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.
248 lines
8.7 KiB
C#
248 lines
8.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 BaseModule.ViewModels
|
|
{
|
|
public class RoleManagementViewModel : PageViewModelBase
|
|
{
|
|
public ObservableCollection<RoleModel> Roles { get; set; } = new ObservableCollection<RoleModel>();
|
|
public ObservableCollection<UserInfoModel> Users { get; set; } = new ObservableCollection<UserInfoModel>();
|
|
public ObservableCollection<MenuItemModel> Menus { get; set; } = new ObservableCollection<MenuItemModel>();
|
|
|
|
private RoleModel _currentRole;
|
|
public RoleModel CurrentRole
|
|
{
|
|
get => _currentRole;
|
|
set { SetProperty<RoleModel>(ref _currentRole, value); }
|
|
}
|
|
|
|
public ICommand SaveCommand
|
|
{
|
|
get => new DelegateCommand(async () =>
|
|
{
|
|
this.ShowLoading("正在保存....");
|
|
_menusids.Clear();
|
|
GetSelectedMenuIds(Menus);
|
|
await _roleBLL.Save(new RoleEntity { roleId = CurrentRole.RoleId, roleName = CurrentRole.RoleName, state = 1 },
|
|
Users.Select(u => u.UserId).ToList(),
|
|
_menusids);
|
|
|
|
this.HideLoading();
|
|
System.Windows.MessageBox.Show("数据保存完成", "提示");
|
|
this.Refresh();
|
|
});
|
|
}
|
|
|
|
public ICommand AddUserCommand
|
|
{
|
|
get => new DelegateCommand(() =>
|
|
{
|
|
DialogParameters param = new DialogParameters();
|
|
param.Add("ids", Users.Select(u => u.UserId).ToList());
|
|
|
|
_dialogService.ShowDialog(
|
|
"SelectUserDialog",
|
|
param,
|
|
new Action<IDialogResult>(result =>
|
|
{
|
|
if (result != null && result.Result == ButtonResult.OK)
|
|
{
|
|
var users = result.Parameters.GetValue<List<UserInfoModel>>("users");
|
|
users.ForEach(u => Users.Add(new UserInfoModel
|
|
{
|
|
UserId = u.UserId,
|
|
UserName = u.UserName,
|
|
RealName = u.RealName,
|
|
DeleteCommand = new DelegateCommand<object>((obj) =>
|
|
{
|
|
Users.Remove(obj as UserInfoModel);
|
|
})
|
|
}));
|
|
}
|
|
}));
|
|
});
|
|
}
|
|
|
|
Dispatcher _dispatcher;
|
|
IRoleBLL _roleBLL;
|
|
IMenuBLL _menuBLL;
|
|
IDialogService _dialogService;
|
|
public RoleManagementViewModel(
|
|
IRegionManager regionManager,
|
|
IUnityContainer unityContainer,
|
|
IEventAggregator ea,
|
|
IRoleBLL roleBLL,
|
|
IMenuBLL menuBLL,
|
|
IDialogService dialogService
|
|
)
|
|
: base(regionManager, unityContainer, ea)
|
|
{
|
|
this.PageTitle = "用户角色管理";
|
|
|
|
_dispatcher = unityContainer.Resolve<Dispatcher>();
|
|
_dialogService = dialogService;
|
|
_roleBLL = roleBLL;
|
|
_menuBLL = menuBLL;
|
|
}
|
|
|
|
public override void Refresh()
|
|
{
|
|
this.ShowLoading();
|
|
Roles.Clear();
|
|
Task.Run(async () =>
|
|
{
|
|
var roles = await _roleBLL.GetAll();
|
|
if (roles != null)
|
|
{
|
|
_dispatcher.Invoke(() =>
|
|
{
|
|
roles.ForEach(r => Roles.Add(new RoleModel
|
|
{
|
|
RoleId = r.roleId,
|
|
RoleName = r.roleName,
|
|
ItemSelectedCommand = new DelegateCommand<object>(async (obj) =>
|
|
{
|
|
this.CurrentRole = obj as RoleModel;
|
|
await LoadUsersAndMenus();
|
|
}),
|
|
DeleteCommand = new DelegateCommand<object>(DeleteItem)
|
|
}));
|
|
});
|
|
if (Roles.Count > 0)
|
|
{
|
|
Roles[0].IsSelected = true;
|
|
CurrentRole = Roles[0];
|
|
}
|
|
}
|
|
|
|
await LoadUsersAndMenus();
|
|
|
|
this.HideLoading();
|
|
});
|
|
}
|
|
|
|
private async Task LoadUsersAndMenus()
|
|
{
|
|
_dispatcher.Invoke(() =>
|
|
{
|
|
Users.Clear(); Menus.Clear();
|
|
});
|
|
if (CurrentRole != null)
|
|
{
|
|
// 获取当前角色下所有用户
|
|
var users = await _roleBLL.GetAllUsers(CurrentRole.RoleId);
|
|
_dispatcher.Invoke(() =>
|
|
{
|
|
users.ForEach(u => Users.Add(new UserInfoModel
|
|
{
|
|
UserId = u.UserId,
|
|
UserName = u.UserName,
|
|
DeleteCommand = new DelegateCommand<object>((obj) =>
|
|
{
|
|
Users.Remove(obj as UserInfoModel);
|
|
})
|
|
}));
|
|
});
|
|
// 获取当前角色下所有菜单
|
|
var alls = await _menuBLL.GetAllMenus();
|
|
var current = await _menuBLL.GetMenus(CurrentRole.RoleId);
|
|
// 递归菜单数据
|
|
|
|
_dispatcher.Invoke(() =>
|
|
{
|
|
FillMenus(alls, Menus, new MenuItemModel { MenuId = 0 }, current.Select(c => c.MenuId).ToList());
|
|
});
|
|
}
|
|
}
|
|
|
|
private void FillMenus(IList<MenuEntity> origMenus, IList<MenuItemModel> menus, MenuItemModel parent, IList<int> role_menus)
|
|
{
|
|
var sub = origMenus.Where(m => m.ParentId == parent.MenuId).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,
|
|
IsSelected = role_menus.Contains(item.MenuId),
|
|
Parent = parent
|
|
};
|
|
|
|
FillMenus(origMenus, mm.Children, mm, role_menus);
|
|
mm.HasChild = mm.Children.Count > 0;
|
|
menus.Add(mm);
|
|
}
|
|
}
|
|
}
|
|
List<int> _menusids = new List<int>();
|
|
private void GetSelectedMenuIds(IList<MenuItemModel> menus)
|
|
{
|
|
if (menus != null && menus.Count > 0)
|
|
{
|
|
menus.ToList().ForEach(m =>
|
|
{
|
|
if (m.IsSelected)
|
|
_menusids.Add(m.MenuId);
|
|
|
|
GetSelectedMenuIds(m.Children);
|
|
});
|
|
}
|
|
}
|
|
|
|
public override void AddItem()
|
|
{
|
|
_dialogService.ShowDialog(
|
|
"AddRoleDialog",
|
|
null,
|
|
new Action<IDialogResult>(result =>
|
|
{
|
|
if (result != null && result.Result == ButtonResult.OK)
|
|
{
|
|
System.Windows.MessageBox.Show("数据已保存", "提示");
|
|
this.Refresh();
|
|
}
|
|
}));
|
|
}
|
|
public override bool CanExcute()
|
|
{
|
|
return true;
|
|
}
|
|
private async void DeleteItem(object obj)
|
|
{
|
|
if (System.Windows.MessageBox.Show("是否确定删除此角色信息?", "提示", System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Question) == System.Windows.MessageBoxResult.Yes)
|
|
{
|
|
this.ShowLoading("正在删除....");
|
|
var value = obj as RoleModel;
|
|
await _roleBLL.Save(new RoleEntity { roleId = value.RoleId, roleName = value.RoleName, state = 0 },
|
|
new List<int>(), new List<int>());
|
|
|
|
this.Refresh();
|
|
}
|
|
}
|
|
}
|
|
}
|