diff --git a/app/citizen-frontend/src/api/course.ts b/app/citizen-frontend/src/api/course.ts index 7146277..1c3ba6a 100644 --- a/app/citizen-frontend/src/api/course.ts +++ b/app/citizen-frontend/src/api/course.ts @@ -6,6 +6,7 @@ import type { YesNo, } from "./types"; import { api } from "./client"; +import { getApiErrorBody, getApiErrorStatus } from "@/utils/api-error"; /** * 課程建議的 5 支 API。 @@ -41,8 +42,20 @@ function toCourseRow(raw: CourseListApiRow): CourseRow { } /** 依登入 Cookie 取得目前使用者的體適能組別。 */ -export function fetchGroup(): Promise { - return api.get("course/group").json(); +export async function fetchGroup(): Promise { + try { + return await api.get("course/group").json(); + } catch (error) { + // 尚未完成分組時,後端以 404 與業務訊息回應,轉成 store 可處理的空組別。 + if ( + getApiErrorStatus(error) === 404 && + getApiErrorBody(error)?.message === "尚未建立體適能組別" + ) { + return ""; + } + + throw error; + } } /** 取得是否納入早上時段 */ diff --git a/app/citizen-frontend/src/components/PhysicalFitnessSummary.vue b/app/citizen-frontend/src/components/PhysicalFitnessSummary.vue index 323b426..ef203a9 100644 --- a/app/citizen-frontend/src/components/PhysicalFitnessSummary.vue +++ b/app/citizen-frontend/src/components/PhysicalFitnessSummary.vue @@ -2,9 +2,21 @@ 11 項體適能測驗 - - {{ completedCount }}/{{ displayItems.length }} 項有資料 - +
+ + + {{ completedCount }}/{{ displayItems.length }} 項有資料 + +
顯示目前帳號各測驗項目的最新成績。 @@ -31,7 +43,7 @@ color="error" size="small" variant="text" - @click="$emit('retry')" + @click="$emit('refresh')" > 重試 @@ -52,7 +64,6 @@
{{ item.fitnessName }}
-
{{ item.fitnessCode }}
(); defineEmits<{ - retry: []; + refresh: []; }>(); const FITNESS_TEST_DEFINITIONS = [ diff --git a/app/citizen-frontend/src/pages/index.vue b/app/citizen-frontend/src/pages/index.vue index e6b01d5..7f26ead 100644 --- a/app/citizen-frontend/src/pages/index.vue +++ b/app/citizen-frontend/src/pages/index.vue @@ -131,7 +131,7 @@ :error="physicalFitnessError" :items="physicalFitnessItems" :loading="physicalFitnessLoading" - @retry="loadPhysicalFitness" + @refresh="loadPhysicalFitness" />