From ff5b189b2fcc94b553b43b8ce99ba696cd2f5cb1 Mon Sep 17 00:00:00 2001 From: Missez Date: Wed, 14 Jan 2026 13:58:25 +0700 Subject: [PATCH] login with api --- .../components/common/AppCard.vue | 59 +++ .../components/common/AppHeader.vue | 53 +++ .../components/common/AppModal.vue | 101 +++++ .../components/common/AppTable.vue | 177 ++++++++ frontend_management/composables/useApi.ts | 34 ++ frontend_management/layouts/admin.vue | 83 ++++ frontend_management/layouts/auth.vue | 47 ++ frontend_management/layouts/instructor.vue | 32 +- frontend_management/nuxt.config.ts | 4 +- frontend_management/pages/admin/index.vue | 73 ++- .../pages/instructor/index.vue | 72 ++- .../pages/instructor/profile/index.vue | 419 ++++++++++++++++++ frontend_management/pages/login.vue | 14 +- frontend_management/plugins/auth.ts | 8 + frontend_management/services/auth.service.ts | 92 ++++ frontend_management/stores/auth.ts | 39 +- 16 files changed, 1241 insertions(+), 66 deletions(-) create mode 100644 frontend_management/components/common/AppCard.vue create mode 100644 frontend_management/components/common/AppHeader.vue create mode 100644 frontend_management/components/common/AppModal.vue create mode 100644 frontend_management/components/common/AppTable.vue create mode 100644 frontend_management/composables/useApi.ts create mode 100644 frontend_management/layouts/admin.vue create mode 100644 frontend_management/layouts/auth.vue create mode 100644 frontend_management/pages/instructor/profile/index.vue create mode 100644 frontend_management/plugins/auth.ts create mode 100644 frontend_management/services/auth.service.ts diff --git a/frontend_management/components/common/AppCard.vue b/frontend_management/components/common/AppCard.vue new file mode 100644 index 00000000..c93dc3e3 --- /dev/null +++ b/frontend_management/components/common/AppCard.vue @@ -0,0 +1,59 @@ + + + diff --git a/frontend_management/components/common/AppHeader.vue b/frontend_management/components/common/AppHeader.vue new file mode 100644 index 00000000..aeed7319 --- /dev/null +++ b/frontend_management/components/common/AppHeader.vue @@ -0,0 +1,53 @@ + + + diff --git a/frontend_management/components/common/AppModal.vue b/frontend_management/components/common/AppModal.vue new file mode 100644 index 00000000..59a4ffe8 --- /dev/null +++ b/frontend_management/components/common/AppModal.vue @@ -0,0 +1,101 @@ + + + diff --git a/frontend_management/components/common/AppTable.vue b/frontend_management/components/common/AppTable.vue new file mode 100644 index 00000000..e6d8c5d4 --- /dev/null +++ b/frontend_management/components/common/AppTable.vue @@ -0,0 +1,177 @@ + + + diff --git a/frontend_management/composables/useApi.ts b/frontend_management/composables/useApi.ts new file mode 100644 index 00000000..4712ed82 --- /dev/null +++ b/frontend_management/composables/useApi.ts @@ -0,0 +1,34 @@ +import type { UseFetchOptions } from 'nuxt/app'; + +export const useApi = () => { + const config = useRuntimeConfig(); + const baseURL = config.public.apiBaseUrl as string; + + const apiFetch = (url: string, options?: UseFetchOptions) => { + return $fetch(url, { + baseURL, + ...options, + headers: { + ...options?.headers, + }, + onRequest({ options }) { + // Add auth token if available + const token = localStorage.getItem('token'); + if (token) { + options.headers = { + ...options.headers, + Authorization: `Bearer ${token}` + }; + } + }, + onResponseError({ response }) { + // Handle errors globally + console.error('API Error:', response.status, response._data); + } + }); + }; + + return { + apiFetch + }; +}; diff --git a/frontend_management/layouts/admin.vue b/frontend_management/layouts/admin.vue new file mode 100644 index 00000000..956f75ca --- /dev/null +++ b/frontend_management/layouts/admin.vue @@ -0,0 +1,83 @@ + + + diff --git a/frontend_management/layouts/auth.vue b/frontend_management/layouts/auth.vue new file mode 100644 index 00000000..3b3fadd0 --- /dev/null +++ b/frontend_management/layouts/auth.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/frontend_management/layouts/instructor.vue b/frontend_management/layouts/instructor.vue index 6668be9b..d8320b6e 100644 --- a/frontend_management/layouts/instructor.vue +++ b/frontend_management/layouts/instructor.vue @@ -10,42 +10,24 @@ -
+ diff --git a/frontend_management/nuxt.config.ts b/frontend_management/nuxt.config.ts index 81f4bbb2..86c0ebaa 100644 --- a/frontend_management/nuxt.config.ts +++ b/frontend_management/nuxt.config.ts @@ -29,8 +29,8 @@ export default defineNuxtConfig({ ], runtimeConfig: { public: { - apiBase: process.env.API_BASE_URL || 'http://localhost:3001/api', - useMockData: process.env.USE_MOCK_DATA === 'true' + apiBaseUrl: process.env.NUXT_PUBLIC_API_BASE_URL, + useMockData: process.env.NUXT_PUBLIC_USE_MOCK_DATA === 'true' } }, devtools: { enabled: true }, diff --git a/frontend_management/pages/admin/index.vue b/frontend_management/pages/admin/index.vue index 4a79b105..4d53aac1 100644 --- a/frontend_management/pages/admin/index.vue +++ b/frontend_management/pages/admin/index.vue @@ -1,7 +1,59 @@ \ No newline at end of file diff --git a/frontend_management/pages/instructor/index.vue b/frontend_management/pages/instructor/index.vue index e323cdfd..d0db5e70 100644 --- a/frontend_management/pages/instructor/index.vue +++ b/frontend_management/pages/instructor/index.vue @@ -1,14 +1,55 @@ +