DCS/ruiyiweiUX/Assets/Scripts/Views/UserControl/DeleteUserPanel.cs

288 lines
7.9 KiB
C#
Raw Permalink Normal View History

2026-06-09 13:59:11 +08:00
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>();
// }
}