diff --git a/frontend/package.json b/frontend/package.json index 7aefdb4..aaf3a4f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,11 +15,13 @@ }, "dependencies": { "@primeuix/themes": "^1.0.1", + "@primevue/forms": "^4.3.3", "lucide-vue-next": "^0.487.0", "pinia": "^3.0.1", "primevue": "^4.3.3", "vue": "^3.5.13", - "vue-router": "^4.5.0" + "vue-router": "^4.5.0", + "zod": "^3.24.2" }, "devDependencies": { "@tsconfig/node22": "^22.0.0", diff --git a/frontend/src/components/MenuBar.vue b/frontend/src/components/MenuBar.vue new file mode 100644 index 0000000..935c6c8 --- /dev/null +++ b/frontend/src/components/MenuBar.vue @@ -0,0 +1,80 @@ + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts index e54f22e..3ae3a6e 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -5,7 +5,7 @@ import { createPinia } from 'pinia' import PrimeVue from 'primevue/config' import Aura from '@primeuix/themes/aura' import Ripple from 'primevue/ripple' - +import ToastService from 'primevue/toastservice'; import App from './App.vue' import router from './router' @@ -18,6 +18,8 @@ app.use(PrimeVue, { }, }) app.use(pinia) +app.use(ToastService); +app.use(createPinia()) app.use(router) app.directive('ripple', Ripple) diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 2034ec4..d6346a7 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -23,6 +23,13 @@ const router = createRouter({ component: () => import('../views/StudentView.vue'), }, + { + path: '/Login', + name: 'Login', + + component: () => import('../views/LoginView.vue'), + }, + ], }) diff --git a/frontend/src/views/LoginView.vue b/frontend/src/views/LoginView.vue new file mode 100644 index 0000000..1462376 --- /dev/null +++ b/frontend/src/views/LoginView.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 730a749..4497a35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,6 +13,9 @@ importers: '@primeuix/themes': specifier: ^1.0.1 version: 1.0.1 + '@primevue/forms': + specifier: ^4.3.3 + version: 4.3.3(vue@3.5.13(typescript@5.8.2)) lucide-vue-next: specifier: ^0.487.0 version: 0.487.0(vue@3.5.13(typescript@5.8.2)) @@ -28,6 +31,9 @@ importers: vue-router: specifier: ^4.5.0 version: 4.5.0(vue@3.5.13(typescript@5.8.2)) + zod: + specifier: ^3.24.2 + version: 3.24.2 devDependencies: '@tsconfig/node22': specifier: ^22.0.0 @@ -525,6 +531,10 @@ packages: '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@primeuix/forms@0.0.4': + resolution: {integrity: sha512-WKrxZPM9fPAEsM0xcTrOOJn86MbfOEzPwSwpO94Y7RtguWw+1nrvqYNzCcmVqO6zBi0BVMihoWxMKFIRzTOuZg==} + engines: {node: '>=12.11.0'} + '@primeuix/styled@0.5.1': resolution: {integrity: sha512-5Ftw/KSauDPClQ8F2qCyCUF7cIUEY4yLNikf0rKV7Vsb8zGYNK0dahQe7CChaR6M2Kn+NA2DSBSk76ZXqj6Uog==} engines: {node: '>=12.11.0'} @@ -535,6 +545,10 @@ packages: '@primeuix/themes@1.0.1': resolution: {integrity: sha512-RllttI3oGTZa66UQDCIA2lPnJvO/xqtNpy+0eNql6fIxdS2AUg5n7L81jTZrHNZ+31T5OBzL/SGFCDycmHTz2g==} + '@primeuix/utils@0.4.1': + resolution: {integrity: sha512-5+1NLfyna+gLRPeFTo+xlR0tfPVLuVdidbeahAMLkQga5Rw0LxyUBCyD2/Zv2JkV69o2T+hpEDyddl3VdnYoBw==} + engines: {node: '>=12.11.0'} + '@primeuix/utils@0.5.3': resolution: {integrity: sha512-7SGh7734wcF1/uK6RzO6Z6CBjGQ97GDHfpyl2F1G/c7R0z9hkT/V72ypDo82AWcCS7Ta07oIjDpOCTkSVZuEGQ==} engines: {node: '>=12.11.0'} @@ -545,6 +559,10 @@ packages: peerDependencies: vue: ^3.5.0 + '@primevue/forms@4.3.3': + resolution: {integrity: sha512-GZYMd8wp+7/4DVMoGGUtRkAHw352peT3pgwgzaFYQqNIjxxGw9eI253XTxrppRCowrGJ2jEe80p9WfHi087B1g==} + engines: {node: '>=12.11.0'} + '@primevue/icons@4.3.3': resolution: {integrity: sha512-ouQaxHyeFB6MSfEGGbjaK5Qv9efS1xZGetZoU5jcPm090MSYLFtroP1CuK3lZZAQals06TZ6T6qcoNukSHpK5w==} engines: {node: '>=12.11.0'} @@ -2187,6 +2205,9 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + snapshots: '@ampproject/remapping@2.3.0': @@ -2592,6 +2613,10 @@ snapshots: '@polka/url@1.0.0-next.28': {} + '@primeuix/forms@0.0.4': + dependencies: + '@primeuix/utils': 0.4.1 + '@primeuix/styled@0.5.1': dependencies: '@primeuix/utils': 0.5.3 @@ -2604,6 +2629,8 @@ snapshots: dependencies: '@primeuix/styled': 0.5.1 + '@primeuix/utils@0.4.1': {} + '@primeuix/utils@0.5.3': {} '@primevue/core@4.3.3(vue@3.5.13(typescript@5.8.2))': @@ -2612,6 +2639,14 @@ snapshots: '@primeuix/utils': 0.5.3 vue: 3.5.13(typescript@5.8.2) + '@primevue/forms@4.3.3(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@primeuix/forms': 0.0.4 + '@primeuix/utils': 0.5.3 + '@primevue/core': 4.3.3(vue@3.5.13(typescript@5.8.2)) + transitivePeerDependencies: + - vue + '@primevue/icons@4.3.3(vue@3.5.13(typescript@5.8.2))': dependencies: '@primeuix/utils': 0.5.3 @@ -4274,3 +4309,5 @@ snapshots: yocto-queue@0.1.0: {} yoctocolors@2.1.1: {} + + zod@3.24.2: {}