UserPageViewModel.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using Amazon.Runtime;
  2. using HandyControl.Interactivity.Commands;
  3. using Shaker.Model;
  4. using Shaker.ViewModel;
  5. using ShakerManger.Data;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Collections.ObjectModel;
  9. using System.ComponentModel.DataAnnotations;
  10. using System.Diagnostics.CodeAnalysis;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows.Input;
  15. namespace ShakerManger.ViewModel
  16. {
  17. internal class UserPageViewModel:DisplayViewModel<ModelBase>, ISystemPageViewModel
  18. {
  19. public UserViewModel SelectedUser
  20. {
  21. get => selectedUser;
  22. set
  23. {
  24. UpdateProperty(ref selectedUser, value);
  25. OnPropertyChanged(nameof(IsLocalUser));
  26. }
  27. }
  28. public override void Init()
  29. {
  30. base.Init();
  31. var models = Sql.Default.Find<UserModel>(x => true).ToList();
  32. foreach (var model in models)
  33. {
  34. Users.Add(new UserViewModel(model));
  35. }
  36. if(Users.Count>0)
  37. {
  38. SelectedUser = Users[0];
  39. }
  40. else
  41. {
  42. SelectedUser = new UserViewModel(new UserModel());
  43. }
  44. }
  45. public AddUserViewModel AddUserViewModel { get; } = new AddUserViewModel();
  46. public ResetPassWordViewModel ResetPassWord { get; } = new ResetPassWordViewModel();
  47. public bool IsLocalUser =>!string.IsNullOrEmpty(SelectedUser?.Model?.Id);
  48. public override Type View { get; } = typeof(View.UserPageView);
  49. private bool isEnabled = true;
  50. [AllowNull]
  51. private UserViewModel selectedUser;
  52. public SystemPageType SystemPageType => SystemPageType.UserPage;
  53. public string IconPath { get; } = (string)App.Current.FindResource("UserIcon");
  54. public bool IsEnabled { get => isEnabled; set => UpdateProperty(ref isEnabled, value); }
  55. public ObservableCollection<UserViewModel> Users { get; } = new ObservableCollection<UserViewModel>();
  56. public ICommand AddUserCommand =>new DelegateCommand(AddUser);
  57. private void AddUser()
  58. {
  59. AddUserViewModel.Init();
  60. AddUserViewModel.AddUserAction = async (user) =>
  61. {
  62. Users.Add(new UserViewModel(user));
  63. if (Users.Count == 1)
  64. {
  65. SelectedUser = Users.First();
  66. }
  67. await Task.Delay(100);
  68. PromptViewModel.Default.Init();
  69. PromptViewModel.Default.Message = "添加成功";
  70. PromptViewModel.Default.IconType = IconType.Info;
  71. PromptViewModel.Default.NoVisibility = System.Windows.Visibility.Collapsed;
  72. PromptViewModel.Default.IsOpen = true;
  73. };
  74. AddUserViewModel.IsOpen = true;
  75. }
  76. public ICommand DeleteUserCommand =>new DelegateCommand(DeleteUser);
  77. private void DeleteUser()
  78. {
  79. if (!IsLocalUser) return;
  80. PromptViewModel.Default.Init();
  81. PromptViewModel.Default.Message = "确认删除用户吗?";
  82. PromptViewModel.Default.YesAction = async () =>
  83. {
  84. Sql.Default.Delete<UserModel, string>(x => x.Id, SelectedUser.Model.Id);
  85. Users.Remove(SelectedUser);
  86. if (Users.Count > 0)
  87. {
  88. SelectedUser = Users.First();
  89. }
  90. else
  91. {
  92. SelectedUser = new UserViewModel(new UserModel());
  93. }
  94. PromptViewModel.Default.Init();
  95. await Task.Delay(100);
  96. PromptViewModel.Default.Message = "删除成功";
  97. PromptViewModel.Default.IconType = IconType.Info;
  98. PromptViewModel.Default.NoVisibility = System.Windows.Visibility.Collapsed;
  99. PromptViewModel.Default.IsOpen = true;
  100. };
  101. PromptViewModel.Default.IsOpen = true;
  102. }
  103. public ICommand SaveUserCommand => new DelegateCommand(SaveUser);
  104. private void SaveUser()
  105. {
  106. if (!IsLocalUser || !SelectedUser.IsChanged) return;
  107. Sql.Default.Replace(x => x.Id, SelectedUser.Model.Id, SelectedUser.Model);
  108. SelectedUser.IsChanged = false;
  109. PromptViewModel.Default.Init();
  110. PromptViewModel.Default.Message = "保存成功";
  111. PromptViewModel.Default.IconType = IconType.Info;
  112. PromptViewModel.Default.NoVisibility = System.Windows.Visibility.Collapsed;
  113. PromptViewModel.Default.IsOpen = true;
  114. }
  115. public ICommand ResetPasswordCommand =>new DelegateCommand(ResetPassword);
  116. public void ResetPassword()
  117. {
  118. if (!IsLocalUser) return;
  119. ResetPassWord.Init();
  120. ResetPassWord.OkAction = async () =>
  121. {
  122. Sql.Default.UpDate<UserModel,string,string>(x => x.Id, SelectedUser.Model.Id, x => x.PassWord, GlobalVariable.MD5Encrypt32(ResetPassWord.FirstPassword));
  123. await Task.Delay(100);
  124. PromptViewModel.Default.Init();
  125. PromptViewModel.Default.Message = "修改成功";
  126. PromptViewModel.Default.IconType = IconType.Info;
  127. PromptViewModel.Default.NoVisibility = System.Windows.Visibility.Collapsed;
  128. PromptViewModel.Default.IsOpen = true;
  129. };
  130. ResetPassWord.IsOpen = true;
  131. }
  132. }
  133. }