feat: add withdrawal requests feature and update VAT loading mechanism
Build and Deploy / build (push) Successful in 1m25s

This commit is contained in:
masoodafar-web
2025-12-20 04:03:11 +03:30
parent 9ee464b8b4
commit 025e8d3c3e
24 changed files with 961 additions and 398 deletions
@@ -0,0 +1,125 @@
@attribute [Route(RouteConstants.Profile.WithdrawalRequests)]
<PageTitle>درخواست‌های برداشت</PageTitle>
<MudContainer MaxWidth="MaxWidth.Large" Class="py-6">
<MudStack Spacing="3">
<MudStack Row="true" Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center">
<MudText Typo="Typo.h5">درخواست‌های برداشت</MudText>
<MudButton Variant="Variant.Text" StartIcon="@Icons.Material.Filled.ArrowBack" Href="@RouteConstants.Profile.Wallet">بازگشت به کیف پول</MudButton>
</MudStack>
<!-- فرم درخواست برداشت جدید -->
<MudPaper Elevation="2" Class="pa-4 rounded-lg">
<MudText Typo="Typo.h6" Class="mb-2">ثبت درخواست برداشت جدید</MudText>
<MudStack Spacing="2">
<MudTextField @bind-Value="_withdrawPayoutId"
Label="شناسه واریز (PayoutId)"
Variant="Variant.Outlined"
Type="MudBlazor.InputType.Number"
Required="true" />
<MudRadioGroup T="WithdrawalMethodClient" @bind-Value="_withdrawMethod" Row="true">
<MudRadio T="WithdrawalMethodClient" Option="@WithdrawalMethodClient.Cash" Color="Color.Primary">برداشت نقدی (نیاز به شبا)</MudRadio>
<MudRadio T="WithdrawalMethodClient" Option="@WithdrawalMethodClient.Diamond" Color="Color.Secondary">الماس/غیرنقدی</MudRadio>
</MudRadioGroup>
<MudTextField @bind-Value="_withdrawIban"
Label="شماره شبا"
Variant="Variant.Outlined"
Disabled="_withdrawMethod == WithdrawalMethodClient.Diamond"
Placeholder="IRxxxxxxxxxxxx"
Adornment="Adornment.Start"
AdornmentText="IR" />
<MudText Typo="Typo.caption" Class="mud-text-secondary">
حداقل مبلغ برداشت: @FormatPrice(_minWithdrawalAmount)
</MudText>
<MudButton Disabled="_isSubmittingWithdrawal"
Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.Outbound"
OnClick="SubmitWithdrawal">
@(_isSubmittingWithdrawal ? "در حال ثبت..." : "ثبت درخواست برداشت")
</MudButton>
</MudStack>
</MudPaper>
<!-- فیلتر وضعیت -->
<MudPaper Elevation="2" Class="pa-4 rounded-lg">
<MudStack Row="true" Spacing="2" AlignItems="AlignItems.End">
<MudSelect T="string" @bind-Value="_statusFilter" Label="فیلتر وضعیت" Variant="Variant.Outlined" Style="min-width: 180px;">
<MudSelectItem T="string" Value="@("all")">همه</MudSelectItem>
<MudSelectItem T="string" Value="@("pending")">در انتظار</MudSelectItem>
<MudSelectItem T="string" Value="@("requested")">درخواست شده</MudSelectItem>
<MudSelectItem T="string" Value="@("withdrawn")">برداشت شده</MudSelectItem>
<MudSelectItem T="string" Value="@("cancelled")">لغو شده</MudSelectItem>
</MudSelect>
<MudButton Variant="Variant.Outlined" OnClick="ApplyFilter" StartIcon="@Icons.Material.Filled.FilterList">اعمال فیلتر</MudButton>
</MudStack>
</MudPaper>
<!-- لیست درخواست‌های برداشت -->
<MudPaper Elevation="2" Class="pa-4 rounded-lg">
<MudText Typo="Typo.h6" Class="mb-3">لیست درخواست‌ها</MudText>
@if (_isLoading)
{
<MudProgressLinear Color="Color.Primary" Indeterminate="true" />
}
else if (!_withdrawals.Any())
{
<MudAlert Severity="Severity.Info" Variant="Variant.Outlined">
هنوز درخواست برداشتی ثبت نشده است.
</MudAlert>
}
else
{
<!-- نمایش دسکتاپ -->
<MudHidden Breakpoint="Breakpoint.MdAndUp" Invert="true">
<MudTable Items="_withdrawals" Dense="true" Hover="true" Striped="true">
<HeaderContent>
<MudTh>هفته</MudTh>
<MudTh>مبلغ</MudTh>
<MudTh>وضعیت</MudTh>
<MudTh>روش برداشت</MudTh>
<MudTh>تاریخ ثبت</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="هفته">@context.WeekDisplayName</MudTd>
<MudTd DataLabel="مبلغ">@FormatPrice(context.Amount)</MudTd>
<MudTd DataLabel="وضعیت">
<MudChip T="string" Color="@(ResolveStatusColor(context.Status))" Variant="Variant.Filled" Size="Size.Small">
@ResolveStatusText(context.Status)
</MudChip>
</MudTd>
<MudTd DataLabel="روش">@ResolveMethodText(context.Method)</MudTd>
<MudTd DataLabel="تاریخ">@context.Created</MudTd>
</RowTemplate>
</MudTable>
</MudHidden>
<!-- نمایش موبایل -->
<MudHidden Breakpoint="Breakpoint.MdAndUp">
<MudStack Spacing="2">
@foreach (var wd in _withdrawals)
{
<MudPaper Class="pa-3 rounded-lg" Outlined="true">
<MudStack Spacing="1">
<MudStack Row="true" Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center">
<MudText Typo="Typo.subtitle2">@wd.WeekDisplayName</MudText>
<MudChip T="string" Color="@(ResolveStatusColor(wd.Status))" Variant="Variant.Filled" Size="Size.Small">
@ResolveStatusText(wd.Status)
</MudChip>
</MudStack>
<MudStack Row="true" Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center">
<MudText Typo="Typo.h6" Color="Color.Primary">@FormatPrice(wd.Amount)</MudText>
<MudText Typo="Typo.caption" Class="mud-text-secondary">@ResolveMethodText(wd.Method)</MudText>
</MudStack>
<MudText Typo="Typo.caption" Class="mud-text-secondary">@wd.Created</MudText>
</MudStack>
</MudPaper>
}
</MudStack>
</MudHidden>
}
</MudPaper>
</MudStack>
</MudContainer>