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

288 lines
7.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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