fix: education
Deploy banu-front / deploy (push) Successful in 1m21s

This commit is contained in:
sajjadtalkhabi
2026-05-28 19:49:00 +03:30
parent 9660e3fe8f
commit d42b7aaa7b
27 changed files with 362 additions and 219 deletions
+58 -23
View File
@@ -32,16 +32,34 @@
@blur="validateAt('title', form.title)"
/>
<TextField
v-model="form.passingScore"
name="passingScore"
v-model="form.minimumScore"
name="minimumScore"
label="حد نصاب قبولی"
inputmode="numeric"
:convert-digits="true"
:error="errors.passingScore"
@blur="validateAt('passingScore', form.passingScore)"
:error="errors.minimumScore"
@blur="validateAt('minimumScore', form.minimumScore)"
/>
<TextField
v-model="form.score"
name="score"
label="کل نمره آزمون"
inputmode="numeric"
:convert-digits="true"
:error="errors.score"
@blur="validateAt('score', form.score)"
/>
<TextField
v-model="form.durationMinutes"
name="durationMinutes"
label="مدت زمان (دقیقه)"
inputmode="numeric"
:convert-digits="true"
:error="errors.durationMinutes"
@blur="validateAt('durationMinutes', form.durationMinutes)"
/>
<div class="exam-form__toggle-cell">
<ToggleSwitch v-model="form.isActive" label="آزمون فعال باشد" />
<ToggleSwitch v-model="form.isRandom" label="به صــــورت رندوم باشد." />
</div>
</div>
</div>
@@ -122,8 +140,10 @@ const isEditMode = computed(() => !!examId.value)
const form = ref({
title: '',
sessionId: '',
passingScore: '',
isActive: true,
minimumScore: '',
score: '',
durationMinutes: '',
isRandom: true,
description: '',
})
@@ -145,7 +165,7 @@ const questionError = ref('')
const { validate, validateAt, errors } = useYup(examSchema)
const sessionSearch = ref('')
const sessionFilters = computed(() => ({ title: sessionSearch.value }))
const sessionFilters = computed(() => ({ search: sessionSearch.value }))
const sessionPagination = ref({ page: 1, perPage: 10 })
const { data: sessionsResponse } = useAdminSessionsListQuery(sessionFilters, sessionPagination)
const selectedSession = ref(null)
@@ -183,18 +203,24 @@ const normalizeExistingQuestions = (raw = []) => {
})
}
watch(existingExam, (exam) => {
if (!exam) return
if (exam.session) selectedSession.value = exam.session
form.value = {
title: exam.title || '',
sessionId: exam.session?.id || exam.sessionId || '',
passingScore: exam.passScore ?? '',
isActive: exam.isActive ?? true,
description: exam.description || '',
}
questions.value = normalizeExistingQuestions(exam.questions)
})
watch(
existingExam,
(exam) => {
if (!exam) return
if (exam.session) selectedSession.value = exam.session
form.value = {
title: exam.title || '',
sessionId: exam.session?.id || exam.sessionId || '',
minimumScore: exam.minimumScore ?? exam.passScore ?? '',
score: exam.score ?? '',
durationMinutes: exam.durationMinutes ?? '',
isRandom: exam.isRandom ?? true,
description: exam.description || '',
}
questions.value = normalizeExistingQuestions(exam.questions)
},
{ immediate: true }
)
const validateLocalQuestions = () => {
const localOnes = questions.value.filter((q) => q.__local === true)
@@ -235,8 +261,10 @@ const buildExamPayload = (values) => ({
sessionId: values.sessionId,
title: values.title,
description: values.description,
passingScore: Number(values.passingScore) || 0,
isActive: values.isActive,
minimumScore: Number(values.minimumScore) || 0,
score: Number(values.score) || 0,
durationMinutes: Number(values.durationMinutes) || 0,
isRandom: values.isRandom,
})
const addExamMutation = useAddAdminExamMutation()
@@ -298,7 +326,6 @@ const onCancel = () => router.push({ name: 'admin-exams' })
}
&__card {
background: rgba(255, 255, 255, 60%);
border-radius: 1.5rem;
padding: 1rem;
box-shadow: 0 8px 24px rgba(0, 0, 0, 2.5%);
@@ -322,6 +349,14 @@ const onCancel = () => router.push({ name: 'admin-exams' })
display: flex;
align-items: flex-end;
min-height: 4.25rem;
margin-right: 40px;
margin-top: 10px;
> div {
height: 100%;
display: flex;
align-items: center;
}
}
&__error {