diff --git a/GUI/package-lock.json b/GUI/package-lock.json index c29bda9..72d4cd0 100644 --- a/GUI/package-lock.json +++ b/GUI/package-lock.json @@ -8,9 +8,12 @@ "name": "-", "version": "0.0.0", "dependencies": { + "@fontsource/roboto": "^5.2.10", + "@mdi/font": "^7.4.47", "pinia": "^3.0.4", "vue": "^3.5.31", - "vue-router": "^5.0.4" + "vue-router": "^5.0.4", + "vuetify": "^4.0.5" }, "devDependencies": { "@tsconfig/node24": "^24.0.4", @@ -59,7 +62,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -515,10 +517,20 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } }, + "node_modules/@fontsource/roboto": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@fontsource/roboto/-/roboto-5.2.10.tgz", + "integrity": "sha512-8HlA5FtSfz//oFSr2eL7GFXAiE7eIkcGOtx7tjsLKq+as702x9+GU7K95iDeWFapHC4M2hv9RrpXKRTGGBI8Zg==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -564,6 +576,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mdi/font": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz", + "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==", + "license": "Apache-2.0" + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", @@ -886,7 +904,6 @@ "integrity": "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1342,7 +1359,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -2304,7 +2320,6 @@ "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", "license": "MIT", - "peer": true, "dependencies": { "@vue/devtools-api": "^7.7.7" }, @@ -2616,7 +2631,6 @@ "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2705,7 +2719,6 @@ "integrity": "sha512-baBr4jUVSLJ0RPyZ2nK0zS2+W8hNHbM4hEzfvllukmRPVS3xDG5ATTNtbRXrKIOE2b8/FsPWJAOnuIxcs7g3cw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -2921,7 +2934,6 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz", "integrity": "sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==", "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.32", "@vue/compiler-sfc": "3.5.32", @@ -3033,6 +3045,33 @@ "typescript": ">=5.0.0" } }, + "node_modules/vuetify": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-4.0.5.tgz", + "integrity": "sha512-pFysKOHuY3dROTVh9PdlhVz50ZR0E5/goY5ecTXc8F8tajUA2ee3xZ8Lqs1WtEw/X3w93wx/LogyjgaQCAL/Ig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/johnleider" + }, + "peerDependencies": { + "typescript": ">=4.7", + "vite-plugin-vuetify": ">=2.1.0", + "vue": "^3.5.0", + "webpack-plugin-vuetify": ">=3.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vite-plugin-vuetify": { + "optional": true + }, + "webpack-plugin-vuetify": { + "optional": true + } + } + }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", diff --git a/GUI/package.json b/GUI/package.json index e015d16..7bcd81a 100644 --- a/GUI/package.json +++ b/GUI/package.json @@ -12,9 +12,12 @@ "format": "prettier --write --experimental-cli src/" }, "dependencies": { + "@fontsource/roboto": "^5.2.10", + "@mdi/font": "^7.4.47", "pinia": "^3.0.4", "vue": "^3.5.31", - "vue-router": "^5.0.4" + "vue-router": "^5.0.4", + "vuetify": "^4.0.5" }, "devDependencies": { "@tsconfig/node24": "^24.0.4", diff --git a/GUI/src/App.vue b/GUI/src/App.vue deleted file mode 100644 index abfd315..0000000 --- a/GUI/src/App.vue +++ /dev/null @@ -1,11 +0,0 @@ - - - - You did it! - - Visit vuejs.org to read the - documentation - - - - diff --git a/GUI/src/Layout.vue b/GUI/src/Layout.vue new file mode 100644 index 0000000..a48c654 --- /dev/null +++ b/GUI/src/Layout.vue @@ -0,0 +1,127 @@ + + + + + + + + + + + Hoard + + + + + + mdi-account + + + Account + + + + + + mdi-brightness-6 + + + {{ theme.global.name.value === 'dark' ? 'Hellen Modus aktivieren' : 'Dunklen Modus aktivieren' }} + + + + + + + + + + + + + + + {{ new Date().getFullYear() }} - Hoard + + + + + + + diff --git a/GUI/src/main.ts b/GUI/src/main.ts index fda1e6e..50bb125 100644 --- a/GUI/src/main.ts +++ b/GUI/src/main.ts @@ -1,12 +1,14 @@ import { createApp } from 'vue' import { createPinia } from 'pinia' -import App from './App.vue' +import App from './Layout.vue' import router from './router' +import vuetify from './plugins/vuetify' const app = createApp(App) app.use(createPinia()) app.use(router) +app.use(vuetify) app.mount('#app') diff --git a/GUI/src/plugins/routesLayout.ts b/GUI/src/plugins/routesLayout.ts new file mode 100644 index 0000000..8153eb2 --- /dev/null +++ b/GUI/src/plugins/routesLayout.ts @@ -0,0 +1,72 @@ +import type { RouteRecordRaw } from 'vue-router' + +import Home from '@/routes/Home.vue' +import NotFound from '@/routes/404NotFound.vue' +import Login from '@/routes/authentication/Login.vue' +import Impressum from '@/routes/Impressum.vue' + +export enum Visibility { + Hidden, + Authenticated, + Unauthenticated, + Authorized, + Public, + Footer, +} + +export interface LayoutRoute { + path: string + name: string + description: string + icon: string + disableFooter?: boolean + visible: Visibility + meta?: RouteRecordRaw +} + +export const routes: LayoutRoute[] = [ + { + path: '/', + name: 'Startseite', + description: 'Uebersicht der Anwendung', + icon: 'mdi-home', + visible: Visibility.Public, + meta: { + name: 'Home', + path: '/', + component: Home, + }, + }, + { + path: '/login', + name: 'Login', + description: 'Logge dich ein', + icon: 'mdi-login', + visible: Visibility.Hidden, + meta: { + path: '/login', + name: 'Login', + component: Login, + }, + }, + { + path: '/impressum', + name: 'Impressum', + description: 'Impressum der Anwendung', + icon: 'mdi-file-document', + visible: Visibility.Footer, + meta: { + path: '/impressum', + name: 'Impressum', + component: Impressum, + }, + }, + { + path: '/notFound', + name: 'Nicht gefunden', + description: 'Diese Seite wurde nicht gefunden', + icon: 'mdi-information-outline', + visible: Visibility.Hidden, + meta: { path: '/:pathMatch(.*)*', name: 'NotFound', component: NotFound }, + }, +] diff --git a/GUI/src/plugins/vuetify.ts b/GUI/src/plugins/vuetify.ts new file mode 100644 index 0000000..ee1dc4a --- /dev/null +++ b/GUI/src/plugins/vuetify.ts @@ -0,0 +1,27 @@ +import 'vuetify/styles' +import '@fontsource/roboto/100.css' +import '@fontsource/roboto/300.css' +import '@fontsource/roboto/400.css' +import '@fontsource/roboto/500.css' +import '@fontsource/roboto/700.css' +import '@fontsource/roboto/900.css' +import { createVuetify } from 'vuetify' +import * as components from 'vuetify/components' +import * as directives from 'vuetify/directives' +import '@mdi/font/css/materialdesignicons.css' +import { aliases, mdi } from 'vuetify/iconsets/mdi' + +export default createVuetify({ + components, + directives, + theme: { + defaultTheme: 'dark', + }, + icons: { + defaultSet: 'mdi', + aliases, + sets: { + mdi, + }, + }, +}) diff --git a/GUI/src/router/index.ts b/GUI/src/router/index.ts index e1eab52..f79212d 100644 --- a/GUI/src/router/index.ts +++ b/GUI/src/router/index.ts @@ -1,8 +1,9 @@ -import { createRouter, createWebHistory } from 'vue-router' +import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router' +import { routes } from '@/plugins/routesLayout' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), - routes: [], + routes: routes.filter((x) => x.meta !== undefined).map((x) => x.meta) as RouteRecordRaw[], }) export default router diff --git a/GUI/src/router/routes.ts b/GUI/src/router/routes.ts deleted file mode 100644 index 4d3eb8d..0000000 --- a/GUI/src/router/routes.ts +++ /dev/null @@ -1 +0,0 @@ -export const \ No newline at end of file diff --git a/GUI/src/routes/404NotFound.vue b/GUI/src/routes/404NotFound.vue new file mode 100644 index 0000000..5304d87 --- /dev/null +++ b/GUI/src/routes/404NotFound.vue @@ -0,0 +1,30 @@ + + + + + 404 + Seite nicht gefunden + + + Zurueck zur Startseite + + + + + diff --git a/GUI/src/routes/Home.vue b/GUI/src/routes/Home.vue new file mode 100644 index 0000000..a488e81 --- /dev/null +++ b/GUI/src/routes/Home.vue @@ -0,0 +1,19 @@ + + + + + + + + Willkommen bei Hoard + + Dein Vuetify-Setup ist aktiv. Ueber das Menue links kannst du zu den weiteren Seiten + navigieren. + + + + + + + + diff --git a/GUI/src/routes/Impressum.vue b/GUI/src/routes/Impressum.vue new file mode 100644 index 0000000..f0cfcc8 --- /dev/null +++ b/GUI/src/routes/Impressum.vue @@ -0,0 +1,19 @@ + + + + + + + + Impressum + + Diese Seite ist als Platzhalter angelegt. Trage hier deine Firmen- oder Vereinsdaten + ein. + + + + + + + + diff --git a/GUI/src/routes/authentication/Login.vue b/GUI/src/routes/authentication/Login.vue new file mode 100644 index 0000000..1f9164f --- /dev/null +++ b/GUI/src/routes/authentication/Login.vue @@ -0,0 +1,24 @@ + + + + + + + + Login + + + + Anmelden + + + + + + + + diff --git a/GUI/tsconfig.app.json b/GUI/tsconfig.app.json index c0f2d86..14c54c1 100644 --- a/GUI/tsconfig.app.json +++ b/GUI/tsconfig.app.json @@ -1,6 +1,6 @@ { "extends": "@vue/tsconfig/tsconfig.dom.json", - "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "include": ["env.d.ts", "src/**/*.vue", "src/**/*.ts"], "exclude": ["src/**/__tests__/*"], "compilerOptions": { // Extra safety for array and object lookups, but may have false positives.
- Visit vuejs.org to read the - documentation -
Seite nicht gefunden