20230201_145_upperpc/InSituLaboratory/ViewModels/Pages/Dialogs/SelectRoleViewModel.cs
2024-03-11 13:12:02 +08:00

104 lines
2.9 KiB
C#

using InSituLaboratory.Entities;
using InSituLaboratory.IService;
using InSituLaboratory.Models;
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;
namespace InSituLaboratory.ViewModels.Pages.Dialogs
{
public class SelectRoleViewModel : DialogViewModelBase
{
private List<RoleModel> _roles;
public ObservableCollection<RoleModel> Roles { get; set; } =
new ObservableCollection<RoleModel>();
private string _fileterText;
public string FilterText
{
get { return _fileterText; }
set
{
_fileterText = value;
Roles.Clear();
var us = _roles.Where(u =>
string.IsNullOrEmpty(value) ||
u.RoleName.Contains(value) ||
u.RoleDesc.Contains(value)
).ToList();
us.ForEach(u => Roles.Add(u));
}
}
IRoleService _roleService;
IUserService _userService;
public SelectRoleViewModel(IRoleService roleService, IUserService userService)
{
_roleService = roleService;
_userService = userService;
}
private int _uid = 0;
public override void OnDialogOpened(IDialogParameters parameters)
{
this.Title = "选择角色";
var model = parameters.GetValue<UserModel>("model");
_uid = model.UserId;
var rids = model.Roles.Select(r => r.RoleId).ToList();
// 获取所有待选角色
var rs = _roleService.GetRoles("").ToList();
_roles = rs.Select(r => new RoleModel
{
IsSelected = rids.Contains(r.RoleId),
RoleId = r.RoleId,
RoleName = r.RoleName,
RoleDesc = r.RoleDesc
}).ToList();
_roles.ForEach(r => Roles.Add(r));
}
public override void DoSave()
{
try
{
// 这个信息是基于用户来获取
var user = _userService.Find<SysUser>(_uid);
if (user == null) return;
user.Roles.Clear();
foreach (var role in _roles)
{
if (!role.IsSelected) continue;
user.Roles.Add(new RoleUser
{
RoleId = role.RoleId,
UserId = _uid,
User = user
});
}
_userService.Update(user);
base.DoSave();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "提示");
}
}
}
}