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

View File

@@ -163,145 +163,3 @@
</MudStack> </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; }
}
}