29ce8cad38
Build and Deploy / build (push) Successful in 1m22s
- Updated CommissionDashboardPage to reflect new terminology for rewards instead of commissions. - Removed CommissionHistoryPage as its functionality has been integrated into the dashboard. - Adjusted WeeklyBalancePage to align with new reward terminology and improved layout. - Modified Index, NetworkStatisticsPage, MyPackages, Packages, Profile, and Wallet pages to use consistent terms related to team and rewards. - Updated ClubMembershipContractDialog to clarify user invitation terms. - Enhanced footer description to reflect the focus on sales teams.
272 lines
11 KiB
Plaintext
272 lines
11 KiB
Plaintext
@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
|
||
|
||
<MudDialog DisableSidePadding="true">
|
||
<DialogContent>
|
||
<MudContainer Style="max-height: 80vh; overflow-y: auto;" Class="pa-4">
|
||
@if (_step == ContractStep.ReadContract)
|
||
{
|
||
<MudText Typo="Typo.h5" Class="mb-4" Align="Align.Center">
|
||
<MudIcon Icon="@Icons.Material.Filled.Article" Class="ml-2" />
|
||
قرارداد باشگاه مشتریان
|
||
</MudText>
|
||
|
||
<MudAlert Severity="Severity.Info" Class="mb-4">
|
||
لطفاً قرارداد باشگاه مشتریان را به دقت مطالعه کنید و در صورت موافقت تایید نمایید.
|
||
</MudAlert>
|
||
|
||
<MudPaper Class="pa-4 mb-4" Style="max-height: 400px; overflow-y: auto;">
|
||
@((MarkupString)GetClubContractHtml())
|
||
</MudPaper>
|
||
|
||
<MudCheckBox @bind-Value="_acceptedTerms" Label="قوانین و مقررات باشگاه مشتریان را مطالعه کردم و میپذیرم" Color="Color.Primary" />
|
||
|
||
<MudButton Variant="Variant.Filled"
|
||
Color="Color.Primary"
|
||
FullWidth="true"
|
||
Class="mt-4"
|
||
Disabled="@(!_acceptedTerms || _isLoading)"
|
||
OnClick="RequestOtp">
|
||
@if (_isLoading)
|
||
{
|
||
<MudProgressCircular Size="Size.Small" Indeterminate="true" Class="ml-2" />
|
||
}
|
||
ادامه و دریافت کد تایید
|
||
</MudButton>
|
||
}
|
||
else if (_step == ContractStep.EnterOtp)
|
||
{
|
||
<MudText Typo="Typo.h5" Class="mb-4" Align="Align.Center">
|
||
<MudIcon Icon="@Icons.Material.Filled.Sms" Class="ml-2" />
|
||
تایید قرارداد
|
||
</MudText>
|
||
|
||
<MudAlert Severity="Severity.Success" Class="mb-4">
|
||
کد تایید به شماره موبایل شما ارسال شد. لطفاً کد را وارد کنید.
|
||
</MudAlert>
|
||
|
||
<MudTextField @bind-Value="_otpCode"
|
||
Label="کد تایید ۶ رقمی"
|
||
Variant="Variant.Outlined"
|
||
MaxLength="6"
|
||
InputType="InputType.Number"
|
||
Class="mb-4"
|
||
Immediate="true" />
|
||
|
||
@if (_remainingSeconds > 0)
|
||
{
|
||
<MudText Typo="Typo.body2" Color="Color.Secondary" Class="mb-2">
|
||
زمان باقیمانده: @_remainingSeconds ثانیه
|
||
</MudText>
|
||
}
|
||
else
|
||
{
|
||
<MudButton Variant="Variant.Text" Color="Color.Primary" OnClick="RequestOtp" Disabled="_isLoading">
|
||
ارسال مجدد کد
|
||
</MudButton>
|
||
}
|
||
|
||
<MudButton Variant="Variant.Filled"
|
||
Color="Color.Primary"
|
||
FullWidth="true"
|
||
Class="mt-4"
|
||
Disabled="@(string.IsNullOrEmpty(_otpCode) || _otpCode.Length != 6 || _isLoading)"
|
||
OnClick="AcceptContract">
|
||
@if (_isLoading)
|
||
{
|
||
<MudProgressCircular Size="Size.Small" Indeterminate="true" Class="ml-2" />
|
||
}
|
||
تایید و فعالسازی عضویت
|
||
</MudButton>
|
||
}
|
||
else if (_step == ContractStep.Success)
|
||
{
|
||
<div class="text-center">
|
||
<MudIcon Icon="@Icons.Material.Filled.CheckCircle" Color="Color.Success" Style="font-size: 80px" />
|
||
<MudText Typo="Typo.h5" Color="Color.Success" Class="mt-4">
|
||
عضویت شما در باشگاه مشتریان فعال شد!
|
||
</MudText>
|
||
<MudText Typo="Typo.body1" Class="mt-2">
|
||
اکنون میتوانید از لینک دعوت خود استفاده کنید و دوستانتان را دعوت کنید.
|
||
</MudText>
|
||
<MudButton Variant="Variant.Filled"
|
||
Color="Color.Primary"
|
||
Class="mt-6"
|
||
OnClick="CloseAndRefresh">
|
||
متوجه شدم
|
||
</MudButton>
|
||
</div>
|
||
}
|
||
</MudContainer>
|
||
</DialogContent>
|
||
</MudDialog>
|
||
|
||
@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 @"
|
||
<div style='direction: rtl; font-family: Tahoma, sans-serif; line-height: 2; text-align: justify;'>
|
||
<h2 style='text-align: center; margin-bottom: 20px;'>قرارداد عضویت در باشگاه مشتریان کارابازار</h2>
|
||
|
||
<p><strong>ماده ۱ - تعاریف</strong></p>
|
||
<p>۱-۱. باشگاه مشتریان: سامانهای که امکان معرفی دوستان و دریافت پاداش را فراهم میکند.</p>
|
||
<p>۱-۲. لینک دعوت: لینک اختصاصی هر کاربر برای معرفی دیگران.</p>
|
||
<p>۱-۳. پاداش معرفی: مبلغی که به ازای هر معرفی موفق به کاربر تعلق میگیرد.</p>
|
||
|
||
<p><strong>ماده ۲ - شرایط عضویت</strong></p>
|
||
<p>۲-۱. کاربر با پرداخت مبلغ ۵۶ میلیون تومان (پکیج پایه)، امکان عضویت در باشگاه مشتریان را خواهد داشت.</p>
|
||
<p>۲-۲. پس از امضای این قرارداد، لینک دعوت کاربر فعال خواهد شد.</p>
|
||
<p>۲-۳. کاربر میتواند حداکثر ۲ نفر را مستقیماً دعوت کند (یک نفر در تیم اول و یک نفر در تیم دوم).</p>
|
||
|
||
<p><strong>ماده ۳ - تعهدات کاربر</strong></p>
|
||
<p>۳-۱. کاربر متعهد است از لینک دعوت فقط برای معرفی افراد واقعی استفاده کند.</p>
|
||
<p>۳-۲. هرگونه سوءاستفاده از سیستم منجر به لغو عضویت خواهد شد.</p>
|
||
<p>۳-۳. کاربر حق انتقال یا فروش عضویت خود را ندارد.</p>
|
||
|
||
<p><strong>ماده ۴ - حقوق کاربر</strong></p>
|
||
<p>۴-۱. دریافت پاداش معرفی به ازای هر عضو جدید که از طریق تیم کاربر عضو شود.</p>
|
||
<p>۴-۲. دسترسی به داشبورد مدیریت تیم و مشاهده وضعیت اعضای تیم.</p>
|
||
<p>۴-۳. امکان برداشت موجودی کیف پول طبق قوانین سایت.</p>
|
||
|
||
<p><strong>ماده ۵ - شرایط فسخ</strong></p>
|
||
<p>۵-۱. در صورت نقض هر یک از مفاد این قرارداد، کارابازار حق لغو عضویت کاربر را دارد.</p>
|
||
<p>۵-۲. در صورت فسخ قرارداد، موجودی کیف پول طبق قوانین سایت تسویه خواهد شد.</p>
|
||
|
||
<p><strong>ماده ۶ - حل اختلاف</strong></p>
|
||
<p>۶-۱. در صورت بروز اختلاف، طرفین ابتدا از طریق مذاکره اقدام به حل و فصل خواهند کرد.</p>
|
||
<p>۶-۲. در صورت عدم توافق، مراجع قضایی صلاحیتدار رسیدگی خواهند کرد.</p>
|
||
|
||
<p style='text-align: center; margin-top: 30px;'><strong>شناسه قرارداد: " + _signGuid + @"</strong></p>
|
||
</div>";
|
||
}
|
||
}
|