fix
This commit is contained in:
@@ -7,7 +7,7 @@ export const currentProfile = {
|
||||
nationalCode: '0079827498',
|
||||
avatarUrl: '',
|
||||
status: 'approved',
|
||||
roles: ['admin'],
|
||||
roles: ['user'],
|
||||
address: {
|
||||
address: 'خیابان آزادی، پلاک ۱۲',
|
||||
province: { id: 1, name: 'تهران' },
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
export const studentCertificates = [
|
||||
{
|
||||
id: 'cert-1',
|
||||
courseTitle: 'دوره مبانی اندیشه اسلامی',
|
||||
teacherName: 'علیرضا حسنی',
|
||||
startDate: '1404.05.12',
|
||||
endDate: '1404.07.12',
|
||||
thumbnailUrl: '',
|
||||
pdfUrl: '/files/certificates/cert-1.pdf',
|
||||
jpgUrl: '/files/certificates/cert-1.jpg',
|
||||
},
|
||||
{
|
||||
id: 'cert-2',
|
||||
courseTitle: 'تفسیر سوره بقره',
|
||||
teacherName: 'محمد رضایی',
|
||||
startDate: '1404.02.20',
|
||||
endDate: '1404.04.20',
|
||||
thumbnailUrl: '',
|
||||
pdfUrl: '/files/certificates/cert-2.pdf',
|
||||
jpgUrl: '/files/certificates/cert-2.jpg',
|
||||
},
|
||||
{
|
||||
id: 'cert-3',
|
||||
courseTitle: 'اخلاق در قرآن',
|
||||
teacherName: 'فاطمه حسینی',
|
||||
startDate: '1403.11.05',
|
||||
endDate: '1404.01.15',
|
||||
thumbnailUrl: '',
|
||||
pdfUrl: '/files/certificates/cert-3.pdf',
|
||||
jpgUrl: '/files/certificates/cert-3.jpg',
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,50 @@
|
||||
export const studentConsultantTitles = [
|
||||
{ value: 'course-talk', label: 'گفتگو درباره دوره' },
|
||||
{ value: 'academic', label: 'مشاوره تحصیلی' },
|
||||
{ value: 'career', label: 'مشاوره شغلی' },
|
||||
{ value: 'psychology', label: 'مشاوره روانشناسی' },
|
||||
{ value: 'other', label: 'سایر' },
|
||||
]
|
||||
|
||||
const STATUS_LABELS = {
|
||||
pending: 'در حال بررسی',
|
||||
approved: 'پاسخ داده شده',
|
||||
rejected: 'رد شده',
|
||||
closed: 'بسته شده',
|
||||
}
|
||||
|
||||
export const studentConsultants = [
|
||||
{
|
||||
id: 'c-1',
|
||||
requestNumber: 215,
|
||||
title: 'درخواست مشاوره',
|
||||
topicLabel: 'گفتگو درباره دوره',
|
||||
status: 'pending',
|
||||
statusLabel: STATUS_LABELS.pending,
|
||||
description: 'سوال در مورد محتوای دوره',
|
||||
timeLabel: '12:53',
|
||||
dateLabel: '1404/12/21',
|
||||
},
|
||||
{
|
||||
id: 'c-2',
|
||||
requestNumber: 198,
|
||||
title: 'درخواست مشاوره',
|
||||
topicLabel: 'مشاوره شغلی',
|
||||
status: 'approved',
|
||||
statusLabel: STATUS_LABELS.approved,
|
||||
description: 'راهنمایی برای انتخاب مسیر شغلی',
|
||||
timeLabel: '09:12',
|
||||
dateLabel: '1404/11/05',
|
||||
},
|
||||
{
|
||||
id: 'c-3',
|
||||
requestNumber: 174,
|
||||
title: 'درخواست مشاوره',
|
||||
topicLabel: 'مشاوره تحصیلی',
|
||||
status: 'rejected',
|
||||
statusLabel: STATUS_LABELS.rejected,
|
||||
description: 'برنامهریزی درسی',
|
||||
timeLabel: '16:40',
|
||||
dateLabel: '1404/10/02',
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,94 @@
|
||||
const sampleQuestions = () => [
|
||||
{
|
||||
id: 'q1',
|
||||
title: 'کدامیک از گزینههای زیر از نامهای دیگر قرآن کریم است؟',
|
||||
answers: [
|
||||
{ id: 'q1-a1', title: 'فرقان' },
|
||||
{ id: 'q1-a2', title: 'انجیل' },
|
||||
{ id: 'q1-a3', title: 'زبور' },
|
||||
{ id: 'q1-a4', title: 'تورات' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'q2',
|
||||
title: 'کدام سوره به «قلب قرآن» معروف است؟',
|
||||
answers: [
|
||||
{ id: 'q2-a1', title: 'سوره بقره' },
|
||||
{ id: 'q2-a2', title: 'سوره یس' },
|
||||
{ id: 'q2-a3', title: 'سوره الرحمن' },
|
||||
{ id: 'q2-a4', title: 'سوره نور' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'q3',
|
||||
title:
|
||||
'در مباحث علوم قرآنی، بحث «ناسخ و منسوخ» یکی از موضوعات مهمی است که به بررسی آیاتی میپردازد که حکم آنها بهوسیله آیات دیگر تغییر یافته یا برطرف شده است. برخی از مفسران بر این باورند که آشنایی با مفهوم نسخ برای فهم دقیقتر احکام شرعی و جلوگیری از برداشتهای نادرست از آیات ضروری است. با توجه به این توضیح، کدام گزینه تعریف درستی از «نسخ» در قرآن کریم ارائه میدهد؟',
|
||||
fullWidth: true,
|
||||
answers: [
|
||||
{ id: 'q3-a1', title: 'تغییر کامل متن آیات پس از نزول' },
|
||||
{ id: 'q3-a2', title: 'جایگزینی حکم یک آیه با حکم آیهای دیگر' },
|
||||
{ id: 'q3-a3', title: 'حذف آیه از قرآن به دستور پیامبر(ص)' },
|
||||
{ id: 'q3-a4', title: 'تغییر تلاوت آیه بدون تغییر در حکم' },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'q4',
|
||||
title: 'کدامیک از پیامبران لقب «خلیلالله» دارد؟',
|
||||
answers: [
|
||||
{ id: 'q4-a1', title: 'حضرت موسی (ع)' },
|
||||
{ id: 'q4-a2', title: 'حضرت ابراهیم (ع)' },
|
||||
{ id: 'q4-a3', title: 'حضرت نوح (ع)' },
|
||||
{ id: 'q4-a4', title: 'حضرت عیسی (ع)' },
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
export const studentExams = [
|
||||
{
|
||||
id: '1-l1-e1',
|
||||
title: 'آزمون جلسه اول',
|
||||
desc: 'جزئیات آزمون را مشاهده و سپس شروع آزمون را بزنید',
|
||||
questionsCount: 6,
|
||||
passingScore: 12,
|
||||
durationMinutes: 12,
|
||||
attemptsCount: 2,
|
||||
status: 'passed',
|
||||
statusLabel: 'قبول شده اید',
|
||||
questions: sampleQuestions(),
|
||||
attempts: [
|
||||
{
|
||||
id: 'a1',
|
||||
title: 'آزمون جلسه اول',
|
||||
score: 13.01,
|
||||
date: '2024-06-30T18:54:00.000Z',
|
||||
faDate: '۱۴۰۳/۰۴/۱۰',
|
||||
faTime: '۱۸:۵۴',
|
||||
status: 'passed',
|
||||
statusLabel: 'قبول شده',
|
||||
},
|
||||
{
|
||||
id: 'a2',
|
||||
title: 'آزمون جلسه اول',
|
||||
score: 9.98,
|
||||
date: '2024-06-29T18:54:00.000Z',
|
||||
faDate: '۱۴۰۳/۰۴/۱۰',
|
||||
faTime: '۱۸:۵۴',
|
||||
status: 'failed',
|
||||
statusLabel: 'قبول نشده',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: '1-l1-e2',
|
||||
title: 'آزمون جلسه دوم',
|
||||
desc: 'جزئیات آزمون را مشاهده و سپس شروع آزمون را بزنید',
|
||||
questionsCount: 10,
|
||||
passingScore: 14,
|
||||
durationMinutes: 20,
|
||||
attemptsCount: 0,
|
||||
status: 'not_started',
|
||||
statusLabel: 'شروع نشده',
|
||||
questions: sampleQuestions(),
|
||||
attempts: [],
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,93 @@
|
||||
const sampleSessions = (seed) => [
|
||||
{
|
||||
id: `${seed}-s1`,
|
||||
title: 'جلسه یک - مبانی اندیشه اسلامی',
|
||||
durationHours: 18,
|
||||
isSeen: true,
|
||||
hasQuiz: true,
|
||||
isOnline: true,
|
||||
needsAssignment: true,
|
||||
},
|
||||
{
|
||||
id: `${seed}-s2`,
|
||||
title: 'جلسه دو - مبانی اندیشه اسلامی',
|
||||
durationHours: 18,
|
||||
isSeen: false,
|
||||
hasQuiz: true,
|
||||
isOnline: true,
|
||||
needsAssignment: false,
|
||||
},
|
||||
{
|
||||
id: `${seed}-s3`,
|
||||
title: 'جلسه سه - مبانی اندیشه اسلامی',
|
||||
durationHours: 12,
|
||||
isSeen: false,
|
||||
hasQuiz: false,
|
||||
isOnline: false,
|
||||
needsAssignment: false,
|
||||
},
|
||||
]
|
||||
|
||||
const sampleExams = (seed) => [
|
||||
{
|
||||
id: `${seed}-e1`,
|
||||
title: 'آزمون جلسه اول',
|
||||
durationMinutes: 12,
|
||||
passingScore: 12,
|
||||
questionsCount: 6,
|
||||
},
|
||||
{
|
||||
id: `${seed}-e2`,
|
||||
title: 'آزمون جلسه دوم',
|
||||
durationMinutes: 20,
|
||||
passingScore: 14,
|
||||
questionsCount: 10,
|
||||
},
|
||||
]
|
||||
|
||||
export const studentLessons = [
|
||||
{
|
||||
id: '1-l1',
|
||||
title: 'درس مبانی اندیشه اسلامی',
|
||||
sessionsCount: 3,
|
||||
quizzesCount: 3,
|
||||
studentsCount: 34,
|
||||
endDate: '2025-09-03T00:00:00.000Z',
|
||||
faEndDate: '۱۴۰۴/۰۶/۱۲',
|
||||
sessions: sampleSessions('1-l1'),
|
||||
exams: sampleExams('1-l1'),
|
||||
},
|
||||
{
|
||||
id: '1-l2',
|
||||
title: 'درس اصول اخلاق اسلامی',
|
||||
sessionsCount: 3,
|
||||
quizzesCount: 3,
|
||||
studentsCount: 34,
|
||||
endDate: '2025-09-03T00:00:00.000Z',
|
||||
faEndDate: '۱۴۰۴/۰۶/۱۲',
|
||||
sessions: sampleSessions('1-l2'),
|
||||
exams: sampleExams('1-l2'),
|
||||
},
|
||||
{
|
||||
id: '2-l1',
|
||||
title: 'درس مبانی اندیشه اسلامی',
|
||||
sessionsCount: 3,
|
||||
quizzesCount: 3,
|
||||
studentsCount: 34,
|
||||
endDate: '2025-09-03T00:00:00.000Z',
|
||||
faEndDate: '۱۴۰۴/۰۶/۱۲',
|
||||
sessions: sampleSessions('2-l1'),
|
||||
exams: sampleExams('2-l1'),
|
||||
},
|
||||
{
|
||||
id: '2-l2',
|
||||
title: 'درس اصول اخلاق اسلامی',
|
||||
sessionsCount: 3,
|
||||
quizzesCount: 3,
|
||||
studentsCount: 34,
|
||||
endDate: '2025-09-03T00:00:00.000Z',
|
||||
faEndDate: '۱۴۰۴/۰۶/۱۲',
|
||||
sessions: sampleSessions('2-l2'),
|
||||
exams: sampleExams('2-l2'),
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,157 @@
|
||||
export const missionaryProfile = {
|
||||
id: 'me',
|
||||
fullName: 'آقای علیرضا احمدی',
|
||||
city: 'قم، ایران',
|
||||
level: 'پیشرفته',
|
||||
membershipDays: 23,
|
||||
rating: 4.8,
|
||||
requestsCount: 451,
|
||||
avatar: '',
|
||||
}
|
||||
|
||||
const STATUS_LABELS = {
|
||||
pending: 'در انتظار بررسی',
|
||||
approved: 'تایید شده',
|
||||
rejected: 'رد شده توسط موسسه',
|
||||
cancelled: 'لغو شده',
|
||||
}
|
||||
|
||||
const REQUEST_DESCRIPTION = `لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد.`
|
||||
|
||||
export const missionaryRequests = [
|
||||
{
|
||||
id: 'r-1',
|
||||
code: 1,
|
||||
title: 'درخواست شماره یک',
|
||||
requestNumber: 387,
|
||||
requesterName: 'حسین رضایی',
|
||||
requestDate: '1404/05/12',
|
||||
status: 'rejected',
|
||||
statusLabel: STATUS_LABELS.rejected,
|
||||
phone: '0912 152 1413',
|
||||
postalCode: '1232146890345',
|
||||
address:
|
||||
'قم، سالاریه، میدان پیچک، به سمت فرعی اول، میدان الهیه، ساختمان الیزیوم، طبقه منفی 1 واحد 152',
|
||||
description: REQUEST_DESCRIPTION,
|
||||
},
|
||||
{
|
||||
id: 'r-2',
|
||||
code: 2,
|
||||
title: 'درخواست شماره دو',
|
||||
requestNumber: 401,
|
||||
requesterName: 'مریم اکبری',
|
||||
requestDate: '1404/06/04',
|
||||
status: 'pending',
|
||||
statusLabel: STATUS_LABELS.pending,
|
||||
phone: '0912 884 2210',
|
||||
postalCode: '8136987710332',
|
||||
address: 'اصفهان، خیابان چهارباغ بالا، کوچه گلستان، پلاک 12',
|
||||
description: REQUEST_DESCRIPTION,
|
||||
},
|
||||
{
|
||||
id: 'r-3',
|
||||
code: 3,
|
||||
title: 'درخواست شماره سه',
|
||||
requestNumber: 412,
|
||||
requesterName: 'فاطمه حسینی',
|
||||
requestDate: '1404/06/18',
|
||||
status: 'approved',
|
||||
statusLabel: STATUS_LABELS.approved,
|
||||
phone: '0935 410 0091',
|
||||
postalCode: '9176548132201',
|
||||
address: 'مشهد، خیابان امام رضا، کوچه 14، پلاک 5',
|
||||
description: REQUEST_DESCRIPTION,
|
||||
},
|
||||
]
|
||||
|
||||
const DISPATCH_RESULT = `لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد.`
|
||||
|
||||
export const missionaryDispatches = [
|
||||
{
|
||||
id: 'd-1',
|
||||
code: 1_547_890,
|
||||
title: 'اعزام شماره یک',
|
||||
missionName: 'سفر به مشهد مقدس',
|
||||
location: 'زنجان، ایران',
|
||||
dispatchDate: '1404/12/12',
|
||||
statusLabel: 'انجام شده',
|
||||
requesterName: 'حسین مولایی',
|
||||
address:
|
||||
'قم، سالاریه، میدان پیچک، به سمت فرعی اول، میدان الهیه، ساختمان الیزیوم، طبقه منفی 1 واحد 152',
|
||||
result: DISPATCH_RESULT,
|
||||
},
|
||||
{
|
||||
id: 'd-2',
|
||||
code: 1_547_891,
|
||||
title: 'اعزام شماره دو',
|
||||
missionName: 'سفر به اصفهان',
|
||||
location: 'اصفهان، ایران',
|
||||
dispatchDate: '1404/04/09',
|
||||
statusLabel: 'در حال انجام',
|
||||
requesterName: 'مریم اکبری',
|
||||
address: 'اصفهان، خیابان چهارباغ، کوچه گلستان، پلاک 12',
|
||||
result: DISPATCH_RESULT,
|
||||
},
|
||||
{
|
||||
id: 'd-3',
|
||||
code: 1_547_892,
|
||||
title: 'اعزام شماره سه',
|
||||
missionName: 'سفر به مشهد مقدس',
|
||||
location: 'مشهد، ایران',
|
||||
dispatchDate: '1404/03/21',
|
||||
statusLabel: 'انجام شده',
|
||||
requesterName: 'فاطمه حسینی',
|
||||
address: 'مشهد، خیابان امام رضا، کوچه 14، پلاک 5',
|
||||
result: DISPATCH_RESULT,
|
||||
},
|
||||
]
|
||||
|
||||
const NARRATIVE_KIND = {
|
||||
manuscript: { key: 'manuscript', label: 'دست نوشته', tone: 'pink' },
|
||||
dispatched: { key: 'dispatched', label: 'اعزام شــــده', tone: 'gold' },
|
||||
}
|
||||
|
||||
const SAMPLE_BODY = `لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد.
|
||||
|
||||
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد.
|
||||
|
||||
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است.`
|
||||
|
||||
export const missionaryNarratives = [
|
||||
{
|
||||
id: 'n-1',
|
||||
code: 1,
|
||||
title: 'سفر به شهر زیبای مشهد مقدس، شهر علم و ادب',
|
||||
submittedAt: '۱۴۰۰/۷/۱۹, ۸:۳۰',
|
||||
kind: NARRATIVE_KIND.manuscript.key,
|
||||
kindLabel: NARRATIVE_KIND.manuscript.label,
|
||||
kindTone: NARRATIVE_KIND.manuscript.tone,
|
||||
body: SAMPLE_BODY,
|
||||
likes: 12,
|
||||
comments: 56,
|
||||
},
|
||||
{
|
||||
id: 'n-2',
|
||||
code: 2,
|
||||
title: 'سفر به اصفهان نصف جهان',
|
||||
submittedAt: '۱۴۰۰/۷/۱۹, ۸:۳۰',
|
||||
kind: NARRATIVE_KIND.dispatched.key,
|
||||
kindLabel: NARRATIVE_KIND.dispatched.label,
|
||||
kindTone: NARRATIVE_KIND.dispatched.tone,
|
||||
body: SAMPLE_BODY,
|
||||
likes: 24,
|
||||
comments: 9,
|
||||
},
|
||||
{
|
||||
id: 'n-3',
|
||||
code: 3,
|
||||
title: 'روایت شماره سه',
|
||||
submittedAt: '۱۴۰۰/۸/۲, ۹:۱۵',
|
||||
kind: NARRATIVE_KIND.manuscript.key,
|
||||
kindLabel: NARRATIVE_KIND.manuscript.label,
|
||||
kindTone: NARRATIVE_KIND.manuscript.tone,
|
||||
body: SAMPLE_BODY,
|
||||
likes: 3,
|
||||
comments: 1,
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,61 @@
|
||||
export const studentServiceTypes = [
|
||||
{ value: 'loan', label: 'وام' },
|
||||
{ value: 'consultation', label: 'مشاوره' },
|
||||
{ value: 'insurance', label: 'بیمه' },
|
||||
{ value: 'other', label: 'سایر' },
|
||||
]
|
||||
|
||||
export const studentServiceTitlesByType = {
|
||||
loan: [
|
||||
{ value: 'tuition-loan', label: 'وام شهریه' },
|
||||
{ value: 'living-loan', label: 'وام معیشت' },
|
||||
],
|
||||
consultation: [
|
||||
{ value: 'course-talk', label: 'گفتگو درباره دوره' },
|
||||
{ value: 'career-talk', label: 'مشاوره شغلی' },
|
||||
],
|
||||
insurance: [{ value: 'student-insurance', label: 'بیمه دانشجویی' }],
|
||||
other: [{ value: 'other-issue', label: 'موضوع دیگر' }],
|
||||
}
|
||||
|
||||
const STATUS_LABELS = {
|
||||
approved: 'تاییــد شـــــده',
|
||||
pending: 'در انتظار بررسی',
|
||||
rejected: 'رد شده',
|
||||
}
|
||||
|
||||
export const studentServices = [
|
||||
{
|
||||
id: 's-1',
|
||||
requestNumber: 387,
|
||||
title: 'درخواست وام',
|
||||
typeKey: 'loan',
|
||||
typeLabel: 'وام',
|
||||
status: 'approved',
|
||||
statusLabel: STATUS_LABELS.approved,
|
||||
description: 'لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ',
|
||||
createdAt: '1404/05/12',
|
||||
},
|
||||
{
|
||||
id: 's-2',
|
||||
requestNumber: 44,
|
||||
title: 'درخواست وام',
|
||||
typeKey: 'loan',
|
||||
typeLabel: 'وام',
|
||||
status: 'pending',
|
||||
statusLabel: STATUS_LABELS.pending,
|
||||
description: 'درخواست شهریه ترم جدید',
|
||||
createdAt: '1404/06/02',
|
||||
},
|
||||
{
|
||||
id: 's-3',
|
||||
requestNumber: 18,
|
||||
title: 'گفتگو درباره دوره',
|
||||
typeKey: 'consultation',
|
||||
typeLabel: 'مشاوره',
|
||||
status: 'rejected',
|
||||
statusLabel: STATUS_LABELS.rejected,
|
||||
description: 'سوال در مورد محتوای دوره',
|
||||
createdAt: '1404/04/22',
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,14 @@
|
||||
export const studentSessions = [
|
||||
{
|
||||
id: '1-l1-s1',
|
||||
title: 'جلسه یک - مبانی اندیشه اسلامی',
|
||||
desc: 'اطلاعات کامل این دوره را مشاهده کنید.',
|
||||
videoUrl: 'https://download.samplelib.com/mp4/sample-5s.mp4',
|
||||
poster: '',
|
||||
homeworkPrompt:
|
||||
'لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی بهبود ابزارهای کاربردی می باشد.',
|
||||
homeworkHint:
|
||||
'تکلیف به عنوان متن به کاربر گفته میشود و از آن خواسته میشود تا تکلیف را به صورت صوت یا تصویر ارسال نماید.',
|
||||
examId: '1-l1-e1',
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,75 @@
|
||||
const sampleLessons = (seed) => [
|
||||
{
|
||||
id: `${seed}-l1`,
|
||||
title: 'درس مبانی اندیشه اسلامی',
|
||||
learningHours: 18,
|
||||
sessionsCount: 3,
|
||||
quizzesCount: 3,
|
||||
studentsCount: 34,
|
||||
},
|
||||
{
|
||||
id: `${seed}-l2`,
|
||||
title: 'درس اصول اخلاق اسلامی',
|
||||
learningHours: 18,
|
||||
sessionsCount: 3,
|
||||
quizzesCount: 3,
|
||||
studentsCount: 34,
|
||||
},
|
||||
]
|
||||
|
||||
export const studentTerms = [
|
||||
{
|
||||
id: 1,
|
||||
title: 'دوره مبانی اندیشه اسلامی',
|
||||
teacher: { firstName: 'علیرضا', lastName: 'حسنی', fullName: 'علیرضا حسنی' },
|
||||
teacherName: 'علیرضا حسنی',
|
||||
status: 'watching',
|
||||
statusLabel: 'در حال گذراندن',
|
||||
startDate: '2025-09-23T00:00:00.000Z',
|
||||
endDate: '2026-01-20T00:00:00.000Z',
|
||||
faStartDate: '۱۴۰۴/۰۵/۱۲',
|
||||
faEndDate: '۱۴۰۴/۰۷/۱۲',
|
||||
courses: sampleLessons(1),
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
title: 'دوره اصول اخلاق اسلامی',
|
||||
teacher: { firstName: 'حسین', lastName: 'نیک محمدی', fullName: 'حسین نیک محمدی' },
|
||||
teacherName: 'حسین نیک محمدی',
|
||||
status: 'waitForExam',
|
||||
statusLabel: 'در انتظار آزمون',
|
||||
startDate: '2025-09-23T00:00:00.000Z',
|
||||
endDate: '2026-01-20T00:00:00.000Z',
|
||||
faStartDate: '۱۴۰۴/۰۵/۱۲',
|
||||
faEndDate: '۱۴۰۴/۰۷/۱۲',
|
||||
courses: sampleLessons(2),
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
title: 'دوره معارف قرآنی',
|
||||
teacher: { firstName: 'مریم', lastName: 'احمدی', fullName: 'مریم احمدی' },
|
||||
teacherName: 'مریم احمدی',
|
||||
status: 'completed',
|
||||
statusLabel: 'تکمیل شده',
|
||||
startDate: '2025-01-20T00:00:00.000Z',
|
||||
endDate: '2025-05-20T00:00:00.000Z',
|
||||
faStartDate: '۱۴۰۳/۱۱/۰۱',
|
||||
faEndDate: '۱۴۰۴/۰۳/۰۱',
|
||||
gpa: 19.255,
|
||||
courses: sampleLessons(3),
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
title: 'دوره تاریخ تشیع',
|
||||
teacher: { firstName: 'فاطمه', lastName: 'رضایی', fullName: 'فاطمه رضایی' },
|
||||
teacherName: 'فاطمه رضایی',
|
||||
status: 'failed',
|
||||
statusLabel: 'عدم قبولی',
|
||||
startDate: '2024-09-22T00:00:00.000Z',
|
||||
endDate: '2024-12-22T00:00:00.000Z',
|
||||
faStartDate: '۱۴۰۳/۰۷/۰۱',
|
||||
faEndDate: '۱۴۰۳/۱۰/۰۱',
|
||||
gpa: 8.5,
|
||||
courses: sampleLessons(4),
|
||||
},
|
||||
]
|
||||
@@ -0,0 +1,15 @@
|
||||
import { paginate } from '@/services/mock/helpers'
|
||||
import { register } from '@/services/mock/registry'
|
||||
import { endpoints } from '@/services/api/endpoints'
|
||||
import { studentCertificates } from '@/services/mock/fixtures/student-certificates'
|
||||
|
||||
register('GET', endpoints.getStudentCertificates, ({ query }) =>
|
||||
paginate(studentCertificates, query)
|
||||
)
|
||||
|
||||
register('GET', endpoints.downloadStudentCertificate, ({ params, query }) => {
|
||||
const cert = studentCertificates.find((c) => String(c.id) === String(params.id))
|
||||
const format = query?.format === 'jpg' ? 'jpg' : 'pdf'
|
||||
const url = format === 'jpg' ? cert?.jpgUrl : cert?.pdfUrl
|
||||
return { data: { id: params.id, format, url: url || '#' } }
|
||||
})
|
||||
@@ -0,0 +1,29 @@
|
||||
import { paginate } from '@/services/mock/helpers'
|
||||
import { register } from '@/services/mock/registry'
|
||||
import { endpoints } from '@/services/api/endpoints'
|
||||
import {
|
||||
studentConsultantTitles,
|
||||
studentConsultants,
|
||||
} from '@/services/mock/fixtures/student-consultants'
|
||||
|
||||
register('GET', endpoints.getStudentConsultants, ({ query }) => paginate(studentConsultants, query))
|
||||
|
||||
register('POST', endpoints.createStudentConsultant, ({ data }) => {
|
||||
const id = `c-${studentConsultants.length + 1}`
|
||||
const next = {
|
||||
id,
|
||||
requestNumber: 500 + studentConsultants.length + 1,
|
||||
title: 'درخواست مشاوره',
|
||||
topicLabel:
|
||||
studentConsultantTitles.find((t) => t.value === data?.title)?.label || data?.title || '—',
|
||||
status: 'pending',
|
||||
statusLabel: 'در حال بررسی',
|
||||
description: data?.description || '',
|
||||
timeLabel: '12:00',
|
||||
dateLabel: '1404/06/12',
|
||||
}
|
||||
studentConsultants.unshift(next)
|
||||
return { data: next }
|
||||
})
|
||||
|
||||
register('GET', endpoints.getStudentConsultantTitles, () => ({ data: studentConsultantTitles }))
|
||||
@@ -0,0 +1,27 @@
|
||||
import { register } from '@/services/mock/registry'
|
||||
import { endpoints } from '@/services/api/endpoints'
|
||||
import { studentExams } from '@/services/mock/fixtures/student-exams'
|
||||
|
||||
register('GET', endpoints.showStudentExam, ({ params }) => {
|
||||
const exam = studentExams.find((e) => String(e.id) === String(params.id))
|
||||
if (exam) return { data: exam }
|
||||
const fallback = studentExams[1]
|
||||
return { data: { ...fallback, id: params.id } }
|
||||
})
|
||||
|
||||
register('POST', endpoints.startStudentExamAttempt, ({ params }) => ({
|
||||
data: { id: params.id, status: 'started', message: 'آزمون آغاز شد' },
|
||||
}))
|
||||
|
||||
register('POST', endpoints.submitStudentExamAttempt, ({ params, data }) => {
|
||||
const answers = data?.answers || {}
|
||||
const total = Object.keys(answers).length
|
||||
return {
|
||||
data: {
|
||||
id: params.id,
|
||||
submitted: true,
|
||||
score: total > 0 ? (12 + Math.random() * 6).toFixed(2) : 0,
|
||||
message: 'پاسخهای شما با موفقیت ثبت شد.',
|
||||
},
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,11 @@
|
||||
import { register } from '@/services/mock/registry'
|
||||
import { endpoints } from '@/services/api/endpoints'
|
||||
import { studentLessons } from '@/services/mock/fixtures/student-lessons'
|
||||
|
||||
register('GET', endpoints.showStudentLesson, ({ params }) => {
|
||||
const lesson = studentLessons.find((l) => String(l.id) === String(params.id))
|
||||
if (lesson) return { data: lesson }
|
||||
// fallback so any term/lesson combo resolves
|
||||
const fallback = studentLessons[0]
|
||||
return { data: { ...fallback, id: params.id } }
|
||||
})
|
||||
@@ -0,0 +1,21 @@
|
||||
import { paginate } from '@/services/mock/helpers'
|
||||
import { register } from '@/services/mock/registry'
|
||||
import { endpoints } from '@/services/api/endpoints'
|
||||
import {
|
||||
missionaryDispatches,
|
||||
missionaryNarratives,
|
||||
missionaryProfile,
|
||||
missionaryRequests,
|
||||
} from '@/services/mock/fixtures/student-missionary'
|
||||
|
||||
register('GET', endpoints.getMissionaryProfile, () => ({ data: missionaryProfile }))
|
||||
|
||||
register('GET', endpoints.getMissionaryRequests, ({ query }) => paginate(missionaryRequests, query))
|
||||
|
||||
register('GET', endpoints.getMissionaryDispatches, ({ query }) =>
|
||||
paginate(missionaryDispatches, query)
|
||||
)
|
||||
|
||||
register('GET', endpoints.getMissionaryNarratives, ({ query }) =>
|
||||
paginate(missionaryNarratives, query)
|
||||
)
|
||||
@@ -0,0 +1,33 @@
|
||||
import { paginate } from '@/services/mock/helpers'
|
||||
import { register } from '@/services/mock/registry'
|
||||
import { endpoints } from '@/services/api/endpoints'
|
||||
import {
|
||||
studentServiceTitlesByType,
|
||||
studentServiceTypes,
|
||||
studentServices,
|
||||
} from '@/services/mock/fixtures/student-services'
|
||||
|
||||
register('GET', endpoints.getStudentServices, ({ query }) => paginate(studentServices, query))
|
||||
|
||||
register('POST', endpoints.createStudentService, ({ data }) => {
|
||||
const id = `s-${studentServices.length + 1}`
|
||||
const next = {
|
||||
id,
|
||||
requestNumber: 500 + studentServices.length + 1,
|
||||
title: data?.title || '—',
|
||||
typeKey: data?.typeKey || 'other',
|
||||
typeLabel: studentServiceTypes.find((t) => t.value === data?.typeKey)?.label || 'سایر',
|
||||
status: 'pending',
|
||||
statusLabel: 'در انتظار بررسی',
|
||||
description: data?.description || '',
|
||||
createdAt: '1404/06/12',
|
||||
}
|
||||
studentServices.unshift(next)
|
||||
return { data: next }
|
||||
})
|
||||
|
||||
register('GET', endpoints.getStudentServiceTypes, () => ({ data: studentServiceTypes }))
|
||||
|
||||
register('GET', endpoints.getStudentServiceTitles, ({ query }) => ({
|
||||
data: studentServiceTitlesByType[query.type] || [],
|
||||
}))
|
||||
@@ -0,0 +1,14 @@
|
||||
import { register } from '@/services/mock/registry'
|
||||
import { endpoints } from '@/services/api/endpoints'
|
||||
import { studentSessions } from '@/services/mock/fixtures/student-sessions'
|
||||
|
||||
register('GET', endpoints.showStudentSession, ({ params }) => {
|
||||
const session = studentSessions.find((s) => String(s.id) === String(params.id))
|
||||
if (session) return { data: session }
|
||||
const fallback = studentSessions[0]
|
||||
return { data: { ...fallback, id: params.id } }
|
||||
})
|
||||
|
||||
register('POST', endpoints.submitStudentSessionHomework, ({ params }) => ({
|
||||
data: { id: params.id, status: 'submitted', message: 'تکلیف با موفقیت ارسال شد' },
|
||||
}))
|
||||
@@ -0,0 +1,21 @@
|
||||
import { register } from '@/services/mock/registry'
|
||||
import { endpoints } from '@/services/api/endpoints'
|
||||
import { findOrThrow, paginate } from '@/services/mock/helpers'
|
||||
import { studentTerms } from '@/services/mock/fixtures/student-terms'
|
||||
|
||||
const CURRENT_STATUSES = new Set(['watching', 'waitForExam'])
|
||||
const ENDED_STATUSES = new Set(['completed', 'failed'])
|
||||
|
||||
register('GET', endpoints.getStudentTerms, ({ query }) => {
|
||||
let list = [...studentTerms]
|
||||
if (query.status === 'current') {
|
||||
list = list.filter((t) => CURRENT_STATUSES.has(t.status))
|
||||
} else if (query.status === 'ended') {
|
||||
list = list.filter((t) => ENDED_STATUSES.has(t.status))
|
||||
}
|
||||
return paginate(list, query)
|
||||
})
|
||||
|
||||
register('GET', endpoints.showStudentTerm, ({ params }) => ({
|
||||
data: findOrThrow(studentTerms, params.id),
|
||||
}))
|
||||
Reference in New Issue
Block a user