@@ -142,9 +142,13 @@ const sessionListFilters = computed(() => ({
|
||||
courseId: form.value.courseId || undefined,
|
||||
}))
|
||||
const sessionPagination = ref({ page: 1, perPage: 10 })
|
||||
const { data: sessionsResponse } = useAdminSessionsListQuery(sessionListFilters, sessionPagination, {
|
||||
enabled: () => !!form.value.courseId,
|
||||
})
|
||||
const { data: sessionsResponse } = useAdminSessionsListQuery(
|
||||
sessionListFilters,
|
||||
sessionPagination,
|
||||
{
|
||||
enabled: () => !!form.value.courseId,
|
||||
}
|
||||
)
|
||||
const sessionOptions = computed(() => sessionsResponse.value?.data ?? [])
|
||||
|
||||
const searchTerms = useDebounce((q) => {
|
||||
|
||||
@@ -142,14 +142,13 @@ import BaseButton from '@/components/BaseButton.vue'
|
||||
import SvgIcon from '@/components/icons/SvgIcon.vue'
|
||||
import TextField from '@/components/form/TextField.vue'
|
||||
import SelectField from '@/components/form/SelectField.vue'
|
||||
import LineTitleBlock from '@/components/LineTitleBlock.vue'
|
||||
import FileUploader from '@/components/form/FileUploader.vue'
|
||||
import { objectToFormData } from '@/utils/object-to-formdata'
|
||||
import { useUploadMediaMutation } from '@/services/query/auth'
|
||||
import TextareaField from '@/components/form/TextareaField.vue'
|
||||
import DatePickerField from '@/components/form/DatePickerField.vue'
|
||||
import { assignmentSchema } from '@/features/admin/assignments/schema'
|
||||
import { useAdminTermsListQuery } from '@/services/query/admin-terms'
|
||||
import { assignmentSchema } from '@/features/admin/assignments/schema'
|
||||
import { useAdminCoursesListQuery } from '@/services/query/admin-courses'
|
||||
import { useAdminSessionsListQuery } from '@/services/query/admin-sessions'
|
||||
import {
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<LineInfoBlock title="توضیحات" :desc="assignment.description" />
|
||||
</div>
|
||||
|
||||
<div v-if="attachmentItems.length" class="assignment-details__attachments">
|
||||
<div v-if="attachmentItems.length > 0" class="assignment-details__attachments">
|
||||
<LineTitleBlock title="فایلهای تکلیف" title-en="Attachments" />
|
||||
<ul class="assignment-details__attachments-list">
|
||||
<li v-for="file in attachmentItems" :key="file.id">
|
||||
|
||||
@@ -77,7 +77,6 @@ import SvgIcon from '@/components/icons/SvgIcon.vue'
|
||||
import NoItems from '@/components/blocks/NoItems.vue'
|
||||
import { formatJalaaliDate } from '@/utils/date-utils'
|
||||
import { usePagination } from '@/composables/usePagination'
|
||||
import LineTitleBlock from '@/components/LineTitleBlock.vue'
|
||||
import PaginationBlock from '@/components/blocks/PaginationBlock.vue'
|
||||
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
|
||||
import { useAdminAssignmentSubmissionsQuery } from '@/services/query/admin-assignments'
|
||||
|
||||
@@ -82,7 +82,6 @@ import BaseButton from '@/components/BaseButton.vue'
|
||||
import SvgIcon from '@/components/icons/SvgIcon.vue'
|
||||
import NoItems from '@/components/blocks/NoItems.vue'
|
||||
import CircleButton from '@/components/CircleButton.vue'
|
||||
import LineTitleBlock from '@/components/LineTitleBlock.vue'
|
||||
import { adminCoursesKeys } from '@/services/query/admin-courses'
|
||||
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
|
||||
import {
|
||||
|
||||
@@ -142,9 +142,13 @@ const sessionListFilters = computed(() => ({
|
||||
courseId: form.value.courseId || undefined,
|
||||
}))
|
||||
const sessionPagination = ref({ page: 1, perPage: 10 })
|
||||
const { data: sessionsResponse } = useAdminSessionsListQuery(sessionListFilters, sessionPagination, {
|
||||
enabled: () => !!form.value.courseId,
|
||||
})
|
||||
const { data: sessionsResponse } = useAdminSessionsListQuery(
|
||||
sessionListFilters,
|
||||
sessionPagination,
|
||||
{
|
||||
enabled: () => !!form.value.courseId,
|
||||
}
|
||||
)
|
||||
const sessionOptions = computed(() => sessionsResponse.value?.data ?? [])
|
||||
|
||||
const searchTerms = useDebounce((q) => {
|
||||
|
||||
@@ -259,8 +259,7 @@ const answerStateClass = (answerId, question) => {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
column-gap: 1.25rem;
|
||||
row-gap: 0.5rem;
|
||||
gap: 0.5rem 1.25rem;
|
||||
color: #8e8e8e;
|
||||
}
|
||||
|
||||
@@ -336,8 +335,7 @@ const answerStateClass = (answerId, question) => {
|
||||
&__answers {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
column-gap: 3rem;
|
||||
row-gap: 1.25rem;
|
||||
gap: 1.25rem 3rem;
|
||||
}
|
||||
|
||||
&__answer {
|
||||
|
||||
@@ -125,7 +125,7 @@ const onSubmit = (close) => {
|
||||
}
|
||||
|
||||
&__divider {
|
||||
border-block-end: 1px solid #dddddd;
|
||||
border-block-end: 1px solid #ddd;
|
||||
margin-block: 0.5rem;
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ const onSendMessage = (data) => {
|
||||
}
|
||||
|
||||
&__divider {
|
||||
border-block-end: 1px solid #dddddd;
|
||||
border-block-end: 1px solid #ddd;
|
||||
margin-block: 0.5rem;
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,6 @@ import SvgIcon from '@/components/icons/SvgIcon.vue'
|
||||
import NoItems from '@/components/blocks/NoItems.vue'
|
||||
import SelectField from '@/components/form/SelectField.vue'
|
||||
import { usePagination } from '@/composables/usePagination'
|
||||
import LineTitleBlock from '@/components/LineTitleBlock.vue'
|
||||
import PaginationBlock from '@/components/blocks/PaginationBlock.vue'
|
||||
import { useAdminTermsListQuery } from '@/services/query/admin-terms'
|
||||
import { useAdminCoursesListQuery } from '@/services/query/admin-courses'
|
||||
|
||||
@@ -125,9 +125,7 @@ const contentType = computed(() => collectionToContentType(contentMedia.value?.c
|
||||
|
||||
const contentTypeLabel = computed(() => COURSE_CONTENT_TYPE[contentType.value] || '—')
|
||||
|
||||
const mediaUrl = computed(
|
||||
() => contentMedia.value?.url || contentMedia.value?.downloadUrl || ''
|
||||
)
|
||||
const mediaUrl = computed(() => contentMedia.value?.url || contentMedia.value?.downloadUrl || '')
|
||||
|
||||
const mediaFileName = computed(() => contentMedia.value?.fileName || 'فایل پیوست')
|
||||
</script>
|
||||
|
||||
-1
@@ -247,7 +247,6 @@ import {
|
||||
SEMINARY_LEVEL,
|
||||
SESSION_CANCELLATION_RESPONSE,
|
||||
UNIVERSITY_LEVEL,
|
||||
USER_STATUS,
|
||||
VERIFICATION_MEDIA_TYPE,
|
||||
} from '@/enums'
|
||||
|
||||
|
||||
@@ -111,11 +111,11 @@ import TextareaField from '@/components/form/TextareaField.vue'
|
||||
import { useSaveRegisterDataMutation } from '@/services/query/auth'
|
||||
import StepActions from '@/features/auth/components/studentRegister/StepActions.vue'
|
||||
import { educationalInformationSchema } from '@/features/auth/schema/student-register'
|
||||
import { EDUCATION_STATUS, SEMINARY_LEVEL, STUDENT_REGISTRATION, UNIVERSITY_LEVEL } from '@/enums'
|
||||
import {
|
||||
toKeyValueList,
|
||||
useStudentRegistrationStore,
|
||||
} from '@/features/auth/store/student-registration'
|
||||
import { EDUCATION_STATUS, SEMINARY_LEVEL, STUDENT_REGISTRATION, UNIVERSITY_LEVEL } from '@/enums'
|
||||
|
||||
const store = useStudentRegistrationStore()
|
||||
|
||||
|
||||
@@ -113,8 +113,8 @@ import SelectField from '@/components/form/SelectField.vue'
|
||||
import LineTitleBlock from '@/components/LineTitleBlock.vue'
|
||||
import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
|
||||
import TextareaField from '@/components/form/TextareaField.vue'
|
||||
import { PROPAGATION_PLATFORM, STUDENT_REGISTRATION } from '@/enums'
|
||||
import { useSaveRegisterDataMutation } from '@/services/query/auth'
|
||||
import { PROPAGATION_PLATFORM, STUDENT_REGISTRATION } from '@/enums'
|
||||
import StepActions from '@/features/auth/components/studentRegister/StepActions.vue'
|
||||
import { professionalInformationSchema } from '@/features/auth/schema/student-register'
|
||||
import {
|
||||
|
||||
@@ -37,11 +37,12 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, ref } from 'vue'
|
||||
import { toast } from 'vue3-toastify'
|
||||
import useYup from '@/composables/useYup'
|
||||
import { computed, ref } from 'vue'
|
||||
import { STUDENT_REGISTRATION } from '@/enums'
|
||||
import LineTitleBlock from '@/components/LineTitleBlock.vue'
|
||||
import { useSaveRegisterDataMutation } from '@/services/query/auth'
|
||||
import StepActions from '@/features/auth/components/studentRegister/StepActions.vue'
|
||||
import { skillAssessmentPart7Schema } from '@/features/auth/schema/student-register'
|
||||
import MediaRecorder from '@/features/auth/components/studentRegister/MediaRecorder.vue'
|
||||
@@ -49,7 +50,6 @@ import {
|
||||
toKeyValueList,
|
||||
useStudentRegistrationStore,
|
||||
} from '@/features/auth/store/student-registration'
|
||||
import { useSaveRegisterDataMutation } from '@/services/query/auth'
|
||||
|
||||
const store = useStudentRegistrationStore()
|
||||
|
||||
|
||||
@@ -251,7 +251,7 @@ export const useStudentRegistrationStore = defineStore('studentRegistration', ()
|
||||
Object.entries(flat).forEach(([key, value]) => {
|
||||
const section = FIELD_TO_SECTION[key]
|
||||
if (!section) return
|
||||
buckets[section] = { ...(buckets[section] || {}), [key]: value }
|
||||
buckets[section] = { ...buckets[section], [key]: value }
|
||||
})
|
||||
Object.entries(buckets).forEach(([section, patch]) => {
|
||||
const target = sectionRefs[section]
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
import { computed } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import SvgIcon from '@/components/icons/SvgIcon.vue'
|
||||
import { useStudentExamQuery } from '@/services/query/student-exams'
|
||||
import BoxedIconTitleBlock from '@/components/blocks/BoxedIconTitleBlock.vue'
|
||||
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
|
||||
import SimpleTitleIconBlock from '@/components/blocks/SimpleTitleIconBlock.vue'
|
||||
import StudentExamSummary from '@/features/student/exams/components/StudentExamSummary.vue'
|
||||
import StudentExamAttemptItem from '@/features/student/exams/components/StudentExamAttemptItem.vue'
|
||||
import { useStudentExamQuery } from '@/services/query/student-exams'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
@@ -108,10 +108,10 @@ import BaseButton from '@/components/BaseButton.vue'
|
||||
import NoItems from '@/components/blocks/NoItems.vue'
|
||||
import TabsBlock from '@/components/blocks/TabsBlock.vue'
|
||||
import { objectToFormData } from '@/utils/object-to-formdata'
|
||||
import { useUploadMediaMutation } from '@/services/query/auth'
|
||||
import VoiceRecorder from '@/components/form/VoiceRecorder.vue'
|
||||
import ImageUploader from '@/components/form/ImageUploader.vue'
|
||||
import VideoPlayerBlock from '@/components/blocks/VideoPlayerBlock.vue'
|
||||
import { useUploadMediaMutation } from '@/services/query/auth'
|
||||
import BoxedIconTitleBlock from '@/components/blocks/BoxedIconTitleBlock.vue'
|
||||
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
|
||||
import {
|
||||
|
||||
@@ -5,10 +5,7 @@
|
||||
</div>
|
||||
|
||||
<div class="student-term-summary__info">
|
||||
<div
|
||||
class="student-term-summary__status"
|
||||
:class="`student-term-summary__status--${status}`"
|
||||
>
|
||||
<div class="student-term-summary__status" :class="`student-term-summary__status--${status}`">
|
||||
<span class="student-term-summary__status-label">وضعیت دوره :</span>
|
||||
<span class="student-term-summary__status-value">{{ statusLabel }}</span>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user