Backend (FastAPI): - REST API: auth, plants, beds, plantings - CRUD layer with CRUDBase - Pydantic v2 schemas for all entities - Alembic migration: complete schema + all enums - Seed data: 28 global plants + 15 compatibilities Frontend (Vue 3 + PrimeVue): - Axios client with JWT interceptor + auto-refresh - Pinia stores: auth, beds, plants - Views: Login, Beds, BedDetail, PlantLibrary - Components: AppLayout, BedForm, PlantingForm, PlantForm Docker: - docker-compose.yml (production) - docker-compose.dev.yml (development with hot-reload) - Nginx config with SPA fallback + API proxy - Multi-stage frontend Dockerfile - .env.example, .gitignore Version: 1.0.0-alpha
24 lines
611 B
Vue
24 lines
611 B
Vue
<template>
|
|
<div class="app-wrapper">
|
|
<AppLayout v-if="auth.isLoggedIn" />
|
|
<router-view v-else />
|
|
<Toast />
|
|
<ConfirmDialog />
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { useAuthStore } from '@/stores/auth'
|
|
import AppLayout from '@/components/AppLayout.vue'
|
|
import Toast from 'primevue/toast'
|
|
import ConfirmDialog from 'primevue/confirmdialog'
|
|
|
|
const auth = useAuthStore()
|
|
</script>
|
|
|
|
<style>
|
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
body { font-family: var(--font-family); background: var(--surface-ground); color: var(--text-color); }
|
|
.app-wrapper { min-height: 100vh; }
|
|
</style>
|