diff --git a/src/FrontOffice.Main/Pages/Error.cshtml b/src/FrontOffice.Main/Pages/Error.cshtml index 7ccbe27..4141130 100644 --- a/src/FrontOffice.Main/Pages/Error.cshtml +++ b/src/FrontOffice.Main/Pages/Error.cshtml @@ -2,38 +2,37 @@ @model FrontOffice.Main.Pages.ErrorModel - + - Error - + خطا
-

Error.

-

An error occurred while processing your request.

+

خطا.

+

در هنگام پردازش درخواست شما خطایی رخ داد.

@if (Model.ShowRequestId) {

- Request ID: @Model.RequestId + شناسه درخواست: @Model.RequestId

} -

Development Mode

+

حالت توسعه

- Swapping to the Development environment displays detailed information about the error that occurred. + تغییر به محیط توسعه اطلاعات دقیق‌تری درباره خطای رخ داده نمایش می‌دهد.

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development - and restarting the app. + محیط توسعه نباید برای برنامه‌های مستقر شده فعال باشد. + این کار ممکن است منجر به نمایش اطلاعات حساس از خطاها به کاربران نهایی شود. + برای اشکال‌زدایی محلی، محیط توسعه را با تنظیم متغیر محیطی ASPNETCORE_ENVIRONMENT روی Development + فعال کرده و برنامه را مجدداً راه‌اندازی کنید.

