Files
notytex/frontend/src/components/common/LoadingSpinner.vue
Bertrand Benjamin 2b08eb534a Migration v1 (Flask) -> v2 (FastAPI + Vue.js) complétée
 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!
2025-11-25 21:09:47 +01:00

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>