feat: scaffold Vue 3 + Vuetify + Pinia frontend

This commit is contained in:
Martin 2026-03-20 01:05:19 +01:00
parent 4a4c9515f6
commit 8e7fe78b8b
26 changed files with 3838 additions and 0 deletions

View File

@ -0,0 +1 @@
import{_ as e,c,o}from"./index-BQDVIWAB.js";const r={};function a(n,s){return o(),c("div",null,"Dashboard")}const _=e(r,[["render",a]]);export{_ as default};

View File

@ -0,0 +1 @@
import{_ as e,c,o as n}from"./index-BQDVIWAB.js";const o={};function r(t,s){return n(),c("div",null,"Login")}const a=e(o,[["render",r]]);export{a as default};

View File

@ -0,0 +1 @@
import{_ as c,c as e,o as n}from"./index-BQDVIWAB.js";const o={};function r(s,t){return n(),e("div",null,"Transactions")}const _=c(o,[["render",r]]);export{_ as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

14
src/AccountTracking.Web/dist/index.html vendored Normal file
View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Finance Tracker</title>
<script type="module" crossorigin src="/assets/index-BQDVIWAB.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-D22zsSwR.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

1
src/AccountTracking.Web/env.d.ts vendored Normal file
View File

@ -0,0 +1 @@
/// <reference types="vite/client" />

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Finance Tracker</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

1848
src/AccountTracking.Web/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
{
"name": "accounttracking-web",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vue-tsc -b && vite build",
"preview": "vite preview"
},
"dependencies": {
"@mdi/font": "^7.4.47",
"apexcharts": "^3.54.0",
"pinia": "^2.3.1",
"vue": "^3.5.13",
"vue-router": "^4.5.0",
"vue3-apexcharts": "^1.8.0",
"vuetify": "^3.6.0"
},
"devDependencies": {
"@tsconfig/node22": "^22.0.5",
"@vitejs/plugin-vue": "^5.2.1",
"@vue/tsconfig": "^0.9.0",
"nswag": "^14.1.0",
"typescript": "~5.8.0",
"vite": "^6.2.2",
"vite-plugin-vuetify": "^2.0.4",
"vue-tsc": "^2.2.8"
}
}

View File

@ -0,0 +1,5 @@
<template>
<v-app>
<router-view />
</v-app>
</template>

View File

@ -0,0 +1,28 @@
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { createVuetify } from 'vuetify'
import { aliases, mdi } from 'vuetify/iconsets/mdi'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'
import VueApexCharts from 'vue3-apexcharts'
import router from './router'
import App from './App.vue'
import 'vuetify/styles'
import '@mdi/font/css/materialdesignicons.css'
const vuetify = createVuetify({
components,
directives,
icons: { defaultSet: 'mdi', aliases, sets: { mdi } },
theme: {
defaultTheme: 'dark',
},
})
createApp(App)
.use(createPinia())
.use(router)
.use(vuetify)
.use(VueApexCharts)
.mount('#app')

View File

@ -0,0 +1,12 @@
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(),
routes: [
{ path: '/login', component: () => import('../views/LoginView.vue'), meta: { public: true } },
{ path: '/', component: () => import('../views/DashboardView.vue') },
{ path: '/transactions', component: () => import('../views/TransactionsView.vue') },
],
})
export default router

View File

@ -0,0 +1 @@
<template><div>Dashboard</div></template>

View File

@ -0,0 +1 @@
<template><div>Login</div></template>

View File

@ -0,0 +1 @@
<template><div>Transactions</div></template>

View File

@ -0,0 +1,11 @@
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"paths": {
"@/*": ["./src/*"]
}
},
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
"exclude": ["src/**/__tests__/*"]
}

View File

@ -0,0 +1,7 @@
{
"files": [],
"references": [
{ "path": "./tsconfig.node.json" },
{ "path": "./tsconfig.app.json" }
]
}

View File

@ -0,0 +1,7 @@
{
"extends": "@tsconfig/node22/tsconfig.json",
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo"
},
"include": ["vite.config.*"]
}

View File

@ -0,0 +1,17 @@
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vuetify from 'vite-plugin-vuetify';
export default defineConfig({
plugins: [
vue(),
vuetify({ autoImport: true }),
],
server: {
proxy: {
'/api': {
target: 'http://localhost:5000',
changeOrigin: true,
},
},
},
});

View File

@ -0,0 +1,18 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vuetify from 'vite-plugin-vuetify'
export default defineConfig({
plugins: [
vue(),
vuetify({ autoImport: true }),
],
server: {
proxy: {
'/api': {
target: 'http://localhost:5000',
changeOrigin: true,
},
},
},
})