From 15d9f7f96a0a04ac869ecbdfe0e40bd1765791a2 Mon Sep 17 00:00:00 2001 From: MeysamMoghaddam <65253484+MeysamMoghaddam@users.noreply.github.com> Date: Mon, 13 Oct 2025 18:38:02 +0330 Subject: [PATCH] u --- src/FrontOffice.Main/Pages/Checkout.razor | 107 ++++++++++--------- src/FrontOffice.Main/Pages/Checkout.razor.cs | 28 +++-- 2 files changed, 78 insertions(+), 57 deletions(-) diff --git a/src/FrontOffice.Main/Pages/Checkout.razor b/src/FrontOffice.Main/Pages/Checkout.razor index 159d646..0c3e800 100644 --- a/src/FrontOffice.Main/Pages/Checkout.razor +++ b/src/FrontOffice.Main/Pages/Checkout.razor @@ -13,7 +13,7 @@
- تکمیل خرید + تکمیل خرید مرحله نهایی خرید پکیج
@@ -86,29 +86,41 @@ Elevation="@(_selectedAddress?.Id == address.Id ? 4 : 0)" Class="pa-3 rounded-xl cursor-pointer" Style="@(_selectedAddress?.Id == address.Id ? "border: 2px solid var(--mud-palette-primary);" : "")" - OnClick="() => SelectAddress(address)"> + @onclick="() => SetAddressAsDefault(address.Id)"> - - @address.Title + + @(address.Title) @if (address.IsDefault) { پیش‌فرض } @if (!address.IsDefault) { - - تنظیم به عنوان پیش‌فرض - + @if (_isSettingDefaultAddress && _settingDefaultAddressId == address.Id) + { + + } + else + { + + تنظیم به عنوان پیش‌فرض + + } } - @address.Address - کد پستی: @address.PostalCode + + @(address.Address) + + کد پستی: @(address.PostalCode) - + + } } @@ -140,23 +152,22 @@ کد تخفیف - - - - اعمال - - + + + + اعمال + @if (!string.IsNullOrWhiteSpace(_discountMessage)) { - @_discountMessage + @(_discountMessage) } @@ -170,37 +181,37 @@ - پکیج @(_selectedPackage.Title) - @_selectedPackage.Price.ToThousands().ToCurrencyUnitIRT() - + @(_selectedPackage.Title) + @(_selectedPackage.Price.ToThousands().ToCurrencyUnitIRT()) + - @if (_discountApplied && _discountAmount > 0) + @if (_discountApplied && _discountAmount > 0) { - تخفیف (@_discountCode) - -@_discountAmount.ToThousands().ToCurrencyUnitIRT() - + تخفیف (@(_discountCode)) + -@(_discountAmount.ToThousands().ToCurrencyUnitIRT()) + } - مجموع - @_finalPrice.ToThousands().ToCurrencyUnitIRT() - + مجموع + @(_finalPrice.ToThousands().ToCurrencyUnitIRT()) + - - @(_isProcessingPayment ? "در حال پردازش..." : "پرداخت آنلاین") - + + @(_isProcessingPayment ? "در حال پردازش..." : "پرداخت آنلاین") + - @if (!CanProceedToPayment) + @if (!CanProceedToPayment) { لطفاً پکیج و آدرس را انتخاب کنید. diff --git a/src/FrontOffice.Main/Pages/Checkout.razor.cs b/src/FrontOffice.Main/Pages/Checkout.razor.cs index b2a51c0..53bf220 100644 --- a/src/FrontOffice.Main/Pages/Checkout.razor.cs +++ b/src/FrontOffice.Main/Pages/Checkout.razor.cs @@ -33,6 +33,10 @@ public partial class Checkout private long _discountAmount; private long _finalPrice; + // Address management + private bool _isSettingDefaultAddress; + private long? _settingDefaultAddressId; + private bool CanProceedToPayment => _selectedPackage != null && _selectedAddress != null; protected override async Task OnInitializedAsync() @@ -96,14 +100,13 @@ public partial class Checkout } } - private void SelectAddress(GetAllUserAddressByFilterResponseModel address) - { - _selectedAddress = address; - StateHasChanged(); - } - private async Task SetAddressAsDefault(long addressId) { + if (_isSettingDefaultAddress) return; + + _isSettingDefaultAddress = true; + _settingDefaultAddressId = addressId; + try { await UserAddressContract.SetAddressAsDefaultAsync(new() { Id = addressId }); @@ -114,6 +117,12 @@ public partial class Checkout { Snackbar.Add($"خطا در تغییر آدرس پیش‌فرض: {ex.Message}", Severity.Error); } + finally + { + _isSettingDefaultAddress = false; + _settingDefaultAddressId = null; + await InvokeAsync(StateHasChanged); + } } private async Task ApplyDiscountCode() @@ -163,6 +172,9 @@ public partial class Checkout private async Task ProcessPayment() { + Snackbar.Add("درگاه پرداخت متصل نیست! لطفا در زمان دیگری مجددا تلاش فرمایید!", Severity.Warning); + return; + if (!CanProceedToPayment || _selectedPackage == null || _selectedAddress == null) { Snackbar.Add("لطفاً پکیج و آدرس را انتخاب کنید.", Severity.Warning); @@ -186,9 +198,7 @@ public partial class Checkout var paymentResponse = await TransactionContract.PaymentRequestAsync(paymentRequest); if (string.IsNullOrEmpty(paymentResponse.PaymentGWUrl)) - { - throw new Exception("آدرس درگاه پرداخت دریافت نشد."); - } + Snackbar.Add("آدرس درگاه پرداخت دریافت نشد.", Severity.Error); // Step 2: Create user order var orderRequest = new CreateNewUserOrderRequest