XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEToolBox

【WPF】XFE工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Net;
using System.Windows;
using System.Windows.Controls;
using XFEToolBox.Client.Models.Server;
using XFEToolBox.Client.Utilities.Server;

namespace XFEToolBox.Client.Views.Pages.Admin;

public partial class UserManagementPage : Page
{
    public static UserManagementPage Current { get; } = new();

    public UserManagementPage() => InitializeComponent();

    private async void Page_Loaded(object sender, RoutedEventArgs e) => await RefreshAsync();
    private async void RefreshButton_Click(object sender, RoutedEventArgs e) => await RefreshAsync();

    private async void CreateButton_Click(object sender, RoutedEventArgs e)
    {
        if (string.IsNullOrWhiteSpace(NewUserName.Text) || NewPassword.Password.Length < 8)
        {
            SetStatus("请输入账号和至少 8 位密码。", true);
            return;
        }

        var response = await ClientSession.Requester.Request<AdminUserItem>(
            "adminCreateUser", NewUserName.Text.Trim(), NewPassword.Password,
            string.IsNullOrWhiteSpace(NewNickName.Text) ? NewUserName.Text.Trim() : NewNickName.Text.Trim(),
            NewIsAdmin.IsChecked == true);
        if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Created)
        {
            SetStatus(response.Message, true);
            return;
        }

        NewUserName.Clear(); NewNickName.Clear(); NewPassword.Clear(); NewIsAdmin.IsChecked = false;
        SetStatus("用户创建成功。", false);
        await RefreshAsync(keepStatus: true);
    }

    private async void ToggleRoleButton_Click(object sender, RoutedEventArgs e)
    {
        if (UserGrid.SelectedItem is not AdminUserItem user) { SetStatus("请先选择用户。", true); return; }
        await UpdateAsync(user, user.Enable, !user.IsAdministrator, string.Empty);
    }

    private async void ToggleStatusButton_Click(object sender, RoutedEventArgs e)
    {
        if (UserGrid.SelectedItem is not AdminUserItem user) { SetStatus("请先选择用户。", true); return; }
        await UpdateAsync(user, !user.Enable, user.IsAdministrator, string.Empty);
    }

    private async void ResetPasswordButton_Click(object sender, RoutedEventArgs e)
    {
        if (UserGrid.SelectedItem is not AdminUserItem user) { SetStatus("请先选择用户。", true); return; }
        if (ResetPassword.Password.Length < 8) { SetStatus("新密码至少需要 8 位。", true); return; }
        await UpdateAsync(user, user.Enable, user.IsAdministrator, ResetPassword.Password);
        ResetPassword.Clear();
    }

    private async Task UpdateAsync(AdminUserItem user, bool enabled, bool isAdministrator, string password)
    {
        var response = await ClientSession.Requester.Request<AdminUserItem>(
            "adminUpdateUser", user.Id, user.NickName, enabled, isAdministrator, password);
        if (response.StatusCode != HttpStatusCode.OK)
        {
            SetStatus(response.Message, true);
            return;
        }
        SetStatus("用户信息已更新。", false);
        await RefreshAsync(keepStatus: true);
    }

    private async Task RefreshAsync(bool keepStatus = false)
    {
        if (!keepStatus) SetStatus("正在读取用户…", false);
        try
        {
            var response = await ClientSession.Requester.Request<AdminUserItem[]>("adminUsers");
            if (response.StatusCode != HttpStatusCode.OK)
            {
                SetStatus(response.Message, true);
                return;
            }
            UserGrid.ItemsSource = response.Result ?? [];
            if (!keepStatus) SetStatus($"共 {response.Result?.Length ?? 0} 个用户。", false);
        }
        catch (Exception exception)
        {
            SetStatus(exception.Message, true);
        }
    }

    private void SetStatus(string message, bool error)
    {
        StatusText.Text = message;
        StatusText.Foreground = new System.Windows.Media.SolidColorBrush(error
            ? System.Windows.Media.Color.FromRgb(212, 84, 84)
            : System.Windows.Media.Color.FromRgb(80, 130, 100));
    }
}