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