first commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
export const adminAssignments = [
|
||||
{
|
||||
id: 301,
|
||||
title: 'یادداشتبرداری از جلسه اول',
|
||||
description: 'خلاصهای از مباحث جلسه اول را در دو صفحه بنویسید.',
|
||||
courseTemplate: { id: 1, title: 'اصول اخلاق اسلامی' },
|
||||
courseTemplateTitle: 'اصول اخلاق اسلامی',
|
||||
session: { id: 101, title: 'مقدمهای بر اخلاق اسلامی' },
|
||||
sessionTitle: 'مقدمهای بر اخلاق اسلامی',
|
||||
startDate: '2025-09-26T00:00:00.000Z',
|
||||
endDate: '2025-10-05T23:59:00.000Z',
|
||||
durationDays: 9,
|
||||
priority: 'mandatory',
|
||||
submissionsCount: 2,
|
||||
attachments: [],
|
||||
createdAt: '2025-09-24T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 302,
|
||||
title: 'تحلیل تفسیری سوره حمد',
|
||||
description: 'تحلیل سه آیه از سوره حمد را ارسال نمایید.',
|
||||
courseTemplate: { id: 2, title: 'مفاهیم قرآنی' },
|
||||
courseTemplateTitle: 'مفاهیم قرآنی',
|
||||
session: { id: 102, title: 'تفسیر سوره حمد' },
|
||||
sessionTitle: 'تفسیر سوره حمد',
|
||||
startDate: '2025-10-05T00:00:00.000Z',
|
||||
endDate: '2025-10-20T23:59:00.000Z',
|
||||
durationDays: 15,
|
||||
priority: 'optional',
|
||||
submissionsCount: 1,
|
||||
attachments: [],
|
||||
createdAt: '2025-10-02T08:00:00.000Z',
|
||||
},
|
||||
]
|
||||
|
||||
export const assignmentSubmissions = new Map([
|
||||
[
|
||||
301,
|
||||
[
|
||||
{
|
||||
id: 1,
|
||||
assignmentId: 301,
|
||||
userId: 100,
|
||||
user: {
|
||||
id: 100,
|
||||
firstName: 'فاطمه',
|
||||
lastName: 'رضایی',
|
||||
fullName: 'فاطمه رضایی',
|
||||
avatarUrl: '',
|
||||
address: { province: { name: 'تهران' }, city: { name: 'تهران' } },
|
||||
profile: {
|
||||
educationStatus: 'seminary_student',
|
||||
seminaryLevel: 'level_3',
|
||||
universityLevel: 'not_applicable',
|
||||
},
|
||||
},
|
||||
termTitle: 'ترم پاییز ۱۴۰۴',
|
||||
courseTemplateTitle: 'اصول اخلاق اسلامی',
|
||||
sessionTitle: 'مقدمهای بر اخلاق اسلامی',
|
||||
userDescription: 'یادداشتهای جلسه اول به همراه برداشت شخصی ضمیمه است.',
|
||||
attachments: [{ id: 1, title: 'یادداشت-جلسه-اول.pdf', fileUrl: '#', type: 'document' }],
|
||||
submittedAt: '2025-10-02T18:30:00.000Z',
|
||||
status: 'pending',
|
||||
score: null,
|
||||
reviewerNote: '',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
assignmentId: 301,
|
||||
userId: 102,
|
||||
user: {
|
||||
id: 102,
|
||||
firstName: 'مریم',
|
||||
lastName: 'احمدی',
|
||||
fullName: 'مریم احمدی',
|
||||
avatarUrl: '',
|
||||
address: { province: { name: 'اصفهان' }, city: { name: 'اصفهان' } },
|
||||
profile: {
|
||||
educationStatus: 'seminary_and_university_student',
|
||||
seminaryLevel: 'level_2',
|
||||
universityLevel: 'bachelor',
|
||||
},
|
||||
},
|
||||
termTitle: 'ترم پاییز ۱۴۰۴',
|
||||
courseTemplateTitle: 'اصول اخلاق اسلامی',
|
||||
sessionTitle: 'مقدمهای بر اخلاق اسلامی',
|
||||
userDescription: 'خلاصهای از جلسه به همراه پرسش پایان.',
|
||||
attachments: [],
|
||||
submittedAt: '2025-10-04T20:00:00.000Z',
|
||||
status: 'approved',
|
||||
score: 18,
|
||||
reviewerNote: 'تحلیل خوبی ارائه شده است.',
|
||||
},
|
||||
],
|
||||
],
|
||||
])
|
||||
@@ -0,0 +1,86 @@
|
||||
export const adminConsultations = [
|
||||
{
|
||||
id: 387,
|
||||
requestId: '387',
|
||||
user: {
|
||||
id: 201,
|
||||
firstName: 'علیرضا',
|
||||
lastName: 'محمدی',
|
||||
fullName: 'علیرضا محمدی',
|
||||
avatarUrl: '',
|
||||
},
|
||||
status: 'answered',
|
||||
statusLabel: 'پاسخ داده شده',
|
||||
createdAt: '2026-05-12T13:54:00.000Z',
|
||||
faCreatedAt: '۱۴۰۵/۰۲/۲۲',
|
||||
faCreatedTime: '۱۳:۵۴',
|
||||
messages: [
|
||||
{
|
||||
id: 1,
|
||||
sender: 'user',
|
||||
text: 'سلام، در خصوص انتخاب رشته مشاوره میخواستم.',
|
||||
time: '۱۳:۵۴',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
sender: 'admin',
|
||||
text: 'سلام و وقت بخیر، لطفا رشته فعلی و علاقهمندیهای خود را بفرمایید.',
|
||||
time: '۱۴:۰۲',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 388,
|
||||
requestId: '388',
|
||||
user: {
|
||||
id: 202,
|
||||
firstName: 'زهرا',
|
||||
lastName: 'کریمی',
|
||||
fullName: 'زهرا کریمی',
|
||||
avatarUrl: '',
|
||||
},
|
||||
status: 'in_progress',
|
||||
statusLabel: 'در حال گفتگو',
|
||||
createdAt: '2026-05-11T09:30:00.000Z',
|
||||
faCreatedAt: '۱۴۰۵/۰۲/۲۱',
|
||||
faCreatedTime: '۰۹:۳۰',
|
||||
messages: [
|
||||
{
|
||||
id: 1,
|
||||
sender: 'user',
|
||||
text: 'برای ادامه تحصیل در سطح ۳ راهنمایی نیاز دارم.',
|
||||
time: '۰۹:۳۰',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 389,
|
||||
requestId: '389',
|
||||
user: {
|
||||
id: 203,
|
||||
firstName: 'محمد',
|
||||
lastName: 'حسینی',
|
||||
fullName: 'محمد حسینی',
|
||||
avatarUrl: '',
|
||||
},
|
||||
status: 'closed',
|
||||
statusLabel: 'بسته شده',
|
||||
createdAt: '2026-05-09T16:10:00.000Z',
|
||||
faCreatedAt: '۱۴۰۵/۰۲/۱۹',
|
||||
faCreatedTime: '۱۶:۱۰',
|
||||
messages: [
|
||||
{
|
||||
id: 1,
|
||||
sender: 'user',
|
||||
text: 'مشاوره دریافت شد، با تشکر.',
|
||||
time: '۱۶:۱۰',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
sender: 'admin',
|
||||
text: 'موفق باشید.',
|
||||
time: '۱۶:۱۲',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,89 @@
|
||||
export const adminCourseTemplates = [
|
||||
{
|
||||
id: 1,
|
||||
title: 'اصول اخلاق اسلامی',
|
||||
description: 'دوره مقدماتی برای آشنایی با اخلاق اسلامی.',
|
||||
image: 'https://picsum.photos/seed/course1/200/200',
|
||||
defaultTeacher: { id: 5, firstName: 'علی', lastName: 'حسنی', fullName: 'علی حسنی' },
|
||||
defaultCapacity: 30,
|
||||
isActiveByDefault: true,
|
||||
prerequisitesCount: 0,
|
||||
prerequisites: [],
|
||||
createdAt: '2025-08-10T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: 'مفاهیم قرآنی',
|
||||
description: 'بررسی مفاهیم قرآنی به همراه تفسیر مختصر.',
|
||||
image: 'https://picsum.photos/seed/course2/200/200',
|
||||
defaultTeacher: { id: 6, firstName: 'حسین', lastName: 'مرادی', fullName: 'حسین مرادی' },
|
||||
defaultCapacity: 25,
|
||||
isActiveByDefault: true,
|
||||
prerequisitesCount: 1,
|
||||
prerequisites: [{ courseId: 1, course: { id: 1, title: 'اصول اخلاق اسلامی' } }],
|
||||
createdAt: '2025-09-12T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: 'فقه عبادات',
|
||||
description: 'مرور احکام عملی نماز و روزه.',
|
||||
image: '',
|
||||
defaultTeacher: { id: 7, firstName: 'مهدی', lastName: 'سهرابی', fullName: 'مهدی سهرابی' },
|
||||
defaultCapacity: 20,
|
||||
isActiveByDefault: false,
|
||||
prerequisitesCount: 0,
|
||||
prerequisites: [],
|
||||
createdAt: '2026-01-05T08:00:00.000Z',
|
||||
},
|
||||
]
|
||||
|
||||
export const adminOfferedCourses = [
|
||||
{
|
||||
id: 11,
|
||||
title: 'اصول اخلاق اسلامی - پاییز',
|
||||
image: 'https://picsum.photos/seed/offered1/200/200',
|
||||
template: { id: 1, title: 'اصول اخلاق اسلامی' },
|
||||
templateId: 1,
|
||||
term: { id: 1, title: 'ترم پاییز ۱۴۰۴' },
|
||||
termId: 1,
|
||||
teacher: { id: 5, firstName: 'علی', lastName: 'حسنی', fullName: 'علی حسنی' },
|
||||
capacity: 30,
|
||||
isActive: true,
|
||||
prerequisitesCount: 0,
|
||||
startDate: '2025-09-23T00:00:00.000Z',
|
||||
endDate: '2025-11-20T00:00:00.000Z',
|
||||
createdAt: '2025-09-01T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 12,
|
||||
title: 'مفاهیم قرآنی - پاییز',
|
||||
image: 'https://picsum.photos/seed/offered2/200/200',
|
||||
template: { id: 2, title: 'مفاهیم قرآنی' },
|
||||
templateId: 2,
|
||||
term: { id: 1, title: 'ترم پاییز ۱۴۰۴' },
|
||||
termId: 1,
|
||||
teacher: { id: 6, firstName: 'حسین', lastName: 'مرادی', fullName: 'حسین مرادی' },
|
||||
capacity: 25,
|
||||
isActive: true,
|
||||
prerequisitesCount: 1,
|
||||
startDate: '2025-10-01T00:00:00.000Z',
|
||||
endDate: '2025-12-15T00:00:00.000Z',
|
||||
createdAt: '2025-09-10T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 13,
|
||||
title: 'فقه عبادات - زمستان',
|
||||
image: '',
|
||||
template: { id: 3, title: 'فقه عبادات' },
|
||||
templateId: 3,
|
||||
term: { id: 2, title: 'ترم زمستان ۱۴۰۴' },
|
||||
termId: 2,
|
||||
teacher: { id: 7, firstName: 'مهدی', lastName: 'سهرابی', fullName: 'مهدی سهرابی' },
|
||||
capacity: 20,
|
||||
isActive: false,
|
||||
prerequisitesCount: 0,
|
||||
startDate: '2026-01-22T00:00:00.000Z',
|
||||
endDate: '2026-03-15T00:00:00.000Z',
|
||||
createdAt: '2025-12-10T08:00:00.000Z',
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,123 @@
|
||||
const sampleQuestions = (seed) => [
|
||||
{
|
||||
id: `${seed}-q1`,
|
||||
title: 'کدام گزینه به مفهوم تقوا نزدیکتر است؟',
|
||||
score: 5,
|
||||
correctAnswerId: `${seed}-q1-a2`,
|
||||
answers: [
|
||||
{ id: `${seed}-q1-a1`, title: 'پرهیز از خطا و دوری از گناه' },
|
||||
{ id: `${seed}-q1-a2`, title: 'خودنگهداری در محضر خداوند' },
|
||||
{ id: `${seed}-q1-a3`, title: 'پرهیز از خوراکیهای مضر' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: `${seed}-q2`,
|
||||
title: 'منبع اصلی احکام شیعه چیست؟',
|
||||
score: 5,
|
||||
correctAnswerId: `${seed}-q2-a1`,
|
||||
answers: [
|
||||
{ id: `${seed}-q2-a1`, title: 'قرآن و سنت اهل بیت(ع)' },
|
||||
{ id: `${seed}-q2-a2`, title: 'فقط قرآن کریم' },
|
||||
{ id: `${seed}-q2-a3`, title: 'اجماع علما' },
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export const adminExams = [
|
||||
{
|
||||
id: 201,
|
||||
title: 'آزمون پایان فصل اول اخلاق',
|
||||
description: 'آزمون چهار گزینهای از مفاهیم درسهای ۱ تا ۳.',
|
||||
courseTemplate: { id: 1, title: 'اصول اخلاق اسلامی' },
|
||||
courseTemplateTitle: 'اصول اخلاق اسلامی',
|
||||
session: { id: 101, title: 'مقدمهای بر اخلاق اسلامی' },
|
||||
sessionTitle: 'مقدمهای بر اخلاق اسلامی',
|
||||
durationMinutes: 25,
|
||||
passingScore: 12,
|
||||
questionsCount: 2,
|
||||
randomize: true,
|
||||
endDate: '2026-05-15T00:00:00.000Z',
|
||||
startDate: '2026-05-01T00:00:00.000Z',
|
||||
createdAt: '2026-04-20T08:00:00.000Z',
|
||||
questions: sampleQuestions(201),
|
||||
usedInTerms: [{ termId: 1 }],
|
||||
},
|
||||
{
|
||||
id: 202,
|
||||
title: 'آزمون مفاهیم قرآنی - میانترم',
|
||||
description: 'آزمون میانترم برای مرور آیات کلیدی.',
|
||||
courseTemplate: { id: 2, title: 'مفاهیم قرآنی' },
|
||||
courseTemplateTitle: 'مفاهیم قرآنی',
|
||||
session: { id: 102, title: 'تفسیر سوره حمد' },
|
||||
sessionTitle: 'تفسیر سوره حمد',
|
||||
durationMinutes: 30,
|
||||
passingScore: 14,
|
||||
questionsCount: 2,
|
||||
randomize: false,
|
||||
endDate: '2026-06-10T00:00:00.000Z',
|
||||
startDate: '2026-05-25T00:00:00.000Z',
|
||||
createdAt: '2026-05-10T08:00:00.000Z',
|
||||
questions: sampleQuestions(202),
|
||||
usedInTerms: [{ termId: 1 }],
|
||||
},
|
||||
]
|
||||
|
||||
export const examParticipants = new Map([
|
||||
[
|
||||
201,
|
||||
[
|
||||
{
|
||||
id: 1,
|
||||
userId: 100,
|
||||
firstName: 'فاطمه',
|
||||
lastName: 'رضایی',
|
||||
fullName: 'فاطمه رضایی',
|
||||
avatarUrl: '',
|
||||
address: { province: { name: 'تهران' }, city: { name: 'تهران' } },
|
||||
location: 'تهران، تهران',
|
||||
submittedAt: '2026-05-05T10:30:00.000Z',
|
||||
attempts: [
|
||||
{
|
||||
id: 1,
|
||||
title: 'تلاش اول',
|
||||
courseTitle: 'اصول اخلاق اسلامی',
|
||||
sessionTitle: 'مقدمهای بر اخلاق اسلامی',
|
||||
date: '2026-05-05T10:30:00.000Z',
|
||||
score: 17,
|
||||
scoreTone: 'good',
|
||||
questions: sampleQuestions(201).map((q) => ({
|
||||
...q,
|
||||
userAnswerId: q.correctAnswerId,
|
||||
})),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
userId: 102,
|
||||
firstName: 'مریم',
|
||||
lastName: 'احمدی',
|
||||
fullName: 'مریم احمدی',
|
||||
avatarUrl: '',
|
||||
address: { province: { name: 'اصفهان' }, city: { name: 'اصفهان' } },
|
||||
location: 'اصفهان، اصفهان',
|
||||
submittedAt: '2026-05-06T11:00:00.000Z',
|
||||
attempts: [
|
||||
{
|
||||
id: 2,
|
||||
title: 'تلاش اول',
|
||||
courseTitle: 'اصول اخلاق اسلامی',
|
||||
sessionTitle: 'مقدمهای بر اخلاق اسلامی',
|
||||
date: '2026-05-06T11:00:00.000Z',
|
||||
score: 9,
|
||||
scoreTone: 'bad',
|
||||
questions: sampleQuestions(201).map((q, i) => ({
|
||||
...q,
|
||||
userAnswerId: i === 0 ? q.answers[0].id : q.correctAnswerId,
|
||||
})),
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
],
|
||||
])
|
||||
@@ -0,0 +1,65 @@
|
||||
const firstNames = ['سکینه', 'رقیه', 'فاطمه', 'مریم', 'لیلا', 'زهرا', 'فریده', 'نسرین']
|
||||
const lastNames = ['طاهری', 'سلیمی', 'افشار', 'بختیاری', 'خراسانی', 'سهرابی', 'محمدی', 'بهرامی']
|
||||
|
||||
const pick = (arr, i) => arr[i % arr.length]
|
||||
|
||||
const makeStudent = (i) => {
|
||||
const firstName = pick(firstNames, i)
|
||||
const lastName = pick(lastNames, i + 2)
|
||||
const status = i % 3 === 0 ? 'rejected' : 'pending'
|
||||
const submittedAt = new Date(Date.now() - i * 86_400_000).toISOString()
|
||||
return {
|
||||
id: 500 + i,
|
||||
firstName,
|
||||
lastName,
|
||||
fullName: `${firstName} ${lastName}`,
|
||||
phoneNumber: `0935${String(2_000_000 + i).padStart(7, '0')}`,
|
||||
nationalCode: String(2_000_000_000 + i * 11).padStart(10, '0'),
|
||||
avatarUrl: '',
|
||||
status,
|
||||
submittedAt,
|
||||
address: {
|
||||
address: 'آدرس نمونه',
|
||||
province: { id: 1, name: 'تهران' },
|
||||
city: { id: 11, name: 'تهران' },
|
||||
},
|
||||
profile: {
|
||||
birthDate: new Date(1992, i % 12, ((i * 5) % 27) + 1).toISOString(),
|
||||
maritalStatus: i % 2 ? 'single' : 'married',
|
||||
gender: 'female',
|
||||
educationStatus: 'seminary_student',
|
||||
seminaryLevel: 'level_3',
|
||||
universityLevel: 'not_applicable',
|
||||
universityName: 'حوزه علمیه قم',
|
||||
fieldOfStudy: 'فقه و اصول',
|
||||
workExperienceSummary: 'پنج سال تدریس در مدرسه دینی.',
|
||||
activitySummary: 'برگزاری جلسات قرآن و حدیث به صورت هفتگی.',
|
||||
propagationExperienceYears: 6,
|
||||
propagationMethodDescription: 'محوریت بیان داستانهای قرآنی و قرابتهای اخلاقی.',
|
||||
specializedTopics: 'تربیت دینی نوجوانان',
|
||||
propagationPlatforms: [
|
||||
{ platform: 'home_gathering_regular' },
|
||||
{ platform: 'online', platformDetails: 'کانال اینستاگرام @example' },
|
||||
],
|
||||
responseToLowSatisfaction: 'change_the_method',
|
||||
responseToSessionCancellation: 'teach_how_to_reduce_costs',
|
||||
responseToAudienceConflict: 'divide_the_crowd',
|
||||
responseToCompetingPropagator: 'strengthen_yourself',
|
||||
responseToUnqualifiedAdvisors: 'تلاش بر شفافسازی و معرفی مراجع تخصصی.',
|
||||
relevantCertificates: 'سطح ۳ حوزوی، تدریس قرآن',
|
||||
hijabApproach: 'گفتگوی همدلانه و آموزشمحور.',
|
||||
},
|
||||
verification: {
|
||||
status,
|
||||
submittedAt,
|
||||
rejectionReason: status === 'rejected' ? 'عدم تکمیل مدارک' : '',
|
||||
adminNote: status === 'rejected' ? 'لطفا مدارک تحصیلی بهروز ارسال شود.' : '',
|
||||
verifiedBy: { firstName: 'سجاد', lastName: 'محمدی' },
|
||||
media: [],
|
||||
},
|
||||
roles: ['student'],
|
||||
createdAt: submittedAt,
|
||||
}
|
||||
}
|
||||
|
||||
export const pendingStudents = Array.from({ length: 14 }, (_, i) => makeStudent(i))
|
||||
@@ -0,0 +1,107 @@
|
||||
export const adminSessions = [
|
||||
{
|
||||
id: 101,
|
||||
title: 'مقدمهای بر اخلاق اسلامی',
|
||||
description: 'جلسه نخست؛ تعاریف و چارچوب دوره.',
|
||||
image: 'https://picsum.photos/seed/session1/200/200',
|
||||
courseTemplate: { id: 1, title: 'اصول اخلاق اسلامی' },
|
||||
sessionType: 'in_person',
|
||||
sessionTypeFa: 'حضوری',
|
||||
durationMinutes: 90,
|
||||
order: 1,
|
||||
sessionConfig: {
|
||||
startTime: '2025-09-25T16:00:00.000Z',
|
||||
location: 'سالن آمفیتئاتر ۲ - مدرسه قم',
|
||||
},
|
||||
materials: [],
|
||||
usedInTerms: [{ termId: 1 }],
|
||||
createdAt: '2025-09-10T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 102,
|
||||
title: 'تفسیر سوره حمد',
|
||||
description: 'تحلیل آیات سوره حمد.',
|
||||
image: '',
|
||||
courseTemplate: { id: 2, title: 'مفاهیم قرآنی' },
|
||||
sessionType: 'online',
|
||||
sessionTypeFa: 'آنلاین',
|
||||
durationMinutes: 75,
|
||||
order: 1,
|
||||
sessionConfig: {
|
||||
meetingLink: 'https://meet.example.com/quran-1',
|
||||
platform: 'google_meet',
|
||||
startTime: '2025-10-04T19:00:00.000Z',
|
||||
},
|
||||
materials: [],
|
||||
usedInTerms: [{ termId: 1 }],
|
||||
createdAt: '2025-09-25T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 103,
|
||||
title: 'احکام نماز جماعت',
|
||||
description: 'مرور احکام و شرایط نماز جماعت.',
|
||||
image: '',
|
||||
courseTemplate: { id: 3, title: 'فقه عبادات' },
|
||||
sessionType: 'video',
|
||||
sessionTypeFa: 'ویدئو',
|
||||
durationMinutes: 50,
|
||||
order: 2,
|
||||
sessionConfig: {
|
||||
minWatchedPercent: 80,
|
||||
mustCompleteBeforeNext: true,
|
||||
},
|
||||
materials: [],
|
||||
usedInTerms: [],
|
||||
createdAt: '2026-01-12T08:00:00.000Z',
|
||||
},
|
||||
]
|
||||
|
||||
export const sessionAttendance = new Map([
|
||||
[
|
||||
101,
|
||||
[
|
||||
{
|
||||
id: 1,
|
||||
userId: 100,
|
||||
sessionId: 101,
|
||||
status: 'present',
|
||||
user: {
|
||||
id: 100,
|
||||
firstName: 'فاطمه',
|
||||
lastName: 'رضایی',
|
||||
fullName: 'فاطمه رضایی',
|
||||
avatarUrl: '',
|
||||
address: { province: { name: 'تهران' }, city: { name: 'تهران' } },
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
userId: 102,
|
||||
sessionId: 101,
|
||||
status: 'absent',
|
||||
user: {
|
||||
id: 102,
|
||||
firstName: 'مریم',
|
||||
lastName: 'احمدی',
|
||||
fullName: 'مریم احمدی',
|
||||
avatarUrl: '',
|
||||
address: { province: { name: 'اصفهان' }, city: { name: 'اصفهان' } },
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
userId: 103,
|
||||
sessionId: 101,
|
||||
status: 'late',
|
||||
user: {
|
||||
id: 103,
|
||||
firstName: 'علی',
|
||||
lastName: 'علوی',
|
||||
fullName: 'علی علوی',
|
||||
avatarUrl: '',
|
||||
address: { province: { name: 'تهران' }, city: { name: 'تهران' } },
|
||||
},
|
||||
},
|
||||
],
|
||||
],
|
||||
])
|
||||
@@ -0,0 +1,57 @@
|
||||
export const adminTerms = [
|
||||
{
|
||||
id: 1,
|
||||
title: 'ترم پاییز ۱۴۰۴',
|
||||
description: 'ترم پاییز با محوریت آموزش معارف اسلامی.',
|
||||
image: 'https://picsum.photos/seed/term1/200/200',
|
||||
startDate: '2025-09-23T00:00:00.000Z',
|
||||
endDate: '2026-01-20T00:00:00.000Z',
|
||||
isActive: true,
|
||||
studentsCount: 18,
|
||||
coursesCount: 4,
|
||||
createdAt: '2025-08-01T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: 'ترم زمستان ۱۴۰۴',
|
||||
description: 'ترم زمستان با تمرکز بر فقه و اصول.',
|
||||
image: 'https://picsum.photos/seed/term2/200/200',
|
||||
startDate: '2026-01-21T00:00:00.000Z',
|
||||
endDate: '2026-04-20T00:00:00.000Z',
|
||||
isActive: true,
|
||||
studentsCount: 12,
|
||||
coursesCount: 3,
|
||||
createdAt: '2025-11-10T08:00:00.000Z',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: 'ترم بهار ۱۴۰۵',
|
||||
description: 'ترم بهار ویژه دورههای تخصصی.',
|
||||
image: '',
|
||||
startDate: '2026-04-21T00:00:00.000Z',
|
||||
endDate: '2026-08-21T00:00:00.000Z',
|
||||
isActive: false,
|
||||
studentsCount: 0,
|
||||
coursesCount: 2,
|
||||
createdAt: '2026-02-15T08:00:00.000Z',
|
||||
},
|
||||
]
|
||||
|
||||
export const termStudentLinks = new Map([
|
||||
[
|
||||
1,
|
||||
[
|
||||
{ userId: 100, isOnLeave: false },
|
||||
{ userId: 101, isOnLeave: false },
|
||||
{ userId: 102, isOnLeave: true },
|
||||
{ userId: 103, isOnLeave: false },
|
||||
],
|
||||
],
|
||||
[
|
||||
2,
|
||||
[
|
||||
{ userId: 104, isOnLeave: false },
|
||||
{ userId: 105, isOnLeave: false },
|
||||
],
|
||||
],
|
||||
])
|
||||
@@ -0,0 +1,92 @@
|
||||
export const adminTickets = [
|
||||
{
|
||||
id: 401,
|
||||
title: 'پیگیری وضعیت ثبتنام',
|
||||
user: {
|
||||
id: 100,
|
||||
firstName: 'فاطمه',
|
||||
lastName: 'رضایی',
|
||||
fullName: 'فاطمه رضایی',
|
||||
avatarUrl: '',
|
||||
},
|
||||
status: 'answered',
|
||||
statusLabel: 'پاسخ داده شده',
|
||||
createdAt: '2026-05-09T20:28:00.000Z',
|
||||
faCreatedAt: '۱۴۰۵/۰۲/۱۹',
|
||||
faCreatedTime: '۱۰:۳۰',
|
||||
messages: [
|
||||
{
|
||||
id: 1,
|
||||
sender: 'user',
|
||||
text: 'سلام وقت بخیر، در فرایند ثبتنام به مشکل برخوردم.',
|
||||
time: '۱۲:۳۵',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
sender: 'admin',
|
||||
text: 'سلام و عرض ادب. لطفا کد پیگیری ثبتنام را ارسال کنید.',
|
||||
time: '۱۲:۴۰',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
sender: 'user',
|
||||
text: 'کد ثبتنام: ۱۲۳۴۵۶۷۸',
|
||||
time: '۱۲:۴۲',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 402,
|
||||
title: 'سوال درباره جلسه آموزشی',
|
||||
user: {
|
||||
id: 102,
|
||||
firstName: 'مریم',
|
||||
lastName: 'احمدی',
|
||||
fullName: 'مریم احمدی',
|
||||
avatarUrl: '',
|
||||
},
|
||||
status: 'pending',
|
||||
statusLabel: 'در انتظار پاسخ',
|
||||
createdAt: '2026-05-08T09:15:00.000Z',
|
||||
faCreatedAt: '۱۴۰۵/۰۲/۱۸',
|
||||
faCreatedTime: '۱۲:۴۵',
|
||||
messages: [
|
||||
{
|
||||
id: 1,
|
||||
sender: 'user',
|
||||
text: 'سلام، درباره ساعت برگزاری جلسه چهارم سوال داشتم.',
|
||||
time: '۱۲:۴۵',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 403,
|
||||
title: 'درخواست بستن تیکت',
|
||||
user: {
|
||||
id: 103,
|
||||
firstName: 'علی',
|
||||
lastName: 'علوی',
|
||||
fullName: 'علی علوی',
|
||||
avatarUrl: '',
|
||||
},
|
||||
status: 'closed',
|
||||
statusLabel: 'بسته شده',
|
||||
createdAt: '2026-05-07T14:10:00.000Z',
|
||||
faCreatedAt: '۱۴۰۵/۰۲/۱۷',
|
||||
faCreatedTime: '۱۷:۴۰',
|
||||
messages: [
|
||||
{
|
||||
id: 1,
|
||||
sender: 'user',
|
||||
text: 'مشکل برطرف شد. لطفا تیکت بسته شود.',
|
||||
time: '۱۷:۴۰',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
sender: 'admin',
|
||||
text: 'با تشکر از شما. تیکت بسته شد.',
|
||||
time: '۱۷:۴۲',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,96 @@
|
||||
export const roles = [
|
||||
{ id: 1, name: 'admin' },
|
||||
{ id: 2, name: 'counselor' },
|
||||
{ id: 3, name: 'missionary' },
|
||||
{ id: 4, name: 'student' },
|
||||
{ id: 5, name: 'teacher' },
|
||||
]
|
||||
|
||||
const provinces = [
|
||||
{ id: 1, name: 'تهران' },
|
||||
{ id: 2, name: 'اصفهان' },
|
||||
{ id: 3, name: 'فارس' },
|
||||
{ id: 4, name: 'خراسان رضوی' },
|
||||
]
|
||||
const cities = {
|
||||
1: [
|
||||
{ id: 11, name: 'تهران' },
|
||||
{ id: 12, name: 'شمیرانات' },
|
||||
],
|
||||
2: [{ id: 21, name: 'اصفهان' }],
|
||||
3: [{ id: 31, name: 'شیراز' }],
|
||||
4: [{ id: 41, name: 'مشهد' }],
|
||||
}
|
||||
const provinceById = (id) => provinces.find((p) => p.id === id) || provinces[0]
|
||||
const cityForProvince = (id) => cities[id]?.[0] || cities[1][0]
|
||||
|
||||
const firstNames = [
|
||||
'فاطمه',
|
||||
'زهرا',
|
||||
'مریم',
|
||||
'علی',
|
||||
'حسین',
|
||||
'محمد',
|
||||
'سمیه',
|
||||
'نرگس',
|
||||
'حسن',
|
||||
'رضا',
|
||||
'مهدی',
|
||||
'الهام',
|
||||
'پروانه',
|
||||
'ساره',
|
||||
'مهسا',
|
||||
]
|
||||
const lastNames = [
|
||||
'رضایی',
|
||||
'محمدی',
|
||||
'حسینی',
|
||||
'احمدی',
|
||||
'جعفری',
|
||||
'علوی',
|
||||
'موسوی',
|
||||
'صالحی',
|
||||
'فاطمی',
|
||||
'کریمی',
|
||||
'تقوی',
|
||||
'مرادی',
|
||||
'هاشمی',
|
||||
'بهرامی',
|
||||
]
|
||||
|
||||
const pick = (arr, i) => arr[i % arr.length]
|
||||
|
||||
const makeUser = (i, overrides = {}) => {
|
||||
const firstName = pick(firstNames, i)
|
||||
const lastName = pick(lastNames, i + 3)
|
||||
const province = provinceById((i % 4) + 1)
|
||||
const city = cityForProvince(province.id)
|
||||
const role = roles[(i % 4) + 1]?.name || 'student'
|
||||
return {
|
||||
id: 100 + i,
|
||||
firstName,
|
||||
lastName,
|
||||
fullName: `${firstName} ${lastName}`,
|
||||
phoneNumber: `0912${String(1_000_000 + i).padStart(7, '0')}`,
|
||||
nationalCode: String(1_000_000_000 + i * 7).padStart(10, '0'),
|
||||
avatarUrl: '',
|
||||
status: i % 5 === 0 ? 'pending' : 'approved',
|
||||
roles: [role],
|
||||
roleId: roles.find((r) => r.name === role)?.id,
|
||||
address: {
|
||||
address: 'آدرس نمونه',
|
||||
province,
|
||||
city,
|
||||
},
|
||||
profile: {
|
||||
bio: '',
|
||||
birthDate: new Date(1990, i % 12, ((i * 3) % 27) + 1).toISOString(),
|
||||
maritalStatus: i % 2 ? 'single' : 'married',
|
||||
gender: i % 2 ? 'female' : 'male',
|
||||
},
|
||||
createdAt: new Date(Date.now() - i * 86_400_000).toISOString(),
|
||||
...overrides,
|
||||
}
|
||||
}
|
||||
|
||||
export const adminUsers = Array.from({ length: 24 }, (_, i) => makeUser(i))
|
||||
@@ -0,0 +1,47 @@
|
||||
export const provinces = [
|
||||
{ id: 1, name: 'تهران' },
|
||||
{ id: 2, name: 'اصفهان' },
|
||||
{ id: 3, name: 'فارس' },
|
||||
{ id: 4, name: 'خراسان رضوی' },
|
||||
{ id: 5, name: 'گیلان' },
|
||||
{ id: 6, name: 'مازندران' },
|
||||
{ id: 7, name: 'البرز' },
|
||||
{ id: 8, name: 'یزد' },
|
||||
]
|
||||
|
||||
export const cities = {
|
||||
1: [
|
||||
{ id: 11, name: 'تهران' },
|
||||
{ id: 12, name: 'شمیرانات' },
|
||||
{ id: 13, name: 'ری' },
|
||||
],
|
||||
2: [
|
||||
{ id: 21, name: 'اصفهان' },
|
||||
{ id: 22, name: 'کاشان' },
|
||||
{ id: 23, name: 'نجفآباد' },
|
||||
],
|
||||
3: [
|
||||
{ id: 31, name: 'شیراز' },
|
||||
{ id: 32, name: 'مرودشت' },
|
||||
],
|
||||
4: [
|
||||
{ id: 41, name: 'مشهد' },
|
||||
{ id: 42, name: 'نیشابور' },
|
||||
],
|
||||
5: [
|
||||
{ id: 51, name: 'رشت' },
|
||||
{ id: 52, name: 'لاهیجان' },
|
||||
],
|
||||
6: [
|
||||
{ id: 61, name: 'ساری' },
|
||||
{ id: 62, name: 'بابل' },
|
||||
],
|
||||
7: [
|
||||
{ id: 71, name: 'کرج' },
|
||||
{ id: 72, name: 'نظرآباد' },
|
||||
],
|
||||
8: [
|
||||
{ id: 81, name: 'یزد' },
|
||||
{ id: 82, name: 'میبد' },
|
||||
],
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
export const currentProfile = {
|
||||
id: 1,
|
||||
firstName: 'سجاد',
|
||||
lastName: 'محمدی',
|
||||
fullName: 'سجاد محمدی',
|
||||
phoneNumber: '09123456789',
|
||||
nationalCode: '0079827498',
|
||||
avatarUrl: '',
|
||||
status: 'approved',
|
||||
roles: ['admin'],
|
||||
address: {
|
||||
address: 'خیابان آزادی، پلاک ۱۲',
|
||||
province: { id: 1, name: 'تهران' },
|
||||
city: { id: 11, name: 'تهران' },
|
||||
},
|
||||
profile: {
|
||||
bio: 'مدیر سامانه و طلبه فعال در حوزه آموزش مجازی.',
|
||||
birthDate: '1989-06-12T00:00:00.000Z',
|
||||
maritalStatus: 'married',
|
||||
gender: 'male',
|
||||
educationStatus: 'graduate',
|
||||
seminaryLevel: 'level_3',
|
||||
universityLevel: 'master',
|
||||
universityName: 'تهران',
|
||||
fieldOfStudy: 'علوم قرآنی',
|
||||
avatarId: null,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
export const studentCourses = [
|
||||
{
|
||||
id: 11,
|
||||
title: 'اصول اخلاق اسلامی - پاییز',
|
||||
image: 'https://picsum.photos/seed/student1/200/200',
|
||||
teacher: { firstName: 'علی', lastName: 'حسنی', fullName: 'علی حسنی' },
|
||||
term: { id: 1, title: 'ترم پاییز ۱۴۰۴' },
|
||||
startDate: '2025-09-23T00:00:00.000Z',
|
||||
endDate: '2025-11-20T00:00:00.000Z',
|
||||
status: 'watching',
|
||||
averageScore: null,
|
||||
sessions: [
|
||||
{
|
||||
id: 1001,
|
||||
title: 'جلسه اول: مقدمه',
|
||||
sessionTypeFa: 'حضوری',
|
||||
durationMinutes: 90,
|
||||
status: 'completed',
|
||||
statusLabel: 'تکمیل شده',
|
||||
},
|
||||
{
|
||||
id: 1002,
|
||||
title: 'جلسه دوم: مبانی',
|
||||
sessionTypeFa: 'حضوری',
|
||||
durationMinutes: 90,
|
||||
status: 'in_progress',
|
||||
statusLabel: 'در حال بررسی',
|
||||
},
|
||||
{
|
||||
id: 1003,
|
||||
title: 'جلسه سوم: کاربردها',
|
||||
sessionTypeFa: 'حضوری',
|
||||
durationMinutes: 90,
|
||||
status: 'locked',
|
||||
statusLabel: 'قفل',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 12,
|
||||
title: 'مفاهیم قرآنی - پاییز',
|
||||
image: 'https://picsum.photos/seed/student2/200/200',
|
||||
teacher: { firstName: 'حسین', lastName: 'مرادی', fullName: 'حسین مرادی' },
|
||||
term: { id: 1, title: 'ترم پاییز ۱۴۰۴' },
|
||||
startDate: '2025-10-01T00:00:00.000Z',
|
||||
endDate: '2025-12-15T00:00:00.000Z',
|
||||
status: 'waitForExam',
|
||||
averageScore: 17.5,
|
||||
sessions: [
|
||||
{
|
||||
id: 1004,
|
||||
title: 'تفسیر سوره حمد',
|
||||
sessionTypeFa: 'آنلاین',
|
||||
durationMinutes: 75,
|
||||
status: 'completed',
|
||||
statusLabel: 'تکمیل شده',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 21,
|
||||
title: 'مفاهیم قرآنی - بهار قبل',
|
||||
image: '',
|
||||
teacher: { firstName: 'حسین', lastName: 'مرادی', fullName: 'حسین مرادی' },
|
||||
term: { id: 0, title: 'ترم بهار ۱۴۰۳' },
|
||||
startDate: '2024-03-21T00:00:00.000Z',
|
||||
endDate: '2024-06-21T00:00:00.000Z',
|
||||
status: 'completed',
|
||||
averageScore: 18.25,
|
||||
sessions: [],
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user