RoleAddOrEditVM.cs 5.47 KB
using HandyControl.Controls;
using HHECS.BllModel;
using HHECS.Model.Dtos;
using HHECS.Model.Entities;
using HHECS.WinCommon.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HHECS.Infrastructure.CommonHelper;
using Newtonsoft.Json;
using HHECS.Application.Enums;

namespace HHECS.WinClient.View.UserPermission
{
    public class RoleAddOrEditVM : VMBase
    {
        public int Id { get; set; }
        public bool SaveEnable { get; set; } = true;
        public Role Role { get; set; }

        public string Title { get; set; }

        public List<PermissionDto> AllPermissionDtos { get; set; }
        public List<PermissionDto> TreePermissionDtos { get; set; }

        public RoleAddOrEditVM(int id)
        {
            this.Id = id;
            Init();
        }

        public void Init()
        {
            if (Id == 0)
            {
                Title = "新增";

                Role = new Role();
            }
            else
            {
                Title = "编辑";
                BllResult<Role> result = App.PermissionService.GetRoleById(Id);
                if (result.Success)
                {
                    Role = result.Data;
                }
                else
                {
                    SaveEnable = false;
                    MessageBox.Show($"未能获取到指定角色:{result.Msg}");
                }
            }

            List<Permission> tempPermissions = new List<Permission>();
            BllResult<List<Permission>> result2 = App.PermissionService.GetAllPermission("WCS");
            if (!result2.Success)
            {
                SaveEnable = false;
                MessageBox.Show("未能获取权限值");
            }
            else
            {
                tempPermissions = result2.Data.OrderBy(t => t.OrderNum).ToList();
            }

            AllPermissionDtos = tempPermissions.MapListTo<Permission, PermissionDto>().ToList();
            App.PermissionService.Combine(AllPermissionDtos.FindAll(t => t.ParentId == null), AllPermissionDtos);
            TreePermissionDtos = AllPermissionDtos.FindAll(t => t.ParentId == null).ToList();

            if (Role.Id != 0)
            {
                result2 = App.PermissionService.GetPermissionByRoleId(Role.Id);
                if (!result2.Success)
                {
                    MessageBox.Show("未能获取拥有的权限值");
                }
                else
                {
                    var hasMenuOperations = result2.Data;
                    AllPermissionDtos.ForEach(t => { t.HasPerm = hasMenuOperations.Any(i => i.Id == t.Id); });
                }
            }
        }

        internal void Save()
        {
            if (String.IsNullOrWhiteSpace(Role.RoleName))
            {
                MessageBox.Show("角色名不能为空");
                return;
            }
            var a = new
            {
                RoleCode = Role.RoleCode,
                RoleName = Role.RoleName,
            };
            BllResult<Role> result = App.PermissionService.InsertOrUpdateRoleAndPermissions(Role, AllPermissionDtos.FindAll(t => t.HasPerm == true).MapListTo<PermissionDto, Permission>().ToList());
            if (Id == 0)
            {
                //说明是新增
                if (result.Success)
                {
                    Role.Id = result.Data.Id;
                    Id = result.Data.Id;
                    App.LogService.LogOperation(Application.Enums.Title.RoleAdd, ModuleConst.Role, $"角色新增保存成功.数据:{JsonConvert.SerializeObject(a)}", result.Code.ToString(), App.User.UserCode);
                    MessageBox.Show("新增成功");
                }
                else
                {
                    App.LogService.LogOperation(Application.Enums.Title.RoleAdd, ModuleConst.Role, $"角色新增保存失败.数据:{JsonConvert.SerializeObject(a)},详情:{result.Msg}", result.Code.ToString(), App.User.UserCode);
                    MessageBox.Show("新增失败:" + result.Msg);
                }

            }
            else
            {
                //说明是更新
                if (result.Success)
                {
                    Role.Id = result.Data.Id;
                    Id = result.Data.Id;
                    App.LogService.LogOperation(Application.Enums.Title.RoleEdit, ModuleConst.Role, $"角色编辑保存成功.数据:{JsonConvert.SerializeObject(a)}", result.Code.ToString(), App.User.UserCode);
                    MessageBox.Show("更新成功");
                }
                else
                {
                    App.LogService.LogOperation(Application.Enums.Title.RoleEdit, ModuleConst.Role, $"角色编辑保存失败.数据:{JsonConvert.SerializeObject(a)},详情:{result.Msg}", result.Code.ToString(), App.User.UserCode);
                    MessageBox.Show("更新失败:" + result.Msg);
                }
            }
            Init();
        }

        internal void Check(int id)
        {
            var temp = AllPermissionDtos.Find(t => t.Id == id);
            List<int> ids = new List<int>();
            App.PermissionService.GetPermissionIds(new List<Permission> { temp }, AllPermissionDtos.MapListTo<PermissionDto, Permission>().ToList(), ids);
            AllPermissionDtos.ForEach(t =>
            {
                if (ids.Count(i => i == t.Id) > 0)
                {
                    t.HasPerm = temp.HasPerm;
                }
            });
        }
    }
}