This commit is contained in:
MeysamMoghaddam
2025-10-13 10:43:40 +03:30
parent 19960547a4
commit 5abd0fc033
3 changed files with 157 additions and 154 deletions

View File

@@ -2,38 +2,37 @@
@model FrontOffice.Main.Pages.ErrorModel
<!DOCTYPE html>
<html lang="en">
<html lang="fa" dir="rtl">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Error</title>
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<title>خطا</title>
<link href="~/css/site.css" rel="stylesheet" asp-append-version="true" />
</head>
<body>
<div class="main">
<div class="content px-4">
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
<h1 class="text-danger">خطا.</h1>
<h2 class="text-danger">در هنگام پردازش درخواست شما خطایی رخ داد.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
<strong>شناسه درخواست:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<h3>حالت توسعه</h3>
<p>
Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
تغییر به محیط <strong>توسعه</strong> اطلاعات دقیق‌تری درباره خطای رخ داده نمایش می‌دهد.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
<strong>محیط توسعه نباید برای برنامه‌های مستقر شده فعال باشد.</strong>
این کار ممکن است منجر به نمایش اطلاعات حساس از خطاها به کاربران نهایی شود.
برای اشکال‌زدایی محلی، محیط توسعه را با تنظیم متغیر محیطی <strong>ASPNETCORE_ENVIRONMENT</strong> روی <strong>Development</strong>
فعال کرده و برنامه را مجدداً راه‌اندازی کنید.
</p>
</div>
</div>

View File

