From 3839f8f4cc9833afd2d79259c1d4f98cadc00bcb Mon Sep 17 00:00:00 2001 From: skytek_xinliang Date: Wed, 12 Aug 2026 09:23:02 +0800 Subject: [PATCH] style: card --- app/citizen-frontend/src/pages/course.vue | 63 ++++++++++++++++------- 1 file changed, 43 insertions(+), 20 deletions(-) diff --git a/app/citizen-frontend/src/pages/course.vue b/app/citizen-frontend/src/pages/course.vue index 436d1a5..340244a 100644 --- a/app/citizen-frontend/src/pages/course.vue +++ b/app/citizen-frontend/src/pages/course.vue @@ -9,20 +9,24 @@ - -
- - - + + + -
-
你的體適能組別
+ -
{{ store.groupMeta.label }}
-
-
+ + - + {{ store.groupMeta.description }}
@@ -224,7 +228,11 @@ {{ DAY_NAMES[row.day - 1] }} - +
('../assets/course/schedule/*.png', { eager: true }) +const scheduleCardModules = import.meta.glob<{ default: string }>( + '../assets/course/schedule/*.png', + { eager: true } +) -const SCHEDULE_CARD_DAY_KEYS = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] -const SCHEDULE_CARD_SLOT_KEYS: Record = { morning: 'morning', noon: 'noon', night: 'evening' } +const SCHEDULE_CARD_DAY_KEYS = [ + 'monday', + 'tuesday', + 'wednesday', + 'thursday', + 'friday', + 'saturday', + 'sunday', +] +const SCHEDULE_CARD_SLOT_KEYS: Record = { + morning: 'morning', + noon: 'noon', + night: 'evening', +} const SCHEDULE_CARDS: Record = Object.fromEntries( Object.entries(scheduleCardModules).map(([path, module]) => [ path.replace(/^.*\/|\.png$/g, ''), module.default, - ]), + ]) ) -function scheduleCardImage (day: number, slot: TimeSlot): string { +function scheduleCardImage(day: number, slot: TimeSlot): string { const key = `${SCHEDULE_CARD_DAY_KEYS[day - 1]}-${SCHEDULE_CARD_SLOT_KEYS[slot]}` return SCHEDULE_CARDS[key] } -const SLOTS: { key: TimeSlot, label: string, icon: string, headerClass: string }[] = [ +const SLOTS: { key: TimeSlot; label: string; icon: string; headerClass: string }[] = [ { key: 'morning', label: '早上', icon: 'mdi-weather-sunset-up', headerClass: 'bg-deep-orange' }, { key: 'noon', label: '中午', icon: 'mdi-white-balance-sunny', headerClass: 'bg-amber-darken-2' }, { key: 'night', label: '晚上', icon: 'mdi-weather-night', headerClass: 'bg-deep-purple' }, ] // 依目前選取的時段決定表格要顯示哪幾欄,順序固定為早上/中午/晚上 -const visibleSlots = computed(() => SLOTS.filter(slot => store.selectedSlots.includes(slot.key))) +const visibleSlots = computed(() => SLOTS.filter((slot) => store.selectedSlots.includes(slot.key))) // 今天對應的星期幾,換算成與 CourseRow.day 相同的規則(1 = 週一 … 7 = 週日) const todayDay = computed(() => { @@ -316,7 +339,7 @@ const todayDay = computed(() => { // v-btn-toggle 以陣列表達勾選狀態,store 則以 Y/N 保存,兩者在此橋接 const selectedSlots = computed({ get: () => store.selectedSlots, - set: value => { + set: (value) => { for (const slot of SLOTS) { const next: YesNo = value.includes(slot.key) ? 'Y' : 'N' store.setSlot(slot.key, next)