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>();
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|