using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; /// /// 删除用户面板 /// 显示用户列表并提供删除功能,包含二次确认 /// public class DeleteUserPanel : BasePanel { [Header("用户列表")] public ScrollableListView UserListView; // 滚动用户列表 public GameObject UserItemPrefab; // 用户列表项预制件 [Header("用户详情显示")] public TextMeshProUGUI SelectedUserText; // 选中用户显示 public TextMeshProUGUI UserDetailsText; // 用户详细信息 // public Image UserAvatarImage; // 用户头像(可选) [Header("操作按钮")] public Button HomeButton; public Button DeleteButton; // 删除按钮 public Button RefreshButton; // 刷新按钮 // public Button CancelButton; // 取消按钮 public Button BackButton; // 返回按钮 [Header("状态显示")] public TextMeshProUGUI StatusText; // 状态文本 private IAuthenticationService _authService; private UserInfo _selectedUser; private List _userItems = new List(); public override void Init() { _authService = ServiceLocator.Get(); InitializeUI(); LoadUserList(); } private void InitializeUI() { // 初始化按钮事件 if (HomeButton != null) { HomeButton.onClick.AddListener(() => { ReturnToHome(); }); } if (DeleteButton != null) { DeleteButton.onClick.AddListener(OnDeleteButtonClicked); DeleteButton.interactable = false; // 初始禁用 } if (RefreshButton != null) { RefreshButton.onClick.AddListener(OnRefreshButtonClicked); } // if (CancelButton != null) // { // CancelButton.onClick.AddListener(OnCancelButtonClicked); // } if (BackButton != null) { BackButton.onClick.AddListener(OnBackButtonClicked); } // 初始化用户列表 if (UserListView != null && UserItemPrefab != null) { UserListView.ItemPrefab = UserItemPrefab; UserListView.ItemHeight = 60f; UserListView.ItemSpacing = 5f; } SetStatus("请选择要删除的用户", true); ClearSelectedUser(); } private void LoadUserList() { if (_authService == null) { SetStatus("认证服务不可用", false); return; } // 清空现有列表 if (UserListView != null) { UserListView.ClearItems(); } _userItems.Clear(); // 获取所有用户 var users = _authService.GetAllUsers(); if (users == null || users.Count == 0) { SetStatus("没有可删除的用户", false); return; } // 添加用户到列表(排除当前登录用户和admin) string currentUser = _authService.CurrentUsername; foreach (var user in users) { // 不允许删除admin用户和当前登录用户 if (user.Username.Equals("admin", System.StringComparison.OrdinalIgnoreCase) || user.Username.Equals(currentUser, System.StringComparison.OrdinalIgnoreCase)) { continue; } AddUserToList(user); } if (_userItems.Count == 0) { SetStatus("没有可删除的用户", false); } else { SetStatus($"找到 {_userItems.Count} 个可删除的用户", true); } } private void AddUserToList(UserInfo user) { if (UserListView == null) return; var listItem = UserListView.AddItem(user); if (listItem != null) { var userItem = listItem.gameObject.GetComponent(); userItem.Initialize(user, this); _userItems.Add(userItem); } } public void OnUserSelected(UserInfo user) { _selectedUser = user; UpdateSelectedUserDisplay(); if (DeleteButton != null) { DeleteButton.interactable = true; } } private void UpdateSelectedUserDisplay() { if (_selectedUser == null) { ClearSelectedUser(); return; } if (SelectedUserText != null) { SelectedUserText.text = $"选中用户: {_selectedUser.Username}"; } if (UserDetailsText != null) { var roleText = _selectedUser.Role == UserRole.Admin ? "管理员" : "普通用户"; var details = $"用户名: {_selectedUser.Username}\n" + $"角色: {roleText}\n" + $"创建时间: {_selectedUser.CreatedTime:yyyy-MM-dd HH:mm}\n" + $"最后登录: {(_selectedUser.LastLoginTime != default ? _selectedUser.LastLoginTime.ToString("yyyy-MM-dd HH:mm") : "从未登录")}"; UserDetailsText.text = details; } } private void ClearSelectedUser() { _selectedUser = null; if (SelectedUserText != null) { SelectedUserText.text = "未选择用户"; } if (UserDetailsText != null) { UserDetailsText.text = "请从下方列表选择要删除的用户"; } if (DeleteButton != null) { DeleteButton.interactable = false; } } private void OnDeleteButtonClicked() { if (_selectedUser == null) { SetStatus("请先选择要删除的用户", false); return; } string username = _selectedUser.Username; // 不能删除admin用户和当前用户 if (username.Equals("admin", System.StringComparison.OrdinalIgnoreCase)) { SetStatus("不能删除管理员账户", false); return; } if (username.Equals(_authService.CurrentUsername, System.StringComparison.OrdinalIgnoreCase)) { SetStatus("不能删除当前登录用户", false); return; } // 显示删除确认对话框 ConfirmDialog.ShowDeleteConfirm( _selectedUser.Username, () => DeleteUser(_selectedUser.Username), () => Debug.Log("取消删除用户") ); } private void DeleteUser(string username) { if (_authService == null) { SetStatus("认证服务不可用", false); return; } bool success = _authService.RemoveUser(username); if (success) { SetStatus($"用户 '{username}' 删除成功", true); Debug.Log($"成功删除用户: {username}"); // 刷新列表 LoadUserList(); ClearSelectedUser(); } else { SetStatus($"删除用户 '{username}' 失败", false); } } private void OnRefreshButtonClicked() { LoadUserList(); ClearSelectedUser(); } private void OnCancelButtonClicked() { ClosePanel(); } private void OnBackButtonClicked() { ClosePanel(); } private void SetStatus(string message, bool isSuccess) { if (StatusText != null) { StatusText.text = message; StatusText.color = isSuccess ? Color.green : Color.red; } } // public void ClosePanel() // { // UIManager.Instance.HidePanel(); // } }