This commit is contained in:
MeysamMoghaddam
2025-10-07 00:39:38 +03:30
parent 8c03d00a4b
commit b26225d8a6
15 changed files with 646 additions and 179 deletions

View File

@@ -0,0 +1,152 @@
@inject ISnackbar Snackbar
<footer class="footer-section">
<MudContainer MaxWidth="MaxWidth.Large" Class="py-12">
<!-- Main Footer Content -->
<MudGrid Spacing="4" Class="mb-8">
<!-- Company Info -->
<MudItem xs="12" md="4">
<MudStack Spacing="3">
<div class="d-flex align-center gap-2 mb-2">
<MudImage ObjectFit="ObjectFit.Cover"
ObjectPosition="ObjectPosition.Center"
Width="40"
Height="40"
Class="rounded-circle"
Src="favicon.png" />
<MudText Typo="Typo.h5" Class="fw-700">فرصت</MudText>
</div>
<MudText Typo="Typo.body2" Class="footer-description">
پلتفرم هوشمند ساخت شبکه‌های فروش و MLM با امکانات پیشرفته مدیریت تیم، محاسبه کارمزد و گزارش‌گیری جامع.
</MudText>
<MudStack Row="true" Spacing="2" Class="social-links">
<MudIconButton Icon="@Icons.Custom.Brands.Telegram"
Color="Color.Inherit"
Size="Size.Medium"
Class="social-icon"
Href="https://t.me/foursat"
Target="_blank" />
<MudIconButton Icon="@Icons.Custom.Brands.Instagram"
Color="Color.Inherit"
Size="Size.Medium"
Class="social-icon"
Href="https://instagram.com/foursat"
Target="_blank" />
<MudIconButton Icon="@Icons.Custom.Brands.LinkedIn"
Color="Color.Inherit"
Size="Size.Medium"
Class="social-icon"
Href="https://linkedin.com/company/foursat"
Target="_blank" />
<MudIconButton Icon="@Icons.Custom.Brands.WhatsApp"
Color="Color.Inherit"
Size="Size.Medium"
Class="social-icon"
Href="https://wa.me/989123456789"
Target="_blank" />
</MudStack>
</MudStack>
</MudItem>
<!-- Quick Links -->
<MudItem xs="12" sm="6" md="2">
<MudStack Spacing="2">
<MudText Typo="Typo.subtitle1" Class="fw-700 footer-title">دسترسی سریع</MudText>
<MudLink Href="#features" Class="footer-link">امکانات</MudLink>
<MudLink Href="#pricing" Class="footer-link">قیمت‌ها</MudLink>
<MudLink Href="#faq" Class="footer-link">سوالات متداول</MudLink>
<MudLink Href="#contact" Class="footer-link">ارتباط با ما</MudLink>
<MudLink Href="/auth/phone" Class="footer-link">ورود</MudLink>
</MudStack>
</MudItem>
<!-- Services -->
<MudItem xs="12" sm="6" md="2">
<MudStack Spacing="2">
<MudText Typo="Typo.subtitle1" Class="fw-700 footer-title">خدمات</MudText>
<MudLink Href="#" Class="footer-link">پکیج استارتر</MudLink>
<MudLink Href="#" Class="footer-link">پکیج رشد</MudLink>
<MudLink Href="#" Class="footer-link">پکیج اسکیل</MudLink>
<MudLink Href="#" Class="footer-link">مشاوره رایگان</MudLink>
<MudLink Href="#" Class="footer-link">پشتیبانی فنی</MudLink>
</MudStack>
</MudItem>
<!-- Support -->
<MudItem xs="12" sm="6" md="2">
<MudStack Spacing="2">
<MudText Typo="Typo.subtitle1" Class="fw-700 footer-title">پشتیبانی</MudText>
<MudLink Href="#" Class="footer-link">مرکز راهنمایی</MudLink>
<MudLink Href="#" Class="footer-link">آموزش‌ها</MudLink>
<MudLink Href="#" Class="footer-link">وبلاگ</MudLink>
<MudLink Href="#" Class="footer-link">تماس با ما</MudLink>
<MudLink Href="#" Class="footer-link">گزارش مشکل</MudLink>
</MudStack>
</MudItem>
<!-- Contact Info -->
<MudItem xs="12" sm="6" md="2">
<MudStack Spacing="2">
<MudText Typo="Typo.subtitle1" Class="fw-700 footer-title">تماس</MudText>
<div class="d-flex align-center gap-2">
<MudIcon Icon="@Icons.Material.Filled.Phone" Size="Size.Small" />
<MudText Typo="Typo.body2" Class="footer-contact">۰۲۱-۱۲۳۴۵۶۷۸</MudText>
</div>
<div class="d-flex align-center gap-2">
<MudIcon Icon="@Icons.Material.Filled.Email" Size="Size.Small" />
<MudText Typo="Typo.body2" Class="footer-contact">info@foursat.co</MudText>
</div>
<div class="d-flex align-start gap-2">
<MudIcon Icon="@Icons.Material.Filled.LocationOn" Size="Size.Small" Class="mt-1" />
<MudText Typo="Typo.body2" Class="footer-contact">
تهران، خیابان ولیعصر، پلاک ۱۲۳۴
</MudText>
</div>
</MudStack>
</MudItem>
</MudGrid>
<!-- Newsletter Subscription -->
<MudDivider Class="my-6" />
<MudGrid Justify="Justify.Center" Class="mb-6">
<MudItem xs="12" md="8" lg="6">
<MudPaper Elevation="2" Class="pa-4 rounded-2xl newsletter-section">
<MudText Typo="Typo.h6" Class="fw-700 mb-2" Align="Align.Center">عضویت در خبرنامه</MudText>
<MudText Typo="Typo.body2" Class="mb-3" Align="Align.Center">
از آخرین اخبار، آموزش‌ها و تخفیف‌های ویژه باخبر شوید
</MudText>
<MudStack Row="true" Spacing="2" Justify="Justify.Center" Class="newsletter-form">
<MudTextField @bind-Value="_newsletterEmail"
Placeholder="آدرس ایمیل شما"
Variant="Variant.Outlined"
Class="flex-grow-1"
Style="max-width: 300px;" />
<MudButton Color="Color.Primary"
Variant="Variant.Filled"
OnClick="SubscribeNewsletter"
Class="newsletter-btn">
عضویت
</MudButton>
</MudStack>
</MudPaper>
</MudItem>
</MudGrid>
<!-- Bottom Footer -->
<MudDivider Class="mb-4" />
<MudGrid Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center">
<MudItem xs="12" md="6">
<MudText Typo="Typo.body2" Class="footer-copyright">
© @DateTime.Now.Year فرصت. تمامی حقوق محفوظ است.
</MudText>
</MudItem>
<MudItem xs="12" md="6">
<MudStack Row="true" Spacing="3" Justify="Justify.FlexEnd" Class="footer-legal">
<MudLink Href="#" Class="footer-link">حریم خصوصی</MudLink>
<MudLink Href="#" Class="footer-link">شرایط استفاده</MudLink>
<MudLink Href="#" Class="footer-link">قوانین</MudLink>
</MudStack>
</MudItem>
</MudGrid>
</MudContainer>
</footer>

