LoginVM.cs 12.1 KB
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using HHECS.RobotTool.Model;
using HHECS.RobotTool.View.AccountView;
using HHECS.RobotTool.View.CommunicationView;
using HHECS.RobotTool.View.EquipmentView;
using HHECS.RobotTool.View.RobotConfigView;
using RobotTool;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.RobotTool.ViewModel.AccountVM
{
    public partial class LoginVM : ObservableObject
    {
        [ObservableProperty]
        private string account = null!;

        private readonly IFreeSql _freeSql;

        public LoginView Owner { get; set; } = null!;

        public LoginVM(IFreeSql freeSql)
        {
            _freeSql = freeSql;
            InitialSeedData();
        }

        [RelayCommand]
        private void Commint()
        {
            try
            {
                if (string.IsNullOrWhiteSpace(Account))
                {
                    MessageBox.Warning("账号不能为空!");
                    return;
                }

                if (string.IsNullOrWhiteSpace(Owner.txt_pwd.Password))
                {
                    MessageBox.Warning("密码不能为空!");
                    return;
                }

                var password = Owner.txt_pwd.Password;
                var user = _freeSql.Queryable<User>().Where(x => x.Account.ToLower() == Account.ToLower() && x.Password == password).First();
                if (user == null)
                {
                    MessageBox.Error($"用户名或密码不正确!", "登录失败");
                    return;
                }

                if (!user.Enable)
                {
                    MessageBox.Warning($"用户“{Account}”已被禁用,请联系管理员处理!", "登录失败");
                    return;
                }
                App.SetCurrentUser(user);
                var mainView = new MainWindow();
                mainView.Show();
                Owner.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Error($"登录失败:{ex.Message}");
            }
        }

        [RelayCommand]
        private void Cancel()
        {
            Owner.Close();
        }

        /// <summary>
        /// 初始化种子数据
        /// </summary>
        private void InitialSeedData()
        {
            try
            {
                const string roleDefault = "Administrator";
                const string userDefault = "Admin";

                //权限为空,需要初始化权限数据
                if (!_freeSql.Queryable<Permission>().Any())
                {
                    var buttonDefaults = new List<Permission>
                    {
                        new Permission
                        {
                            Code = ButtonType.QueryBtn.ToString(),
                            Name = "查询",
                            PermissionType = PermissionType.Button,
                        },
                        new Permission
                        {
                            Code = ButtonType.CreateBtn.ToString(),
                            Name = "新增",
                            PermissionType = PermissionType.Button,
                        },
                        new Permission
                        {
                            Code = ButtonType.EditBtn.ToString(),
                            Name = "编辑",
                            PermissionType = PermissionType.Button,
                        },
                        new Permission
                        {
                            Code = ButtonType.DeleteBtn.ToString(),
                            Name = "删除",
                            PermissionType = PermissionType.Button,
                        },
                        new Permission
                        {
                            Code = ButtonType.BatchDeleteBtn.ToString(),
                            Name = "批量删除",
                            PermissionType = PermissionType.Button,
                        }
                    };

                    var permissions = new List<Permission>
                    {
                        new Permission
                        {
                            Code = "System",
                            Name = "系统管理",
                            Children = new List<Permission>
                            {
                                new Permission
                                {
                                    Code = typeof(UserView).Name,
                                    Name = "用户管理",
                                    ViewName = typeof(UserView).FullName!,
                                    PermissionType = PermissionType.MenuItem,
                                    Children = buttonDefaults,
                                },
                                new Permission
                                {
                                    Code = typeof(RoleView).Name,
                                    Name = "角色管理",
                                    ViewName = typeof(RoleView).FullName!,
                                    PermissionType = PermissionType.MenuItem,
                                    Children = buttonDefaults,
                                },
                            }
                        },
                        new Permission
                        {
                            Code = "Equipment",
                            Name = "设备管理",
                            Children = new List<Permission>
                            {
                                new Permission
                                {
                                    Code = typeof(EquipmentView).Name,
                                    Name = "设备信息",
                                    ViewName = typeof(EquipmentView).FullName!,
                                    PermissionType = PermissionType.MenuItem,
                                    Children = new List<Permission>
                                    {
                                        new Permission
                                        {
                                            Code = ButtonType.QueryBtn.ToString(),
                                            Name = "查询",
                                            PermissionType = PermissionType.Button,
                                        },
                                        new Permission
                                        {
                                            Code = ButtonType.CreateBtn.ToString(),
                                            Name = "新增",
                                            PermissionType = PermissionType.Button,
                                        },
                                        new Permission
                                        {
                                            Code = ButtonType.EditBtn.ToString(),
                                            Name = "编辑",
                                            PermissionType = PermissionType.Button,
                                        },
                                        new Permission
                                        {
                                            Code = ButtonType.DeleteBtn.ToString(),
                                            Name = "删除",
                                            PermissionType = PermissionType.Button,
                                        },
                                        new Permission
                                        {
                                            Code = ButtonType.BatchDeleteBtn.ToString(),
                                            Name = "批量删除",
                                            PermissionType = PermissionType.Button,
                                        },
                                        new Permission
                                        {
                                            Code = ButtonType.DetailBtn.ToString(),
                                            Name = "详情",
                                            PermissionType = PermissionType.Button,
                                        },
                                    },
                                },
                                new Permission
                                {
                                    Code = typeof(CommunicationView).Name,
                                    Name = "通讯配置",
                                    ViewName = typeof(CommunicationView).FullName!,
                                    PermissionType = PermissionType.MenuItem,
                                    Children = buttonDefaults,
                                },
                                new Permission
                                {
                                    Code = typeof(RobotConfigView).Name,
                                    Name = "基础参数",
                                    ViewName = typeof(RobotConfigView).FullName!,
                                    PermissionType = PermissionType.MenuItem,
                                    Children = buttonDefaults,
                                }
                            }
                        }
                    };
                    AddPermission(permissions, userDefault);
                }

                //角色为空,需要初始化角色数据
                if (!_freeSql.Queryable<Role>().Any())
                {
                    var role = new Role
                    {
                        Code = roleDefault,
                        Name = "超级管理员",
                        Created = DateTime.Now,
                        CreatedBy = userDefault
                    };
                    var roleId = _freeSql.Insert(role).ExecuteIdentity();
                    var permissions = _freeSql.Queryable<Permission>().ToList();
                    var rolePermission = permissions.Select(x => new RolePermission
                    {
                        PermissionId = x.Id,
                        RoleId = (int)roleId,
                        Created = DateTime.Now,
                        CreatedBy = userDefault,
                    }).ToList();
                    _freeSql.Insert(rolePermission).ExecuteAffrows();
                }

                //用户为空,需要初始化用户数据
                if (!_freeSql.Queryable<User>().Any())
                {
                    var user = new User
                    {
                        Account = userDefault,
                        UserName = "管理员",
                        Password = "123456",
                        Enable = true,
                        Created = DateTime.Now,
                        CreatedBy = userDefault,
                    };
                    var userId = _freeSql.Insert(user).ExecuteIdentity();
                    var roleId = _freeSql.Queryable<Role>().Where(x => x.Code == roleDefault).First(x => x.Id);
                    if (roleId != default)
                    {
                        var userRole = new UserRole
                        {
                            UserId = (int)userId,
                            RoleId = roleId,
                            Created = DateTime.Now,
                            CreatedBy = userDefault,
                        };
                        _freeSql.Insert(userRole).ExecuteAffrows();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Error($"初始化种子数据出现异常:{ex.Message}");
            }
        }

        private void AddPermission(IEnumerable<Permission> permissions, string user, int? parentId = null)
        {
            foreach (var item in permissions)
            {
                item.ParentId = parentId;
                item.Created = DateTime.Now;
                item.CreatedBy = user;
                var id = _freeSql.Insert(item).ExecuteIdentity();
                AddPermission(item.Children, user, (int?)id);
            }
        }
    }
}