diff --git a/frontend/src/api/dashboard.ts b/frontend/src/api/dashboard.ts new file mode 100644 index 00000000..11c63678 --- /dev/null +++ b/frontend/src/api/dashboard.ts @@ -0,0 +1,19 @@ +import { apiGet } from "./axios"; +import type { ApiListResponse, Study, UserInfo } from "../types/api"; + +export const fetchProgress = (studyId: string) => + apiGet(`/api/v1/studies/${studyId}/dashboard/progress`); + +export const fetchFinanceSummary = (studyId: string) => + apiGet(`/api/v1/studies/${studyId}/finance/summary`); + +export const fetchOverdueAesCount = (studyId: string) => + apiGet>(`/api/v1/studies/${studyId}/aes`, { params: { overdue: true, limit: 1 } }); + +export const fetchOverdueQueriesCount = (studyId: string) => + apiGet>(`/api/v1/studies/${studyId}/data-queries`, { params: { overdue: true, limit: 1 } }); + +export const fetchMyTodoTasks = (studyId: string, assigneeId: string) => + apiGet>(`/api/v1/studies/${studyId}/tasks`, { + params: { assignee_id: assigneeId, status: "TODO" }, + }); diff --git a/frontend/src/components/KpiCard.vue b/frontend/src/components/KpiCard.vue new file mode 100644 index 00000000..bba3e60f --- /dev/null +++ b/frontend/src/components/KpiCard.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/frontend/src/components/QuickActions.vue b/frontend/src/components/QuickActions.vue new file mode 100644 index 00000000..c6080ce8 --- /dev/null +++ b/frontend/src/components/QuickActions.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 2009224d..dbb5d3ae 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -6,6 +6,13 @@ import Home from "../views/Home.vue"; import Login from "../views/Login.vue"; import StudyList from "../views/StudyList.vue"; import StudyHome from "../views/StudyHome.vue"; +import Tasks from "../views/Tasks.vue"; +import Subjects from "../views/Subjects.vue"; +import Aes from "../views/Aes.vue"; +import DataQueries from "../views/DataQueries.vue"; +import Imp from "../views/Imp.vue"; +import Finance from "../views/Finance.vue"; +import Faq from "../views/Faq.vue"; const routes: RouteRecordRaw[] = [ { @@ -31,6 +38,48 @@ const routes: RouteRecordRaw[] = [ component: StudyHome, meta: { title: "项目首页", requiresStudy: true }, }, + { + path: "study/tasks", + name: "StudyTasks", + component: Tasks, + meta: { title: "任务", requiresStudy: true }, + }, + { + path: "study/subjects", + name: "StudySubjects", + component: Subjects, + meta: { title: "受试者", requiresStudy: true }, + }, + { + path: "study/aes", + name: "StudyAes", + component: Aes, + meta: { title: "AE", requiresStudy: true }, + }, + { + path: "study/data-queries", + name: "StudyDataQueries", + component: DataQueries, + meta: { title: "数据问题", requiresStudy: true }, + }, + { + path: "study/imp", + name: "StudyImp", + component: Imp, + meta: { title: "药品", requiresStudy: true }, + }, + { + path: "study/finance", + name: "StudyFinance", + component: Finance, + meta: { title: "费用", requiresStudy: true }, + }, + { + path: "study/faq", + name: "StudyFaq", + component: Faq, + meta: { title: "FAQ", requiresStudy: true }, + }, ], }, { diff --git a/frontend/src/views/Aes.vue b/frontend/src/views/Aes.vue new file mode 100644 index 00000000..e3d5aea3 --- /dev/null +++ b/frontend/src/views/Aes.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/views/DataQueries.vue b/frontend/src/views/DataQueries.vue new file mode 100644 index 00000000..d8212d8f --- /dev/null +++ b/frontend/src/views/DataQueries.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/views/Faq.vue b/frontend/src/views/Faq.vue new file mode 100644 index 00000000..de89b9a3 --- /dev/null +++ b/frontend/src/views/Faq.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/views/Finance.vue b/frontend/src/views/Finance.vue new file mode 100644 index 00000000..4668650b --- /dev/null +++ b/frontend/src/views/Finance.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/views/Imp.vue b/frontend/src/views/Imp.vue new file mode 100644 index 00000000..d68ba290 --- /dev/null +++ b/frontend/src/views/Imp.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/views/StudyHome.vue b/frontend/src/views/StudyHome.vue index 4d5fcd5b..455bd9fd 100644 --- a/frontend/src/views/StudyHome.vue +++ b/frontend/src/views/StudyHome.vue @@ -1,10 +1,48 @@ diff --git a/frontend/src/views/Subjects.vue b/frontend/src/views/Subjects.vue new file mode 100644 index 00000000..eff5b545 --- /dev/null +++ b/frontend/src/views/Subjects.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/frontend/src/views/Tasks.vue b/frontend/src/views/Tasks.vue new file mode 100644 index 00000000..51d7406c --- /dev/null +++ b/frontend/src/views/Tasks.vue @@ -0,0 +1,13 @@ + + + + +