PermissionVM.cs 8.16 KB
using HandyControl.Controls;
using HHECS.Application.Enums;
using HHECS.BllModel;
using HHECS.Model.Entities;
using HHECS.WinCommon.ViewModel;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.WinClient.View.UserPermission
{
    public class PermissionVM : VMBase
    {
        /// <summary>
        /// 对应到右侧权限属性
        /// </summary>
        public Permission Permission { get; set; }

        /// <summary>
        /// 对应到选中的permission
        /// </summary>
        public Permission SelectedPermission { get; set; }

        /// <summary>
        /// 对应到左侧权限列表
        /// </summary>
        public List<Permission> Permissions { get; set; }

        public List<Permission> AllPermissions { get; set; }

        /// <summary>
        /// 给权限类型下拉框提供数据
        /// </summary>
        public Dict PermissionDict { get; set; }

        /// <summary>
        /// 指示新增与删除是否可用
        /// </summary>
        public bool Enable { get; set; } = true;

        public PermissionVM()
        {
            Init();
        }

        public void Init()
        {
            var result = App.PermissionService.GetAllPermission("WCS");
            if (!result.Success)
            {
                Enable = false;
                MessageBox.Show($"获取操作权限和菜单出错,请尝试刷新处理:{result.Msg}");
                return;
            }
            AllPermissions = result.Data.OrderBy(t => t.OrderNum).ToList();
            //组合层级菜单
            App.PermissionService.Combine(AllPermissions.FindAll(t => t.ParentId == null), result.Data);
            Permissions = AllPermissions.FindAll(t => t.ParentId == null);
            BllResult<Dict> a = App.SystemService.GetDictWithDetails(t => t.Code == DictConst.Permission.ToString());
            if (a.Success)
            {
                PermissionDict = a.Data;
                Permission = new Permission();
            }
            else
            {
                Enable = false;
                MessageBox.Show($"获取菜单类型出错,请尝试刷新处理:{result.Msg}");
            }
        }

        internal void Save()
        {
            if (Enum.TryParse(Permission.PermissionType, out PermissionType permissionType))
            {
                switch (permissionType)
                {
                    case PermissionType.Menu:
                        Permission.Icon = "pack://application:,,,/HHECS.WinCommon;component/Resource/Content/Icon/菜单.png";
                        break;
                    case PermissionType.Catalog:
                        Permission.Icon = "pack://application:,,,/HHECS.WinCommon;component/Resource/Content/Icon/目录.png";
                        break;
                    case PermissionType.Button:
                        Permission.Icon = "pack://application:,,,/HHECS.WinCommon;component/Resource/Content/Icon/按钮.png";
                        break;
                    case PermissionType.Module:
                        Permission.Icon = "pack://application:,,,/HHECS.WinCommon;component/Resource/Content/Icon/模块.png";
                        break;
                    default:
                        Permission.Icon = "pack://application:,,,/HHECS.WinCommon;component/Resource/Content/Icon/未识别.png";
                        break;
                }
            }
            else
            {
                Permission.Icon = "pack://application:,,,/HHECS.WinCommon;component/Resource/Content/Icon/未识别.png";
            }
            var a = new
            {
                PermissionCode = Permission.PermissionCode,
                PermissionName = Permission.PermissionName,
            };
            var id = Permission.Id;
            BllResult<Permission> result = App.PermissionService.InsertOrUpdatePermission(Permission);
            if (id == 0)
            {
                //新增
                if (result.Success)
                {
                    App.LogService.LogOperation(Title.PermissionAdd, ModuleConst.Permission, $"权限新增保存成功.数据:{JsonConvert.SerializeObject(a)}", result.Code.ToString(), App.User.UserCode);
                    MessageBox.Show("新增成功");
                    Permission.Id = result.Data.Id;
                    if (SelectedPermission != null)
                    {
                        SelectedPermission.Childrens.Add(Permission);
                    }
                }
                else
                {
                    App.LogService.LogOperation(Title.PermissionAdd, ModuleConst.Permission, $"权限新增保存失败.数据:{JsonConvert.SerializeObject(a)},详情:{result.Msg}", result.Code.ToString(), App.User.UserCode);
                    MessageBox.Show("新增失败" + result.Msg);
                }
            }
            else
            {
                //更新
                if (result.Success)
                {
                    App.LogService.LogOperation(Title.PermissionAdd, ModuleConst.Permission, $"权限编辑保存成功.数据:{JsonConvert.SerializeObject(a)}", result.Code.ToString(), App.User.UserCode);
                    MessageBox.Show("更新成功");
                }
                else
                {
                    App.LogService.LogOperation(Title.PermissionAdd, ModuleConst.Permission, $"权限编辑保存成功.数据:{JsonConvert.SerializeObject(a)}", result.Code.ToString(), App.User.UserCode);
                    MessageBox.Show("更新失败" + result.Msg);
                }

            }
            Init();
        }

        internal void Delete(Permission permission)
        {
            if (permission == null)
            {
                MessageBox.Show("请先选中节点");
            }
            else
            {

                if (MessageBox.Show("是否确认删除?", "警告", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                {
                    //级联查出所有待删的Id;
                    List<int> ids = new List<int>();
                    ids.Add(permission.Id);
                    App.PermissionService.GetPermissionIds(new List<Permission>() { permission }, AllPermissions, ids); ;
                    BllResult result = App.PermissionService.DeletePermissionByIds(ids);
                    if (result.Success)
                    {
                        App.LogService.LogOperation(Title.PermissionDelete, ModuleConst.Permission, $"权限删除成功.数据:{JsonConvert.SerializeObject(new { Id = permission.Id, RoleCode = permission.PermissionCode, RoleName = permission.PermissionName })}", result.Code.ToString(), App.User.UserCode);
                        MessageBox.Show("删除成功");
                    }
                    else
                    {
                        App.LogService.LogOperation(Title.PermissionDelete, ModuleConst.Permission, $"权限删除失败.数据:{JsonConvert.SerializeObject(new { Id = permission.Id, RoleCode = permission.PermissionCode, RoleName = permission.PermissionName })}.详情:{result.Msg}", result.Code.ToString(), App.User.UserCode);
                        MessageBox.Show("删除失败" + result.Msg);
                    }
                }
                Init();
            }
        }

        internal void BeginAdd()
        {
            if (SelectedPermission?.PermissionType == PermissionType.Button.ToString())
            {
                MessageBox.Show("按钮类型无法增加子节点");
                return;
            }
            var temp = new Permission();
            temp.Id = 0;
            temp.PermissionName = "";
            temp.ParentId = SelectedPermission?.Id;
            temp.Parent = SelectedPermission;
            temp.Url = "";
            temp.PermissionType = "";
            temp.Perms = "";
            temp.Remark = "";
            temp.OrderNum = 0;
            temp.Created = DateTime.Now;
            temp.CreatedBy = App.User?.UserCode;
            temp.Updated = null;
            temp.UpdatedBy = "";

            Permission = temp;
        }
    }
}