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>
|
<dt>پایان</dt>
|
||||||
<dd>{{ formatJalali(item.endDate) }}</dd>
|
<dd>{{ formatJalali(item.endDate) }}</dd>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<dt>روزها</dt>
|
||||||
|
<dd>{{ formatClassDays(item.days) }}</dd>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<dt>ساعت</dt>
|
||||||
|
<dd>{{ formatClassTime(item.startTime, item.endTime) }}</dd>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dt>شهریه</dt>
|
<dt>شهریه</dt>
|
||||||
<dd>{{ formatPrice(item.tuitionFee) }}</dd>
|
<dd>{{ formatPrice(item.tuitionFee) }}</dd>
|
||||||
@@ -65,6 +73,39 @@ import { RouterLink } from 'vue-router'
|
|||||||
import { classesApi } from '@/api/classesApi'
|
import { classesApi } from '@/api/classesApi'
|
||||||
import { formatJalali, formatPrice, getApiErrorMessage } from '@/utils/format'
|
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 classes = ref([])
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const error = ref('')
|
const error = ref('')
|
||||||
@@ -134,7 +175,7 @@ onMounted(load)
|
|||||||
|
|
||||||
.meta-grid {
|
.meta-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
gap: 0.85rem;
|
gap: 0.85rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user