✨ Changements majeurs: - Suppression complète du code Flask legacy - Migration backend FastAPI vers racine /backend - Migration frontend Vue.js vers racine /frontend - Suppression de notytex-v2/ (code monté à la racine) ✅ Validations: - Backend démarre correctement (port 8000) - API /api/v2/health répond healthy - 99/99 tests unitaires passent - Frontend configuré avec proxy Vite 📝 Documentation: - README.md réécrit pour v2 - Instructions de démarrage mises à jour - .gitignore adapté pour backend/frontend/ 🎯 Architecture finale: notytex/ ├── backend/ # FastAPI + SQLAlchemy + Pydantic ├── frontend/ # Vue 3 + Vite + TailwindCSS ├── docs/ # Documentation └── school_management.db # Base de données (inchangée) Jalon 6 complété: Application v2 prête pour utilisation!
56 lines
1.1 KiB
Vue
56 lines
1.1 KiB
Vue
<template>
|
|
<div class="flex items-center justify-center" :class="containerClass">
|
|
<div
|
|
class="animate-spin rounded-full border-2 border-gray-200"
|
|
:class="[sizeClass, colorClass]"
|
|
></div>
|
|
<span v-if="text" class="ml-3 text-gray-600">{{ text }}</span>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { computed } from 'vue'
|
|
|
|
const props = defineProps({
|
|
size: {
|
|
type: String,
|
|
default: 'md',
|
|
validator: (value) => ['sm', 'md', 'lg'].includes(value)
|
|
},
|
|
color: {
|
|
type: String,
|
|
default: 'primary'
|
|
},
|
|
text: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
fullPage: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
})
|
|
|
|
const sizeClass = computed(() => {
|
|
const sizes = {
|
|
sm: 'w-4 h-4',
|
|
md: 'w-8 h-8',
|
|
lg: 'w-12 h-12'
|
|
}
|
|
return sizes[props.size]
|
|
})
|
|
|
|
const colorClass = computed(() => {
|
|
const colors = {
|
|
primary: 'border-t-primary-600',
|
|
success: 'border-t-success-600',
|
|
danger: 'border-t-danger-600'
|
|
}
|
|
return colors[props.color] || colors.primary
|
|
})
|
|
|
|
const containerClass = computed(() => {
|
|
return props.fullPage ? 'min-h-[50vh]' : ''
|
|
})
|
|
</script>
|