@using FrontOffice.BFF.ClubMembership.Protobuf.Protos.ClubMembership
@using Blazored.LocalStorage
@using FrontOffice.Main.Utilities
@using MudBlazor
@inject ClubMembershipContract.ClubMembershipContractClient ClubMembershipClient
@inject ILocalStorageService LocalStorage
@inject AuthService AuthService
@inject ISnackbar Snackbar
@inject NavigationManager Navigation
@if (_step == ContractStep.ReadContract)
{
قرارداد باشگاه مشتریان
لطفاً قرارداد باشگاه مشتریان را به دقت مطالعه کنید و در صورت موافقت تایید نمایید.
@((MarkupString)GetClubContractHtml())
@if (_isLoading)
{
}
ادامه و دریافت کد تایید
}
else if (_step == ContractStep.EnterOtp)
{
تایید قرارداد
کد تایید به شماره موبایل شما ارسال شد. لطفاً کد را وارد کنید.
@if (_remainingSeconds > 0)
{
زمان باقیمانده: @_remainingSeconds ثانیه
}
else
{
ارسال مجدد کد
}
@if (_isLoading)
{
}
تایید و فعالسازی عضویت
}
else if (_step == ContractStep.Success)
{
عضویت شما در باشگاه مشتریان فعال شد!
اکنون میتوانید از لینک دعوت خود استفاده کنید و دوستانتان را دعوت کنید.
متوجه شدم
}
@code {
[CascadingParameter] IMudDialogInstance MudDialog { get; set; }
private enum ContractStep { ReadContract, EnterOtp, Success }
private ContractStep _step = ContractStep.ReadContract;
private bool _acceptedTerms;
private string _otpCode = "";
private bool _isLoading;
private int _remainingSeconds;
private readonly Guid _signGuid = Guid.NewGuid();
private System.Timers.Timer? _timer;
private const string TokenStorageKey = "auth:token";
// این Modal غیرقابل بسته شدن است - Options در ShowAsync تنظیم میشوند
private async Task RequestOtp()
{
_isLoading = true;
try
{
var response = await ClubMembershipClient.RequestClubContractOtpAsync(
new RequestClubContractOtpRequest
{
SignGuid = _signGuid.ToString()
});
if (response.Success)
{
_step = ContractStep.EnterOtp;
_remainingSeconds = response.RemainingSeconds > 0 ? response.RemainingSeconds : 120;
StartCountdown();
}
else
{
Snackbar.Add(response.Message, Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"خطا در ارسال کد: {ex.Message}", Severity.Error);
}
finally
{
_isLoading = false;
StateHasChanged();
}
}
private async Task AcceptContract()
{
_isLoading = true;
try
{
var response = await ClubMembershipClient.AcceptClubMembershipContractAsync(
new AcceptClubMembershipContractRequest
{
OtpCode = _otpCode,
SignGuid = _signGuid.ToString(),
ContractHtml = GetClubContractHtml()
});
if (response.Success)
{
// ذخیره توکن جدید
if (!string.IsNullOrEmpty(response.Token))
{
await LocalStorage.SetItemAsync(TokenStorageKey, response.Token);
await AuthService.InitUserAuthInfo();
}
_step = ContractStep.Success;
StopCountdown();
}
else
{
Snackbar.Add(response.Message, Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"خطا در ثبت قرارداد: {ex.Message}", Severity.Error);
}
finally
{
_isLoading = false;
StateHasChanged();
}
}
private void CloseAndRefresh()
{
MudDialog.Close(DialogResult.Ok(true));
Navigation.NavigateTo(Navigation.Uri, forceLoad: true);
}
private void StartCountdown()
{
_timer = new System.Timers.Timer(1000);
_timer.Elapsed += (s, e) =>
{
_remainingSeconds--;
if (_remainingSeconds <= 0)
{
StopCountdown();
}
InvokeAsync(StateHasChanged);
};
_timer.Start();
}
private void StopCountdown()
{
_timer?.Stop();
_timer?.Dispose();
_timer = null;
}
public void Dispose()
{
StopCountdown();
}
private string GetClubContractHtml()
{
return @"
قرارداد عضویت در باشگاه مشتریان کارابازار
ماده ۱ - تعاریف
۱-۱. باشگاه مشتریان: سامانهای که امکان معرفی دوستان و دریافت پاداش را فراهم میکند.
۱-۲. لینک دعوت: لینک اختصاصی هر کاربر برای معرفی دیگران.
۱-۳. پاداش معرفی: مبلغی که به ازای هر معرفی موفق به کاربر تعلق میگیرد.
ماده ۲ - شرایط عضویت
۲-۱. کاربر با پرداخت مبلغ ۵۶ میلیون تومان (پکیج پایه)، امکان عضویت در باشگاه مشتریان را خواهد داشت.
۲-۲. پس از امضای این قرارداد، لینک دعوت کاربر فعال خواهد شد.
۲-۳. کاربر میتواند حداکثر ۲ نفر را مستقیماً دعوت کند (یک نفر در تیم اول و یک نفر در تیم دوم).
ماده ۳ - تعهدات کاربر
۳-۱. کاربر متعهد است از لینک دعوت فقط برای معرفی افراد واقعی استفاده کند.
۳-۲. هرگونه سوءاستفاده از سیستم منجر به لغو عضویت خواهد شد.
۳-۳. کاربر حق انتقال یا فروش عضویت خود را ندارد.
ماده ۴ - حقوق کاربر
۴-۱. دریافت پاداش معرفی به ازای هر عضو جدید که از طریق تیم کاربر عضو شود.
۴-۲. دسترسی به داشبورد مدیریت تیم و مشاهده وضعیت اعضای تیم.
۴-۳. امکان برداشت موجودی کیف پول طبق قوانین سایت.
ماده ۵ - شرایط فسخ
۵-۱. در صورت نقض هر یک از مفاد این قرارداد، کارابازار حق لغو عضویت کاربر را دارد.
۵-۲. در صورت فسخ قرارداد، موجودی کیف پول طبق قوانین سایت تسویه خواهد شد.
ماده ۶ - حل اختلاف
۶-۱. در صورت بروز اختلاف، طرفین ابتدا از طریق مذاکره اقدام به حل و فصل خواهند کرد.
۶-۲. در صورت عدم توافق، مراجع قضایی صلاحیتدار رسیدگی خواهند کرد.
شناسه قرارداد: " + _signGuid + @"
";
}
}