288 lines
7.9 KiB
C#
288 lines
7.9 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
/// <summary>
|
||
/// 删除用户面板
|
||
/// 显示用户列表并提供删除功能,包含二次确认
|
||
/// </summary>
|
||
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<UserDeleteItem> _userItems = new List<UserDeleteItem>();
|
||
|
||
public override void Init()
|
||
{
|
||
_authService = ServiceLocator.Get<IAuthenticationService>();
|
||
|
||
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<UserDeleteItem>();
|
||
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<DeleteUserPanel>();
|
||
// }
|
||
}
|
||
|