using AntDesign.TableModels;
using EasyTemplate.Tool;
using EasyTemplate.Tool.Util;
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using SqlSugar;
namespace EasyTemplate.Blazor.Web.Components.Pages.Management.User;
public partial class User
{
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await NavigationManager.RedirectLogin(IJSRuntime);
//await Query();
var area = await _area.AsQueryable().OrderBy(x => x.Sort).ToTreeAsync(x => x.Children, x => x.ParentCode, 0, x => x.AreaCode);
Areas = area.Select(ConvertToAreaItem).ToList();
Roles = _role.GetList(x => x.Enabled == true);
Departments = _department.GetList(x => x.Enabled == true);
}
}
private CascaderNode ConvertToAreaItem(SystemArea area)
{
return new CascaderNode
{
Value = area.Id.ToString(),
Label = area.AreaName,
Children = area.Children?.Select(ConvertToAreaItem).ToArray()
};
}
///
/// 查
///
///
private async Task Query()
{
Loading = true;
RefAsync total = 0;
var list = await _repository.AsQueryable()
.LeftJoin((c, u) => c.RoleId == u.Id)
.LeftJoin((c, u, d) => c.DepartmentId == d.Id)
.WhereIF(!string.IsNullOrWhiteSpace(Q_Account), (c, u, d) => c.Account.Contains(Q_Account))
.OrderByDescending((c, u, d) => c.Id)
.Select((c, u, d) => new SystemUser {
Id = c.Id,
Avatar = c.Avatar,
Account = c.Account,
NickName = c.NickName,
RoleId = c.RoleId,
RoleName = u.Name,
DepartmentId = c.DepartmentId,
DepartmentName = d.Name,
Mobile = c.Mobile,
Email = c.Email,
Address = c.Address,
Enabled = c.Enabled,
Signature = c.Signature,
AreaIds = c.AreaIds,
CreateTime = c.CreateTime
})
.ToPageListAsync(Pi, Ps, total);
list.ForEach(x => {
if (!string.IsNullOrWhiteSpace(x.AreaIds))
{
var ids = x.AreaIds?.Split(',');
x.LastAreadId = ids[^1].Trim();
var area = _area.AsQueryable()
.Where(item => SqlFunc.SplitIn(x.AreaIds, item.Id.ToString()))
.Select(item => item.AreaName)
.ToArray();
x.Area = $"{string.Join(" ", area)} {x.Address}";
}
});
Total = total.Value;
DataSource = list;
Loading = false;
}
///
/// 增/改
///
///
///
private async Task InsertOrUpdate(SystemUser data)
{
if (data.Id == 0)
{
if (data.Password != data.ConfirmPassword)
{
MessageService.Error("两次输入密码不一致");
return false;
}
if (await _repository.AsQueryable().AnyAsync(x => x.Account.ToLower() == data.Account.ToLower() || x.NickName.ToLower() == data.NickName.ToLower()))
{
MessageService.Error("该账号名已存在");
return false;
}
return await _repository.AsInsertable(data).ExecuteCommandAsync() > 0;
}
else
{
if (await _repository.AsQueryable().AnyAsync(x => x.NickName.ToLower() == data.NickName.ToLower() && x.Id != data.Id))
{
MessageService.Error("该账号名已存在");
return false;
}
var res = await _repository.AsUpdateable()
.SetColumns(x => x.NickName == data.NickName)
.SetColumns(x => x.RoleId == data.RoleId)
.SetColumns(x => x.DepartmentId == data.DepartmentId)
.SetColumns(x => x.Mobile == data.Mobile)
.SetColumns(x => x.Email == data.Email)
.SetColumns(x => x.Address == data.Address)
.SetColumns(x => x.Enabled == data.Enabled)
.SetColumns(x => x.Signature == data.Signature)
.SetColumns(x => x.AreaIds == AreadIds)
.Where(x => x.Id == data.Id)
.ExecuteCommandAsync() > 0;
return res;
}
}
///
/// 删除
///
///
///
private async Task Delete(SystemUser row)
{
if (row.Account.ToLower().Contains("admin"))
{
MessageService.Error("不能删除超级管理员");
return;
}
if (!await Comfirm($"确认删除 [{row.Account}] ?")) return;
var flag = await _repository.AsUpdateable()
.SetColumns(x => x.IsDelete == true)
.Where(x => x.Id == row.Id)
.ExecuteCommandAsync() > 0;
_Table.ReloadData(Pi, Ps);
}
///
/// 重置查询
///
private async Task ResetQuery()
{
Q_Account = string.Empty;
Pi = 1;
await Query();
}
///
/// 表格使用它来初始化,不要在页面初始化时调用,否则会导致重复加载
///
///
///
private async Task OnChange(QueryModel query)
=> await Query();
private async Task Search()
{
Pi = 1;
await Query();
}
private void OnChange(CascaderNode[] selectedNodes)
{
AreadIds = string.Join(",", selectedNodes.Select(x => x.Value));
}
private void CheckedChanged(SystemUser row)
{
_repository.AsUpdateable()
.SetColumns(x => x.Enabled == row.Enabled)
.Where(x => x.Id == row.Id)
.ExecuteCommand();
//_table.ReloadData();
}
///
/// 注入实例
///
[Inject] private SqlSugarRepository _repository { get; set; }
///
///
///
[Inject] private SqlSugarRepository _role { get; set; }
///
///
///
[Inject] private SqlSugarRepository _area { get; set; }
///
///
///
[Inject] private SqlSugarRepository _department { get; set; }
///
///
///
[Inject] NavigationManager NavigationManager { get; set; }
///
///
///
[Inject] IJSRuntime IJSRuntime { get; set; }
///
/// 账号
///
private string Q_Account { get; set; }
///
///
///
private string AreadIds { get; set; }
///
///
///
private List Areas { get; set; } = new List();
///
///
///
private ITable _Table;
///
///
///
private IEnumerable SelectedRows = [];
///
///
///
private List DataSource;
///
///
///
private int Pi = 1;
///
///
///
private int Ps = 20;
///
///
///
private int Total;
///
///
///
private List Roles;
///
///
///
private List Departments;
///
///
///
private bool Loading = false;
///
///
///
Func ShowTotal => x => $"总共 {Total} 条";
}