From 83835c22a501298f2a2b8f984409d96f3d0d5b14 Mon Sep 17 00:00:00 2001 From: Edgar Mendez Mendoza Date: Thu, 6 Nov 2025 11:46:13 -0600 Subject: [PATCH] feat: implement authentication flow with login page and router setup --- components.d.ts | 5 + package-lock.json | 24 +++- package.json | 3 +- src/App.vue | 10 +- src/MainLayout.vue | 3 +- src/components/layout/TopBar.vue | 29 +++-- src/main.ts | 7 ++ src/pages/Auth/Login.vue | 210 +++++++++++++++++++++++++++++++ src/router/index.ts | 88 +++++++++++++ src/stores/auth.ts | 93 ++++++++++++++ 10 files changed, 448 insertions(+), 24 deletions(-) create mode 100644 src/pages/Auth/Login.vue create mode 100644 src/router/index.ts create mode 100644 src/stores/auth.ts diff --git a/components.d.ts b/components.d.ts index 5cdebce..09d0fc4 100644 --- a/components.d.ts +++ b/components.d.ts @@ -16,11 +16,16 @@ declare module 'vue' { Badge: typeof import('primevue/badge')['default'] Button: typeof import('primevue/button')['default'] Card: typeof import('primevue/card')['default'] + Checkbox: typeof import('primevue/checkbox')['default'] Column: typeof import('primevue/column')['default'] DataTable: typeof import('primevue/datatable')['default'] HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] + InputGroup: typeof import('primevue/inputgroup')['default'] + InputGroupAddon: typeof import('primevue/inputgroupaddon')['default'] + InputText: typeof import('primevue/inputtext')['default'] KpiCard: typeof import('./src/components/shared/KpiCard.vue')['default'] Menu: typeof import('primevue/menu')['default'] + Message: typeof import('primevue/message')['default'] Sidebar: typeof import('./src/components/layout/Sidebar.vue')['default'] Tag: typeof import('primevue/tag')['default'] TopBar: typeof import('./src/components/layout/TopBar.vue')['default'] diff --git a/package-lock.json b/package-lock.json index 3c3651b..811095b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,8 @@ "primevue": "^4.4.1", "tailwindcss-primeui": "^0.6.1", "unplugin-vue-components": "^30.0.0", - "vue": "^3.5.22" + "vue": "^3.5.22", + "vue-router": "^4.6.3" }, "devDependencies": { "@types/node": "^24.6.0", @@ -1291,6 +1292,12 @@ "@vue/shared": "3.5.23" } }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, "node_modules/@vue/language-core": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.1.3.tgz", @@ -2363,6 +2370,21 @@ } } }, + "node_modules/vue-router": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz", + "integrity": "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, "node_modules/vue-tsc": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.1.3.tgz", diff --git a/package.json b/package.json index ddcea6c..cbc569b 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "primevue": "^4.4.1", "tailwindcss-primeui": "^0.6.1", "unplugin-vue-components": "^30.0.0", - "vue": "^3.5.22" + "vue": "^3.5.22", + "vue-router": "^4.6.3" }, "devDependencies": { "@types/node": "^24.6.0", diff --git a/src/App.vue b/src/App.vue index 66c300d..251e2e0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,14 +1,8 @@ diff --git a/src/MainLayout.vue b/src/MainLayout.vue index 1890a25..14dc5ab 100644 --- a/src/MainLayout.vue +++ b/src/MainLayout.vue @@ -1,7 +1,6 @@