diff --git a/src/FrontOffice.Main/Pages/FAQ.razor b/src/FrontOffice.Main/Pages/FAQ.razor index a3955e1..0f289df 100644 --- a/src/FrontOffice.Main/Pages/FAQ.razor +++ b/src/FrontOffice.Main/Pages/FAQ.razor @@ -163,145 +163,3 @@ -@code { - private string _searchQuery = ""; - private List _categories = new(); - private List _filteredQuestions = new(); - - protected override void OnInitialized() - { - LoadFAQData(); - } - - protected override void OnParametersSet() - { - FilterQuestions(); - } - - private void LoadFAQData() - { - _categories = new List - { - new FAQCategory - { - Id = "getting-started", - Title = "شروع کار", - Description = "نحوه ثبت‌نام و شروع استفاده", - Icon = Icons.Material.Filled.PlayArrow, - Questions = new List - { - new() { Question = "چگونه حساب کاربری بسازم؟", Answer = "برای ایجاد حساب کاربری، روی دکمه «شروع کنید» کلیک کنید و مراحل ثبت‌نام را دنبال کنید. نیاز به شماره موبایل معتبر دارید." }, - new() { Question = "آیا ثبت‌نام رایگان است؟", Answer = "بله، ثبت‌نام اولیه کاملاً رایگان است. شما می‌توانید از امکانات پایه به صورت رایگان استفاده کنید." }, - new() { Question = "چه مدارکی برای ثبت‌نام نیاز است؟", Answer = "تنها شماره موبایل معتبر نیاز است. برای استفاده از امکانات پیشرفته‌تر ممکن است نیاز به احراز هویت کامل باشد." } - } - }, - new FAQCategory - { - Id = "pricing", - Title = "قیمت‌گذاری", - Description = "طرح‌های قیمت‌گذاری و پرداخت", - Icon = Icons.Material.Filled.Payment, - Questions = new List - { - new() { Question = "طرح‌های قیمت‌گذاری شما چیست؟", Answer = "ما سه طرح داریم: استارتر (رایگان)، رشد (۳۹ دلار/ماه)، و اسکیل (تماس بگیرید). هر طرح برای اندازه تیم شما مناسب است." }, - new() { Question = "آیا امکان ارتقا یا کاهش طرح وجود دارد؟", Answer = "بله، شما می‌توانید در هر زمان طرح خود را ارتقا دهید. کاهش طرح نیز با محدودیت‌های زمانی ممکن است." }, - new() { Question = "چه روش‌های پرداختی پشتیبانی می‌شود؟", Answer = "از کارت‌های بانکی ایرانی، درگاه‌های پرداخت آنلاین، و کیف پول‌های دیجیتال پشتیبانی می‌کنیم." } - } - }, - new FAQCategory - { - Id = "features", - Title = "امکانات", - Description = "ویژگی‌ها و قابلیت‌های سیستم", - Icon = Icons.Material.Filled.Build, - Questions = new List - { - 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 - { - new() { Question = "داده‌های من چگونه محافظت می‌شود؟", Answer = "از رمزنگاری پیشرفته، پشتیبان‌گیری منظم، و پروتکل‌های امنیتی استاندارد استفاده می‌کنیم." }, - new() { Question = "آیا داده‌ها را با دیگران به اشتراک می‌گذاریم؟", Answer = "خیر، داده‌های شما کاملاً خصوصی است و تنها برای ارائه خدمات به شما استفاده می‌شود." }, - new() { Question = "چگونه می‌توانم حساب خود را حذف کنم؟", Answer = "از طریق تنظیمات پروفایل می‌توانید درخواست حذف حساب دهید. این فرآیند ۳۰ روز طول می‌کشد." } - } - }, - new FAQCategory - { - Id = "support", - Title = "پشتیبانی", - Description = "کمک و پشتیبانی فنی", - Icon = Icons.Material.Filled.Help, - Questions = new List - { - 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 - { - 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(); - 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 Questions { get; set; } = new(); - } - - public class FAQQuestion - { - public string? Question { get; set; } - public string? Answer { get; set; } - } -} \ No newline at end of file diff --git a/src/FrontOffice.Main/Pages/FAQ.razor.cs b/src/FrontOffice.Main/Pages/FAQ.razor.cs new file mode 100644 index 0000000..fb7be24 --- /dev/null +++ b/src/FrontOffice.Main/Pages/FAQ.razor.cs @@ -0,0 +1,146 @@ +using MudBlazor; + +namespace FrontOffice.Main.Pages; +public partial class FAQ +{ + private string _searchQuery = ""; + private List _categories = new(); + private List _filteredQuestions = new(); + + protected override void OnInitialized() + { + LoadFAQData(); + } + + protected override void OnParametersSet() + { + FilterQuestions(); + } + + private void LoadFAQData() + { + _categories = new List + { + new FAQCategory + { + Id = "getting-started", + Title = "شروع کار", + Description = "نحوه ثبت‌نام و شروع استفاده", + Icon = Icons.Material.Filled.PlayArrow, + Questions = new List + { + new() { Question = "چگونه حساب کاربری بسازم؟", Answer = "برای ایجاد حساب کاربری، روی دکمه «شروع کنید» کلیک کنید و مراحل ثبت‌نام را دنبال کنید. نیاز به شماره موبایل معتبر دارید." }, + new() { Question = "آیا ثبت‌نام رایگان است؟", Answer = "بله، ثبت‌نام اولیه کاملاً رایگان است. شما می‌توانید از امکانات پایه به صورت رایگان استفاده کنید." }, + new() { Question = "چه مدارکی برای ثبت‌نام نیاز است؟", Answer = "تنها شماره موبایل معتبر نیاز است. برای استفاده از امکانات پیشرفته‌تر ممکن است نیاز به احراز هویت کامل باشد." } + } + }, + new FAQCategory + { + Id = "pricing", + Title = "قیمت‌گذاری", + Description = "طرح‌های قیمت‌گذاری و پرداخت", + Icon = Icons.Material.Filled.Payment, + Questions = new List + { + new() { Question = "طرح‌های قیمت‌گذاری شما چیست؟", Answer = "ما سه طرح داریم: استارتر (رایگان)، رشد (۳۹ دلار/ماه)، و اسکیل (تماس بگیرید). هر طرح برای اندازه تیم شما مناسب است." }, + new() { Question = "آیا امکان ارتقا یا کاهش طرح وجود دارد؟", Answer = "بله، شما می‌توانید در هر زمان طرح خود را ارتقا دهید. کاهش طرح نیز با محدودیت‌های زمانی ممکن است." }, + new() { Question = "چه روش‌های پرداختی پشتیبانی می‌شود؟", Answer = "از کارت‌های بانکی ایرانی، درگاه‌های پرداخت آنلاین، و کیف پول‌های دیجیتال پشتیبانی می‌کنیم." } + } + }, + new FAQCategory + { + Id = "features", + Title = "امکانات", + Description = "ویژگی‌ها و قابلیت‌های سیستم", + Icon = Icons.Material.Filled.Build, + Questions = new List + { + 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 + { + new() { Question = "داده‌های من چگونه محافظت می‌شود؟", Answer = "از رمزنگاری پیشرفته، پشتیبان‌گیری منظم، و پروتکل‌های امنیتی استاندارد استفاده می‌کنیم." }, + new() { Question = "آیا داده‌ها را با دیگران به اشتراک می‌گذاریم؟", Answer = "خیر، داده‌های شما کاملاً خصوصی است و تنها برای ارائه خدمات به شما استفاده می‌شود." }, + new() { Question = "چگونه می‌توانم حساب خود را حذف کنم؟", Answer = "از طریق تنظیمات پروفایل می‌توانید درخواست حذف حساب دهید. این فرآیند ۳۰ روز طول می‌کشد." } + } + }, + new FAQCategory + { + Id = "support", + Title = "پشتیبانی", + Description = "کمک و پشتیبانی فنی", + Icon = Icons.Material.Filled.Help, + Questions = new List + { + 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 + { + 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(); + 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 Questions { get; set; } = new(); + } + + public class FAQQuestion + { + public string? Question { get; set; } + public string? Answer { get; set; } + } +} \ No newline at end of file