using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.ObjectModel; using System.Windows.Input; using MECF.Framework.Common.ControlDataContext; using MECF.Framework.Common.DataCenter; using System.Windows.Threading; using System.Threading.Tasks; using System.Windows; using WPF.Themes.UserControls; using CyberX8_MainPages.Views; using CyberX8_MainPages.Unity; using System.Linq; using Venus_Unity; using System.IO; using CyberX8_MainPages.Roles; namespace CyberX8_MainPages.ViewModels { internal class RoleViewModel : BindableBase { #region 私有属性 /// /// 定时器 /// DispatcherTimer _timer; /// /// 用户 /// private ObservableCollection _users = new ObservableCollection(); /// /// 已选用户 /// private UserItem _selectedUser = new UserItem(); /// /// 第一次加载 /// private bool _firstLoad = true; /// /// Roles /// private ObservableCollection _roles = new ObservableCollection(); /// /// RoleDefines /// private ObservableCollection _roleDefines; /// /// 当前RoleDefine /// private RoleDefine _currentRoleDefine; /// /// 当前Menus列表 /// private ObservableCollection _currentMenus = new ObservableCollection(); #endregion #region 属性 /// /// 用户 /// public ObservableCollection Users { get { return _users; } set { SetProperty(ref _users, value);} } /// /// 已选用户 /// public UserItem SelectedUser { get { return _selectedUser; } set { SetProperty(ref _selectedUser, value);} } /// /// Roles /// public ObservableCollection Roles { get { return _roles;} set { SetProperty(ref _roles, value);} } /// /// RoleDefines /// public ObservableCollection RoleDefines { get { return _roleDefines; } set { SetProperty(ref _roleDefines, value);} } /// /// 当前RoleDefine /// public RoleDefine CurrentRoleDefine { get { return _currentRoleDefine; } set { SetProperty(ref _currentRoleDefine, value);} } /// /// 当前Menus列表 /// public ObservableCollection CurrentMenus { get { return _currentMenus; } set { SetProperty(ref _currentMenus, value); } } #endregion #region Command指令 /// /// Add Command /// public ICommand AddUserCommand { get; set; } /// /// Delete Command /// public ICommand DeleteUserCommand { get; set; } /// /// Edit Command /// public ICommand EditUserCommand { get; set; } /// /// Change Role Setting Command /// public ICommand ChangeRoleCommand { get; set; } /// /// Save Role Setting Command /// public ICommand SaveCommand { get; set; } #endregion /// /// 构造函数 /// public RoleViewModel() { AddUserCommand = new DelegateCommand(OnAddUser); DeleteUserCommand = new DelegateCommand(OnDeleteUser); ChangeRoleCommand = new DelegateCommand(OnChangeRole); SaveCommand = new DelegateCommand(OnSaveRole); EditUserCommand = new DelegateCommand(OnEditUser); string configPath = ""; if (File.Exists($"Config/UIMenu_permission.json")) { configPath = $"Config/UIMenu_permission.json"; } RoleDefines = SerializeHelper.Instance.ReadFromJsonFile>(configPath); for (int i = 0; i < RoleDefines.Count; i++) { Roles.Add(RoleDefines[i].RoleName); } } /// /// 加载数据 /// public void LoadData(string systemName) { Users.Clear(); Users = new ObservableCollection(QueryDataClient.Instance.Service.QueryAllUsers()); if (_firstLoad) { GlobalEvents.Instance.UserViewUpdateEvent += Instance_UserViewUpdateEvent; _firstLoad = false; } CurrentRoleDefine = RoleDefines[0]; } /// /// 隐藏 /// public void Hide() { } #region 指令Action /// /// 保存Role权限设置 /// private void OnSaveRole(object param) { RoleDefines[Roles.IndexOf(CurrentRoleDefine.RoleName)] = CurrentRoleDefine; SerializeHelper.Instance.WriteToJsonFile>(RoleDefines, $"Config/UIMenu_permission.json"); } /// /// 添加用户 /// /// private void OnAddUser(object param) { var _mainWindow = Application.Current.Windows.Cast().FirstOrDefault(window => window is Window) as Window; var userItem = new UserItemView(); userItem.Show(); userItem.Owner = _mainWindow; Users = new ObservableCollection(QueryDataClient.Instance.Service.QueryAllUsers()); } /// /// 删除用户 /// /// private async void OnDeleteUser(object param) { if (SelectedUser == null) { WPFMessageBox.ShowWarning("Please Select User"); return; } if (WPFMessageBox.ShowQuestion($"Delete User {SelectedUser.Name}?", "") == MessageBoxResult.Yes) { QueryDataClient.Instance.Service.DeleteUser(SelectedUser.Name); await Task.Delay(500); Users = new ObservableCollection(QueryDataClient.Instance.Service.QueryAllUsers()); } } /// /// 编辑用户 /// /// private void OnEditUser(object param) { if (SelectedUser == null || string.IsNullOrEmpty(SelectedUser.Name)) { WPFMessageBox.ShowWarning("Please Select User"); return; } var _mainWindow = Application.Current.Windows.Cast().FirstOrDefault(window => window is Window) as Window; var userItem = new UserItemView(SelectedUser); userItem.Show(); userItem.Owner = _mainWindow; } /// /// Change Role /// private void OnChangeRole(object param) { string roleName = param.ToString(); CurrentRoleDefine = RoleDefines[Roles.IndexOf(roleName)]; } #endregion private void Instance_UserViewUpdateEvent() { Users = new ObservableCollection(QueryDataClient.Instance.Service.QueryAllUsers()); } } }