feat: full FrontOffice updates - discount store, blog, payment gateway, UI improvements
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 4m55s

- Discount store pages (products, cart, orders, order detail)
- Blog pages and services
- Payment gateway callback page
- AppImage component, EmptyState, LoadingState, PageHeader
- DiscountCartService, DiscountOrderService, DiscountProductService
- BlogCategoryService, BlogPostService, SitePageService, ImageCacheService
- PhoneVerifyForm component
- Profile Hub page
- UI/UX improvements across all pages
- landing.js for homepage
- Config and routing updates
This commit is contained in:
masoodafar-web
2026-02-16 00:51:39 +03:30
parent f0d1156457
commit 6db83ccd90
104 changed files with 7668 additions and 1370 deletions
@@ -3,15 +3,13 @@
@using MudBlazor
@inject ClubConfigurationService ClubConfigService
@inject IDialogService DialogService
@inject IJSRuntime JS
<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.Club.Membership">بازگشت</MudButton>
</MudStack>
<PageHeader Title="ویژگی‌های باشگاه مشتریان" BackHref="@RouteConstants.Club.Membership" />
<!-- توضیحات کلی باشگاه -->
<MudPaper Elevation="2" Class="pa-4 rounded-lg">
@@ -30,13 +28,13 @@
@if (_isLoading)
{
<MudProgressLinear Color="Color.Primary" Indeterminate="true" />
<LoadingState Message="در حال دریافت ویژگی‌ها..." />
}
else if (_features == null || !_features.Any())
{
<MudAlert Severity="Severity.Info">
هنوز ویژگی‌ای برای شما فعال نشده است.
</MudAlert>
<EmptyState Icon="@Icons.Material.Filled.Stars"
Title="هنوز ویژگی‌ای برای شما فعال نشده است"
Description="با خرید پکیج یا ارتقاء عضویت، ویژگی‌های اختصاصی فعال می‌شوند." />
}
else
{
@@ -73,7 +71,7 @@
FullWidth="true"
Size="Size.Large"
StartIcon="@Icons.Material.Filled.ArrowBack"
Href="@RouteConstants.Club.Membership">
OnClick="GoBack">
بازگشت به صفحه باشگاه
</MudButton>
</MudStack>
@@ -190,4 +188,6 @@
_selectedFeature = feature;
_showDetailDialog = true;
}
private async Task GoBack() => await JS.InvokeVoidAsync("history.back");
}
@@ -7,14 +7,11 @@
<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.Index">بازگشت</MudButton>
</MudStack>
<PageHeader Title="عضویت باشگاه مشتریان" BackHref="@RouteConstants.Profile.Index" />
@if (_isLoading)
{
<MudProgressLinear Color="Color.Primary" Indeterminate="true" />
<LoadingState Message="در حال دریافت اطلاعات عضویت..." />
}
else if (_membership is not null)
{