@@ -163,145 +163,3 @@
</MudStack>
@code {
private string _searchQuery = "";
private List<FAQCategory> _categories = new();
private List<FAQQuestion> _filteredQuestions = new();
protected override void OnInitialized()
{
LoadFAQData();
}
protected override void OnParametersSet()
{
FilterQuestions();
}
private void LoadFAQData()
{
_categories = new List<FAQCategory>
{
new FAQCategory
{
Id = "getting-started",
Title = "شروع کار",
Description = "نحوه ثبت‌نام و شروع استفاده",
Icon = Icons.Material.Filled.PlayArrow,
Questions = new List<FAQQuestion>
{
new() { Question = "چگونه حساب کاربری بسازم؟", Answer = "برای ایجاد حساب کاربری، روی دکمه «شروع کنید» کلیک کنید و مراحل ثبت‌نام را دنبال کنید. نیاز به شماره موبایل معتبر دارید." },
new() { Question = "آیا ثبت‌نام رایگان است؟", Answer = "بله، ثبت‌نام اولیه کاملاً رایگان است. شما می‌توانید از امکانات پایه به صورت رایگان استفاده کنید." },
new() { Question = "چه مدارکی برای ثبت‌نام نیاز است؟", Answer = "تنها شماره موبایل معتبر نیاز است. برای استفاده از امکانات پیشرفته‌تر ممکن است نیاز به احراز هویت کامل باشد." }
}
},
new FAQCategory
{
Id = "pricing",
Title = "قیمت‌گذاری",
Description = "طرح‌های قیمت‌گذاری و پرداخت",
Icon = Icons.Material.Filled.Payment,
Questions = new List<FAQQuestion>
{
new() { Question = "طرح‌های قیمت‌گذاری شما چیست؟", Answer = "ما سه طرح داریم: استارتر (رایگان)، رشد (۳۹ دلار/ماه)، و اسکیل (تماس بگیرید). هر طرح برای اندازه تیم شما مناسب است." },
new() { Question = "آیا امکان ارتقا یا کاهش طرح وجود دارد؟", Answer = "بله، شما می‌توانید در هر زمان طرح خود را ارتقا دهید. کاهش طرح نیز با محدودیت‌های زمانی ممکن است." },
new() { Question = "چه روش‌های پرداختی پشتیبانی می‌شود؟", Answer = "از کارت‌های بانکی ایرانی، درگاه‌های پرداخت آنلاین، و کیف پول‌های دیجیتال پشتیبانی می‌کنیم." }
}
},
new FAQCategory
{
Id = "features",
Title = "امکانات",
Description = "ویژگی‌ها و قابلیت‌های سیستم",
Icon = Icons.Material.Filled.Build,
Questions = new List<FAQQuestion>
{
new() { Question = "شجره‌نامه چگونه کار می‌کند؟", Answer = "شجره‌نامه بصری نمایش سلسله مراتبی تیم شما را نشان می‌دهد و امکان ردیابی روابط ارجاعی را فراهم می‌کند." },
new() { Question = "گزارش‌گیری به چه صورت است؟", Answer = "سیستم گزارش‌های جامع مالی، عملکردی و آماری ارائه می‌دهد که قابل فیلتر و دانلود به فرمت Excel است." },
new() { Question = "آیا از موبایل قابل استفاده است؟", Answer = "بله، اپلیکیشن کاملاً responsive است و تجربه کاربری عالی در موبایل و تبلت ارائه می‌دهد." }
}
},
new FAQCategory
{
Id = "security",
Title = "امنیت",
Description = "امنیت داده‌ها و حریم خصوصی",
Icon = Icons.Material.Filled.Security,
Questions = new List<FAQQuestion>
{
new() { Question = "داده‌های من چگونه محافظت می‌شود؟", Answer = "از رمزنگاری پیشرفته، پشتیبان‌گیری منظم، و پروتکل‌های امنیتی استاندارد استفاده می‌کنیم." },
new() { Question = "آیا داده‌ها را با دیگران به اشتراک می‌گذاریم؟", Answer = "خیر، داده‌های شما کاملاً خصوصی است و تنها برای ارائه خدمات به شما استفاده می‌شود." },
new() { Question = "چگونه می‌توانم حساب خود را حذف کنم؟", Answer = "از طریق تنظیمات پروفایل می‌توانید درخواست حذف حساب دهید. این فرآیند ۳۰ روز طول می‌کشد." }
}
},
new FAQCategory
{
Id = "support",
Title = "پشتیبانی",
Description = "کمک و پشتیبانی فنی",
Icon = Icons.Material.Filled.Help,
Questions = new List<FAQQuestion>
{
new() { Question = "پشتیبانی چگونه کار می‌کند؟", Answer = "پشتیبانی ۲۴ ساعته از طریق چت آنلاین، ایمیل و تلفن ارائه می‌شود. پاسخگویی در کمتر از ۲ ساعت." },
new() { Question = "آیا آموزش‌هایی دارید؟", Answer = "بله، مرکز راهنمایی جامع با ویدیوهای آموزشی، راهنماها و وبینارهای آموزشی داریم." },
new() { Question = "چگونه مشکل فنی گزارش دهم؟", Answer = "از طریق پنل پشتیبانی یا ایمیل support@foursat.co می‌توانید مشکلات را گزارش دهید." }
}
},
new FAQCategory
{
Id = "legal",
Title = "قوانین و مقررات",
Description = "قوانین استفاده و شرایط",
Icon = Icons.Material.Filled.Gavel,
Questions = new List<FAQQuestion>
{
new() { Question = "شرایط استفاده از خدمات چیست؟", Answer = "با ثبت‌نام، شرایط استفاده را می‌پذیرید. این شرایط در صفحه قوانین کامل توضیح داده شده است." },
new() { Question = "سیاست بازگشت وجه چگونه است؟", Answer = "در صورت عدم رضایت، امکان بازگشت وجه در ۱۴ روز اول وجود دارد. شرایط کامل در صفحه بازگشت وجه." },
new() { Question = "چگونه می‌توانم شکایت کنم؟", Answer = "از طریق ایمیل legal@foursat.co یا فرم تماس شکایات می‌توانید شکایت خود را ثبت کنید." }
}
}
};
// Calculate question counts
foreach (var category in _categories)
{
category.QuestionCount = category.Questions.Count;
}
}
private void FilterQuestions()
{
if (string.IsNullOrWhiteSpace(_searchQuery))
{
_filteredQuestions = new List<FAQQuestion>();
return;
}
_filteredQuestions = _categories
.SelectMany(c => c.Questions)
.Where(q => q.Question.Contains(_searchQuery, StringComparison.OrdinalIgnoreCase) ||
q.Answer.Contains(_searchQuery, StringComparison.OrdinalIgnoreCase))
.ToList();
}
private void ScrollToCategory(string categoryId)
{
// TODO: Implement smooth scroll to category
}
public class FAQCategory
{
public string? Id { get; set; }
public string? Title { get; set; }
public string? Description { get; set; }
public string? Icon { get; set; }
public int QuestionCount { get; set; }
public List<FAQQuestion> Questions { get; set; } = new();
}
public class FAQQuestion
{
public string? Question { get; set; }
public string? Answer { get; set; }
}
}

