fix
Deploy banu-front / deploy (push) Successful in 1m20s

This commit is contained in:
sajjadtalkhabi
2026-06-27 20:07:58 +03:30
parent 2c617258f4
commit e700609236
22 changed files with 236 additions and 177 deletions
@@ -4,8 +4,8 @@
<p class="student-session-item__title">{{ session.title || '—' }}</p>
<div class="student-session-item__hours">
<SvgIcon name="calendar" :size="9" color="#007074" />
<span class="student-session-item__hours-label">زمان جلسه :</span>
<span class="student-session-item__hours-value">{{ durationText }}</span>
<span class="student-session-item__hours-label">مهلت :</span>
<span class="student-session-item__hours-value">{{ deadlineText }}</span>
</div>
</div>
@@ -13,8 +13,8 @@
<Badge v-if="isComplete" variant="success">تکمیل شده</Badge>
<Badge v-if="session.isSeen" variant="success">دیده شده</Badge>
<Badge v-if="session.grade != null" variant="primary" label="نمره" :value="session.grade" />
<Badge v-if="session.needsAssignment" icon="paper-plane">دارای تکلیف</Badge>
<Badge v-if="session.hasQuiz" icon="file">دارای آزمون</Badge>
<Badge v-if="session.homeworksCount > 0" icon="paper-plane">دارای تکلیف</Badge>
<Badge v-if="session.examsCount > 0" icon="file">دارای آزمون</Badge>
<Badge v-if="isOnline" icon="users-three">جلسه آنلاین</Badge>
</div>
@@ -37,6 +37,7 @@ import { computed } from 'vue'
import Badge from '@/components/Badge.vue'
import BaseButton from '@/components/BaseButton.vue'
import SvgIcon from '@/components/icons/SvgIcon.vue'
import { formatJalaaliDate } from '@/utils/date-utils'
const props = defineProps({
session: { type: Object, required: true },
@@ -44,8 +45,8 @@ const props = defineProps({
const emit = defineEmits(['start'])
const durationText = computed(() =>
props.session.durationHours == null ? '—' : `${props.session.durationHours} ساعت`
const deadlineText = computed(
() => formatJalaaliDate(props.session.deadline || props.session.endDate) || '—'
)
const isOnline = computed(() => props.session.type === 'online')
@@ -119,8 +119,6 @@ const { data: session, isLoading } = useStudentSessionQuery(sessionId, {
enabled: () => !!sessionId.value,
})
// The homework for this session comes from the dedicated endpoint (the session
// payload itself doesn't embed homeworks).
const homeworkFilters = computed(() => ({ sessionId: sessionId.value }))
const homeworkPagination = ref({ page: 1, perPage: 20 })
const { data: homeworksData } = useStudentHomeworksListQuery(homeworkFilters, homeworkPagination, {
@@ -152,7 +150,14 @@ const homeworkId = computed(
)
const uploadHomeworkFile = async (file) => {
const fd = objectToFormData({ file, purpose: 'homework_file', context: 'homework' })
// The backend validates allowed extensions per `purpose`: `homework_file`
// accepts documents/images only, so a recorded voice must go up as `voice`.
const isAudio = (file?.type || '').startsWith('audio/')
const fd = objectToFormData({
file,
purpose: isAudio ? 'voice' : 'homework_file',
context: 'homework',
})
const response = await uploadMediaMutation.mutateAsync(fd)
const payload = response?.data ?? response
return payload?.id ?? null