View File

@@ -0,0 +1,41 @@
using Microsoft.AspNetCore.Components;
using MudBlazor;
namespace FrontOffice.Main.Shared;
public partial class Footer
{
private string? _newsletterEmail;
private void SubscribeNewsletter()
{
if (string.IsNullOrWhiteSpace(_newsletterEmail))
{
Snackbar.Add("لطفاً آدرس ایمیل معتبر وارد کنید.", Severity.Warning);
return;
}
if (!IsValidEmail(_newsletterEmail))
{
Snackbar.Add("فرمت ایمیل صحیح نیست.", Severity.Warning);
return;
}
// TODO: Implement newsletter subscription logic
Snackbar.Add("با موفقیت در خبرنامه عضو شدید.", Severity.Success);
_newsletterEmail = string.Empty;
}
private static bool IsValidEmail(string email)
{
try
{
var addr = new System.Net.Mail.MailAddress(email);
return addr.Address == email;
}
catch
{
return false;
}
}
}

View File

@@ -4,42 +4,58 @@
<MudRTLProvider RightToLeft="true">
<MudThemeProvider @ref="_mudThemeProvider" Theme="CustomMudTheme.CustomMudBlazorTheme" @bind-IsDarkMode="_isDark" />
<MudPopoverProvider/>
<MudDialogProvider/>
<MudSnackbarProvider/>
<MudPopoverProvider />
<MudDialogProvider />
<MudSnackbarProvider />
<MudLayout>
<!-- AppBar -->
<MudAppBar Elevation="0" Color="Color.Transparent" Dense="true" Class="appbar">
<MudAppBar Elevation="0" Color="Color.Transparent" Dense="true" Class="py-2" id="top">
<MudContainer MaxWidth="MaxWidth.Large" Class="d-flex align-center justify-space-between w-100">
<MudHidden Breakpoint="Breakpoint.SmAndUp">
<MudIconButton Class="d-inline"
Icon="@Icons.Material.Filled.Menu"
OnClick="@ToggleDrawer" />
</MudHidden>
<div class="d-flex align-center gap-2">
<MudAvatar Size="Size.Medium" Color="Color.Primary" Variant="Variant.Filled" Icon="@Icons.Material.Filled.AutoAwesome" Class="rounded-xl" />
<MudText Typo="Typo.h6" Class="fw-600">فورسات</MudText>
<MudHidden Breakpoint="Breakpoint.SmAndUp" Invert="true">
<MudImage ObjectFit="ObjectFit.Cover"
ObjectPosition="ObjectPosition.Center"
Width="32"
Height="32"
Class="rounded-circle"
Src="favicon.png" />
</MudHidden>
<MudText Typo="Typo.h6" Class="fw-600">فرصت</MudText>
</div>
<div class="d-none d-md-flex align-center gap-4">
<MudLink Href="#features" Class="mud-link">امکانات</MudLink>
<MudLink Href="#pricing" Class="mud-link">قیمت‌ها</MudLink>
<MudLink Href="#faq" class="mud-link">سوالات متداول</MudLink>
<MudLink Href="#contact" class="mud-link">ارتباط</MudLink>
<div class="d-none d-md-flex align-center gap-10">
<MudLink Href="#features" Typo="Typo.subtitle1" Class="mud-link">امکانات</MudLink>
<MudLink Href="#pricing" Typo="Typo.subtitle1" Class="mud-link">قیمت‌ها</MudLink>
<MudLink Href="#faq" Typo="Typo.subtitle1" Class="mud-link">سوالات متداول</MudLink>
<MudLink Href="#contact" Typo="Typo.subtitle1" Class="mud-link">ارتباط با ما</MudLink>
</div>
<div class="d-flex align-center gap-2">
<MudButton Variant="Variant.Outlined" Color="Color.Inherit">ورود</MudButton>
<MudButton Color="Color.Primary">شروع کنید</MudButton>
<MudIconButton Title="تغییر پوسته" OnClick="@ToggleTheme" Edge="Edge.End"
<MudHidden Breakpoint="Breakpoint.SmAndUp" Invert="true">
<MudButton Variant="Variant.Outlined" Color="Color.Inherit">ورود</MudButton>
<MudButton Color="Color.Primary">شروع کنید</MudButton>
</MudHidden>
<MudIconButton OnClick="@ToggleTheme" Edge="Edge.End"
Icon="@(_isDark ? Icons.Material.Filled.DarkMode : Icons.Material.Filled.LightMode)" />
<MudIconButton Class="d-inline d-md-none" Title="فهرست" Icon="@Icons.Material.Filled.Menu" OnClick="@ToggleDrawer" />
</div>
</MudContainer>
</MudAppBar>
<!-- Mobile Drawer -->
<MudDrawer @bind-Open="_drawerOpen" Anchor="Anchor.Left" Elevation="1" Variant="DrawerVariant.Temporary" Class="p-4">
<MudDrawer @bind-Open="_drawerOpen" Anchor="Anchor.Right" Elevation="1" Variant="DrawerVariant.Temporary" Class="pa-4">
<MudStack Spacing="2">
<MudLink Href="#features" OnClick="() => _drawerOpen=false">امکانات</MudLink>
<MudLink Href="#pricing" OnClick="() => _drawerOpen=false">قیمت‌ها</MudLink>
<MudLink Href="#faq" OnClick="() => _drawerOpen=false">سوالات متداول</MudLink>
<MudLink Href="#contact" OnClick="() => _drawerOpen=false">ارتباط</MudLink>
<MudLink Href="#features" Typo="Typo.subtitle1" OnClick="() => _drawerOpen=false">امکانات</MudLink>
<MudLink Href="#pricing" Typo="Typo.subtitle1" OnClick="() => _drawerOpen=false">قیمت‌ها</MudLink>
<MudLink Href="#faq" Typo="Typo.subtitle1" OnClick="() => _drawerOpen=false">سوالات متداول</MudLink>
<MudLink Href="#contact" Typo="Typo.subtitle1" OnClick="() => _drawerOpen=false">ارتباط</MudLink>
<MudDivider Class="my-2" />
<MudButton Variant="Variant.Outlined" Color="Color.Inherit">ورود</MudButton>
<MudButton Color="Color.Primary">شروع کنید</MudButton>
@@ -48,7 +64,9 @@
<MudMainContent>
@Body
<Footer />
</MudMainContent>
</MudLayout>
</MudRTLProvider>

View File

@@ -15,4 +15,12 @@ public partial class MainLayout
{
await JSRuntime.InvokeVoidAsync("history.back");
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JSRuntime.InvokeVoidAsync("changeNavBgOnBodyScroll", "top", null, 1);
StateHasChanged();
}
}
}