View File

@@ -0,0 +1,146 @@
using MudBlazor;
namespace FrontOffice.Main.Pages;
public partial class FAQ
{
private string _searchQuery = "";
private List<FAQCategory> _categories = new();
private List<FAQQuestion> _filteredQuestions = new();
protected override void OnInitialized()
{
LoadFAQData();
}
protected override void OnParametersSet()
{
FilterQuestions();
}
private void LoadFAQData()
{
_categories = new List<FAQCategory>
{
new FAQCategory
{
Id = "getting-started",
Title = "شروع کار",
Description = "نحوه ثبت‌نام و شروع استفاده",
Icon = Icons.Material.Filled.PlayArrow,
Questions = new List<FAQQuestion>
{
new() { Question = "چگونه حساب کاربری بسازم؟", Answer = "برای ایجاد حساب کاربری، روی دکمه «شروع کنید» کلیک کنید و مراحل ثبت‌نام را دنبال کنید. نیاز به شماره موبایل معتبر دارید." },
new() { Question = "آیا ثبت‌نام رایگان است؟", Answer = "بله، ثبت‌نام اولیه کاملاً رایگان است. شما می‌توانید از امکانات پایه به صورت رایگان استفاده کنید." },
new() { Question = "چه مدارکی برای ثبت‌نام نیاز است؟", Answer = "تنها شماره موبایل معتبر نیاز است. برای استفاده از امکانات پیشرفته‌تر ممکن است نیاز به احراز هویت کامل باشد." }
}
},
new FAQCategory
{
Id = "pricing",
Title = "قیمت‌گذاری",
Description = "طرح‌های قیمت‌گذاری و پرداخت",
Icon = Icons.Material.Filled.Payment,
Questions = new List<FAQQuestion>
{
new() { Question = "طرح‌های قیمت‌گذاری شما چیست؟", Answer = "ما سه طرح داریم: استارتر (رایگان)، رشد (۳۹ دلار/ماه)، و اسکیل (تماس بگیرید). هر طرح برای اندازه تیم شما مناسب است." },
new() { Question = "آیا امکان ارتقا یا کاهش طرح وجود دارد؟", Answer = "بله، شما می‌توانید در هر زمان طرح خود را ارتقا دهید. کاهش طرح نیز با محدودیت‌های زمانی ممکن است." },
new() { Question = "چه روش‌های پرداختی پشتیبانی می‌شود؟", Answer = "از کارت‌های بانکی ایرانی، درگاه‌های پرداخت آنلاین، و کیف پول‌های دیجیتال پشتیبانی می‌کنیم." }
}
},
new FAQCategory
{
Id = "features",
Title = "امکانات",
Description = "ویژگی‌ها و قابلیت‌های سیستم",
Icon = Icons.Material.Filled.Build,
Questions = new List<FAQQuestion>
{
new() { Question = "شجره‌نامه چگونه کار می‌کند؟", Answer = "شجره‌نامه بصری نمایش سلسله مراتبی تیم شما را نشان می‌دهد و امکان ردیابی روابط ارجاعی را فراهم می‌کند." },
new() { Question = "گزارش‌گیری به چه صورت است؟", Answer = "سیستم گزارش‌های جامع مالی، عملکردی و آماری ارائه می‌دهد که قابل فیلتر و دانلود به فرمت Excel است." },
new() { Question = "آیا از موبایل قابل استفاده است؟", Answer = "بله، اپلیکیشن کاملاً responsive است و تجربه کاربری عالی در موبایل و تبلت ارائه می‌دهد." }
}
},
new FAQCategory
{
Id = "security",
Title = "امنیت",
Description = "امنیت داده‌ها و حریم خصوصی",
Icon = Icons.Material.Filled.Security,
Questions = new List<FAQQuestion>
{
new() { Question = "داده‌های من چگونه محافظت می‌شود؟", Answer = "از رمزنگاری پیشرفته، پشتیبان‌گیری منظم، و پروتکل‌های امنیتی استاندارد استفاده می‌کنیم." },
new() { Question = "آیا داده‌ها را با دیگران به اشتراک می‌گذاریم؟", Answer = "خیر، داده‌های شما کاملاً خصوصی است و تنها برای ارائه خدمات به شما استفاده می‌شود." },
new() { Question = "چگونه می‌توانم حساب خود را حذف کنم؟", Answer = "از طریق تنظیمات پروفایل می‌توانید درخواست حذف حساب دهید. این فرآیند ۳۰ روز طول می‌کشد." }
}
},
new FAQCategory
{
Id = "support",
Title = "پشتیبانی",
Description = "کمک و پشتیبانی فنی",
Icon = Icons.Material.Filled.Help,
Questions = new List<FAQQuestion>
{
new() { Question = "پشتیبانی چگونه کار می‌کند؟", Answer = "پشتیبانی ۲۴ ساعته از طریق چت آنلاین، ایمیل و تلفن ارائه می‌شود. پاسخگویی در کمتر از ۲ ساعت." },
new() { Question = "آیا آموزش‌هایی دارید؟", Answer = "بله، مرکز راهنمایی جامع با ویدیوهای آموزشی، راهنماها و وبینارهای آموزشی داریم." },
new() { Question = "چگونه مشکل فنی گزارش دهم؟", Answer = "از طریق پنل پشتیبانی یا ایمیل support@foursat.co می‌توانید مشکلات را گزارش دهید." }
}
},
new FAQCategory
{
Id = "legal",
Title = "قوانین و مقررات",
Description = "قوانین استفاده و شرایط",
Icon = Icons.Material.Filled.Gavel,
Questions = new List<FAQQuestion>
{
new() { Question = "شرایط استفاده از خدمات چیست؟", Answer = "با ثبت‌نام، شرایط استفاده را می‌پذیرید. این شرایط در صفحه قوانین کامل توضیح داده شده است." },
new() { Question = "سیاست بازگشت وجه چگونه است؟", Answer = "در صورت عدم رضایت، امکان بازگشت وجه در ۱۴ روز اول وجود دارد. شرایط کامل در صفحه بازگشت وجه." },
new() { Question = "چگونه می‌توانم شکایت کنم؟", Answer = "از طریق ایمیل legal@foursat.co یا فرم تماس شکایات می‌توانید شکایت خود را ثبت کنید." }
}
}
};
// Calculate question counts
foreach (var category in _categories)
{
category.QuestionCount = category.Questions.Count;
}
}
private void FilterQuestions()
{
if (string.IsNullOrWhiteSpace(_searchQuery))
{
_filteredQuestions = new List<FAQQuestion>();
return;
}
_filteredQuestions = _categories
.SelectMany(c => c.Questions)
.Where(q => q.Question.Contains(_searchQuery, StringComparison.OrdinalIgnoreCase) ||
q.Answer.Contains(_searchQuery, StringComparison.OrdinalIgnoreCase))
.ToList();
}
private void ScrollToCategory(string categoryId)
{
// TODO: Implement smooth scroll to category
}
public class FAQCategory
{
public string? Id { get; set; }
public string? Title { get; set; }
public string? Description { get; set; }
public string? Icon { get; set; }
public int QuestionCount { get; set; }
public List<FAQQuestion> Questions { get; set; } = new();
}
public class FAQQuestion
{
public string? Question { get; set; }
public string? Answer { get; set; }
}
}