UserAddOrEditVM.cs 4.02 KB
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using HHECS.RobotTool.Model;
using System.Collections.ObjectModel;
using System.Windows;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.RobotTool.ViewModel.AccountVM
{
    public partial class UserAddOrEditVM : ObservableObject
    {
        [ObservableProperty]
        private User user = new User();

        [ObservableProperty]
        private ObservableCollection<Role> roles = new ObservableCollection<Role>();

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

        private bool IsEdit = false;

        private readonly IFreeSql _freeSql;

        public UserAddOrEditVM(IFreeSql freeSql)
        {
            _freeSql = freeSql;
        }

        public void InitialData(int? userId = null)
        {
            try
            {
                //所有的角色
                var roles = _freeSql.Queryable<Role>().ToList();
                User.Enable = true;
                if (userId != null)
                {
                    Owner.Title = "修改用户信息";
                    IsEdit = true;
                    User = _freeSql.Queryable<User>().Where(x => x.Id.Equals(userId)).First();
                    var roleIds = _freeSql.Queryable<UserRole>().Where(x => x.UserId == userId).ToList(x => x.RoleId);
                    roles.ForEach(x => x.IsSelected = roleIds.Contains(x.Id));
                }
                Roles = new ObservableCollection<Role>(roles);
            }
            catch (Exception ex)
            {
                MessageBox.Error($"初始化数据失败.{ex.Message}");
            }
        }

        [RelayCommand]
        public void Save()
        {
            try
            {
                if (string.IsNullOrWhiteSpace(User.Account))
                {
                    MessageBox.Warning($"用户账号不能为空!");
                    return;
                }

                if (string.IsNullOrWhiteSpace(User.UserName))
                {
                    MessageBox.Warning($"用户名称不能为空!");
                    return;
                }

                if (string.IsNullOrWhiteSpace(User.Password))
                {
                    MessageBox.Warning($"用户密码不能为空!");
                    return;
                }

                if (User.Password.Length < 6 || User.Password.Length > 16)
                {
                    MessageBox.Warning($"用户密码长度必须在6~16位之间!");
                    return;
                }

                var userId = User.Id;
                if (!IsEdit)
                {
                    User.Created = DateTime.Now;
                    userId = (int)_freeSql.Insert(User).ExecuteIdentity();
                }
                else
                {
                    User.Updated = DateTime.Now;
                    _freeSql.Update<User>().SetSource(User).ExecuteAffrows();
                }
                var userRoleIds = _freeSql.Queryable<UserRole>().Where(x => x.UserId == userId).ToList(x => x.RoleId);
                //新增
                var userRoleTemp1 = Roles.Where(x => x.IsSelected && !userRoleIds.Contains(x.Id)).Select(x => new UserRole
                {
                    UserId = userId,
                    RoleId = x.Id,
                    Created = DateTime.Now,
                }).ToList();
                _freeSql.Insert(userRoleTemp1).ExecuteAffrows();
                //删除
                var userRoleTemp2 = Roles.Where(x => !x.IsSelected && userRoleIds.Contains(x.Id)).Select(x => x.Id).ToList();
                _freeSql.Delete<UserRole>().Where(x => userRoleTemp2.Contains(x.RoleId) && x.UserId == userId).ExecuteAffrows();

                Owner.DialogResult = true;
                MessageBox.Success("操作成功");
            }
            catch (Exception ex)
            {
                MessageBox.Error($"操作失败.{ex.Message}");
            }
        }

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