49017027d0
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 2m20s
- Blog management pages (posts, categories) - Content management pages (site pages, sections) - Contract management pages - Discount shop improvements (order details, product form, categories) - Wallet management pages - Commission withdrawal details/reject dialogs - Orders hub, sales reports - System hub, global search, breadcrumb - Club features page, club hub - UI/UX improvements across all pages - AppBreadcrumb, GlobalSearch components - NavMenu updates and styling
135 lines
4.8 KiB
C#
135 lines
4.8 KiB
C#
using CMSMicroservice.Protobuf.Protos.User;
|
|
using BackOffice.Common.BaseComponents;
|
|
using BackOffice.Pages.User.Components;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.JSInterop;
|
|
using MudBlazor;
|
|
using System.Text;
|
|
using DateTimeConverterCL;
|
|
using DataModel = CMSMicroservice.Protobuf.Protos.User.GetAllUserByFilterResponseModel;
|
|
|
|
namespace BackOffice.Pages.User;
|
|
public partial class UserMainPage
|
|
{
|
|
[Inject] public UserContract.UserContractClient UserContract { get; set; }
|
|
[Inject] public IJSRuntime JsRuntime { get; set; }
|
|
private bool _isLoading = true;
|
|
private MudDataGrid<DataModel> _gridData;
|
|
BasePageComponent _basePage;
|
|
private GetAllUserByFilterRequest _request = new() { Filter = new() };
|
|
private async Task<GridData<DataModel>> ServerReload(GridState<DataModel> state)
|
|
{
|
|
_request.Filter ??= new();
|
|
_request.PaginationState ??= new();
|
|
_request.PaginationState.PageNumber = state.Page + 1;
|
|
_request.PaginationState.PageSize = state.PageSize;
|
|
|
|
var result = await UserContract.GetAllUserByFilterAsync(_request);
|
|
if (result != null && result.Models != null && result.Models.Any())
|
|
{
|
|
return new GridData<DataModel>() { Items = result.Models.ToList(), TotalItems = (int)result.MetaData.TotalCount };
|
|
}
|
|
|
|
return new GridData<DataModel>();
|
|
}
|
|
private async Task OnDelete(DataModel model)
|
|
{
|
|
var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small };
|
|
bool? result = await DialogService.ShowMessageBox(
|
|
"اخطار",
|
|
$"آیا از حذف کاربر «{model.FirstName} {model.LastName}» مطمئن هستید؟",
|
|
yesText: "حذف", cancelText: "لغو",
|
|
options: options);
|
|
if (result != null && result.Value)
|
|
{
|
|
await UserContract.DeleteUserAsync(new()
|
|
{
|
|
Id = model.Id
|
|
});
|
|
ReLoadData();
|
|
}
|
|
StateHasChanged();
|
|
}
|
|
public async void ReLoadData()
|
|
{
|
|
if (_gridData != null)
|
|
await _gridData.ReloadServerData();
|
|
}
|
|
public async Task OnclickUserRoleDialog(long userid)
|
|
{
|
|
var dialog = await DialogService.ShowAsync<UserRoleDialog>($"نقش های کاربر", new DialogParameters<UserRoleDialog>() { { x => x.UserId, userid } }, new DialogOptions() { CloseButton = true, FullWidth = true, MaxWidth = MaxWidth.Small });
|
|
var result = await dialog.Result;
|
|
if (!result.Canceled)
|
|
{
|
|
ReLoadData();
|
|
Snackbar.Add("عملیات با موفقیت انجام شد", Severity.Success);
|
|
}
|
|
}
|
|
public async Task OnFilterSubmit()
|
|
{
|
|
_basePage.IsFiltered = true;
|
|
StateHasChanged();
|
|
ReLoadData();
|
|
}
|
|
|
|
public async Task OnFilterCleared()
|
|
{
|
|
_basePage.IsFiltered = false;
|
|
StateHasChanged();
|
|
_request = new() { Filter = new() { } };
|
|
ReLoadData();
|
|
}
|
|
|
|
private async Task ExportToExcel()
|
|
{
|
|
try
|
|
{
|
|
var exportRequest = new GetAllUserByFilterRequest
|
|
{
|
|
Filter = _request.Filter?.Clone() ?? new(),
|
|
PaginationState = new() { PageNumber = 1, PageSize = 1000 }
|
|
};
|
|
|
|
var result = await UserContract.GetAllUserByFilterAsync(exportRequest);
|
|
|
|
if (result?.Models == null || !result.Models.Any())
|
|
{
|
|
Snackbar.Add("دادهای برای خروجی وجود ندارد.", Severity.Info);
|
|
return;
|
|
}
|
|
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine("شناسه,موبایل,نام,نام خانوادگی,کدملی");
|
|
|
|
foreach (var u in result.Models)
|
|
{
|
|
sb.AppendLine(string.Join(",",
|
|
u.Id,
|
|
EscapeCsv(u.Mobile),
|
|
EscapeCsv(u.FirstName),
|
|
EscapeCsv(u.LastName),
|
|
EscapeCsv(u.NationalCode)));
|
|
}
|
|
|
|
var bytes = Encoding.UTF8.GetPreamble().Concat(Encoding.UTF8.GetBytes(sb.ToString())).ToArray();
|
|
var base64 = Convert.ToBase64String(bytes);
|
|
var filename = $"users-{DateTime.Now:yyyyMMddHHmmss}.csv";
|
|
|
|
await JsRuntime.InvokeVoidAsync("jsSaveAsFile", filename, base64);
|
|
Snackbar.Add("خروجی Excel (CSV) آماده شد.", Severity.Success);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Snackbar.Add($"خطا در خروجی Excel: {ex.Message}", Severity.Error);
|
|
}
|
|
}
|
|
|
|
private static string EscapeCsv(string value)
|
|
{
|
|
if (string.IsNullOrEmpty(value)) return "";
|
|
if (value.Contains(',') || value.Contains('"') || value.Contains('\n'))
|
|
return $"\"{value.Replace("\"", "\"\"")}\"";
|
|
return value;
|
|
}
|
|
}
|