using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; /// /// 用户管理面板 /// 提供用户的增删改查功能,仅管理员可访问 /// public class UserManagementPanel : BasePanel { [Header("用户列表")] public Transform UserListParent; // 用户列表的父对象 public GameObject UserItemPrefab; // 用户项预制体 public ScrollRect UserScrollRect; // 滚动区域 [Header("添加用户")] public TMP_InputField NewUsernameInput; // 新用户名输入 public TMP_InputField NewPasswordInput; // 新密码输入 public TMP_Dropdown NewRoleDropdown; // 角色选择下拉框 public Button AddUserButton; // 添加用户按钮 [Header("操作按钮")] public Button RefreshButton; // 刷新按钮 public Button HomeButton; // 主页按钮 public Button BackButton; // 返回按钮 [Header("状态显示")] public TextMeshProUGUI StatusText; // 状态文本 public TextMeshProUGUI TotalCountText; // 总用户数显示 private IAuthenticationService _authService; private List _currentUsers = new List(); private List _userItemObjects = new List(); public override void Init() { _authService = ServiceLocator.Get(); // 检查权限 if (_authService.CurrentRole != UserRole.Admin) { SetStatus("权限不足:只有管理员可以访问用户管理", false); return; } InitializeUI(); LoadUserList(); } private void InitializeUI() { // 初始化角色下拉框 if (NewRoleDropdown != null) { NewRoleDropdown.ClearOptions(); NewRoleDropdown.AddOptions(new List { "普通用户", "管理员" }); NewRoleDropdown.value = 0; // 默认选择普通用户 } // 设置密码输入框为密码模式 if (NewPasswordInput != null) { NewPasswordInput.contentType = TMP_InputField.ContentType.Password; } // 设置按钮事件 if (AddUserButton != null) { AddUserButton.onClick.AddListener(OnAddUserClicked); } if (RefreshButton != null) { RefreshButton.onClick.AddListener(LoadUserList); } if (HomeButton != null) { HomeButton.onClick.AddListener(() => { ReturnToHome(); }); } if (BackButton != null) { BackButton.onClick.AddListener(() => { ClosePanel(); }); } // 设置输入验证 SetupInputValidation(); } private void SetupInputValidation() { if (NewUsernameInput != null) { NewUsernameInput.onValueChanged.AddListener(OnInputChanged); // 设置自定义键盘 CustomKeyboardManager.SetupInputField(NewUsernameInput, KeyboardLayout.Default, (newValue) => { NewUsernameInput.text = newValue; OnInputChanged(newValue); }, clearOnFirstInput: true); } if (NewPasswordInput != null) { NewPasswordInput.onValueChanged.AddListener(OnInputChanged); // 设置自定义键盘(密码模式) CustomKeyboardManager.SetupInputField(NewPasswordInput, KeyboardLayout.Default, (newValue) => { NewPasswordInput.text = newValue; OnInputChanged(newValue); }, clearOnFirstInput: true); } } private void OnInputChanged(string value) { ValidateAddUserInput(); } private bool ValidateAddUserInput() { string username = NewUsernameInput?.text ?? ""; string password = NewPasswordInput?.text ?? ""; bool isValid = !string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password) && password.Length >= 6; if (AddUserButton != null) { AddUserButton.interactable = isValid; } if (!isValid) { if (string.IsNullOrEmpty(username)) { SetStatus("请输入用户名", false); } else if (string.IsNullOrEmpty(password)) { SetStatus("请输入密码", false); } else if (password.Length < 6) { SetStatus("密码至少需要6个字符", false); } } else { SetStatus("输入验证通过", true); } return isValid; } private void LoadUserList() { if (_authService == null) { SetStatus("认证服务不可用", false); return; } // 清空现有列表 ClearUserList(); // 获取所有用户 _currentUsers = _authService.GetAllUsers(); if (_currentUsers == null) { SetStatus("获取用户列表失败", false); return; } // 更新总数显示 if (TotalCountText != null) { TotalCountText.text = $"总用户数: {_currentUsers.Count}"; } // 创建用户项 foreach (var user in _currentUsers) { CreateUserItem(user); } SetStatus($"成功加载 {_currentUsers.Count} 个用户", true); } private void CreateUserItem(UserInfo user) { if (UserItemPrefab == null || UserListParent == null) return; GameObject userItem = Instantiate(UserItemPrefab, UserListParent); _userItemObjects.Add(userItem); // 查找用户项组件 var userItemComponent = userItem.GetComponent(); if (userItemComponent != null) { userItemComponent.Initialize(user, OnDeleteUser, OnResetPassword); } else { // 如果没有 UserItem 组件,直接设置文本 var nameText = userItem.transform.Find("UsernameText")?.GetComponent(); var roleText = userItem.transform.Find("RoleText")?.GetComponent(); var timeText = userItem.transform.Find("TimeText")?.GetComponent(); if (nameText != null) nameText.text = user.Username; if (roleText != null) roleText.text = user.Role == UserRole.Admin ? "管理员" : "普通用户"; if (timeText != null) timeText.text = user.CreatedTime.ToString("yyyy-MM-dd HH:mm"); // 设置删除按钮 var deleteButton = userItem.transform.Find("DeleteButton")?.GetComponent