feat(classes): show class days and meeting time on my classes
Surface the stored class schedule so students can see when their class meets.
This commit is contained in:
@@ -49,6 +49,14 @@
|
||||
<dt>پایان</dt>
|
||||
<dd>{{ formatJalali(item.endDate) }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>روزها</dt>
|
||||
<dd>{{ formatClassDays(item.days) }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>ساعت</dt>
|
||||
<dd>{{ formatClassTime(item.startTime, item.endTime) }}</dd>
|
||||
</div>
|
||||
<div>
|
||||
<dt>شهریه</dt>
|
||||
<dd>{{ formatPrice(item.tuitionFee) }}</dd>
|
||||
@@ -65,6 +73,39 @@ import { RouterLink } from 'vue-router'
|
||||
import { classesApi } from '@/api/classesApi'
|
||||
import { formatJalali, formatPrice, getApiErrorMessage } from '@/utils/format'
|
||||
|
||||
const WEEKDAY_LABELS = {
|
||||
0: 'یکشنبه',
|
||||
1: 'دوشنبه',
|
||||
2: 'سهشنبه',
|
||||
3: 'چهارشنبه',
|
||||
4: 'پنجشنبه',
|
||||
5: 'جمعه',
|
||||
6: 'شنبه'
|
||||
}
|
||||
const IRAN_WEEK_ORDER = [6, 0, 1, 2, 3, 4, 5]
|
||||
|
||||
function joinFaList(items) {
|
||||
if (!items.length) return '—'
|
||||
if (items.length === 1) return items[0]
|
||||
if (items.length === 2) return `${items[0]} و ${items[1]}`
|
||||
return `${items.slice(0, -1).join('، ')} و ${items[items.length - 1]}`
|
||||
}
|
||||
|
||||
function formatClassDays(days = []) {
|
||||
const unique = [...new Set((days || []).map(Number).filter((day) => day >= 0 && day <= 6))]
|
||||
unique.sort((a, b) => IRAN_WEEK_ORDER.indexOf(a) - IRAN_WEEK_ORDER.indexOf(b))
|
||||
return joinFaList(unique.map((day) => WEEKDAY_LABELS[day]).filter(Boolean))
|
||||
}
|
||||
|
||||
function formatClassTime(startTime, endTime) {
|
||||
const start = String(startTime || '').trim()
|
||||
const end = String(endTime || '').trim()
|
||||
if (!start && !end) return '—'
|
||||
if (!end) return start
|
||||
if (!start) return end
|
||||
return `${start} – ${end}`
|
||||
}
|
||||
|
||||
const classes = ref([])
|
||||
const loading = ref(true)
|
||||
const error = ref('')
|
||||
@@ -134,7 +175,7 @@ onMounted(load)
|
||||
|
||||
.meta-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 0.85rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user