fix(ux): improve destructive action safety, accents, navigation and feedback
Replace window.confirm() with Modal dialogs for class deletion and grade reset. Add unsaved-changes guards to AssessmentFormView. Warn before deleting exercises/elements with existing grades. Surface invalid grades in a detailed Modal after save. Replace GradingView local toasts with global notification store. Fix missing French accents across CouncilView, CouncilStudentDetail, and ConfigView. Make dashboard "À corriger" card and student list rows clickable. Add visual hierarchy to assessment detail actions. Add loading overlay to trimester switch. Simplify email sending workflow by removing mode-switch pattern. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -57,7 +57,11 @@
|
||||
</div>
|
||||
|
||||
<!-- Stats principales - Grid 4 colonnes -->
|
||||
<div v-if="stats" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
||||
<div v-if="stats" class="relative">
|
||||
<div v-if="statsLoading" class="absolute inset-0 bg-white/60 z-10 flex items-center justify-center rounded-xl">
|
||||
<LoadingSpinner />
|
||||
</div>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
||||
<!-- Moyenne classe -->
|
||||
<div class="bg-white rounded-xl shadow-md p-6 hover:shadow-lg transition-all duration-300">
|
||||
<p class="text-sm text-gray-500 mb-1">Moyenne classe</p>
|
||||
@@ -96,6 +100,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Domaines et Compétences en 2 colonnes -->
|
||||
<div v-if="stats" class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
|
||||
@@ -243,6 +248,7 @@ const stats = ref(null)
|
||||
const trimester = ref(null) // null = vision annuelle par défaut
|
||||
const sortColumn = ref('name')
|
||||
const sortDirection = ref('asc')
|
||||
const statsLoading = ref(false)
|
||||
|
||||
async function fetchData() {
|
||||
loading.value = true
|
||||
@@ -257,7 +263,12 @@ async function fetchData() {
|
||||
|
||||
async function selectTrimester(t) {
|
||||
trimester.value = t
|
||||
stats.value = await classesStore.fetchClassStats(route.params.id, t)
|
||||
statsLoading.value = true
|
||||
try {
|
||||
stats.value = await classesStore.fetchClassStats(route.params.id, t)
|
||||
} finally {
|
||||
statsLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// Récupérer la liste des évaluations triée par date
|
||||
|
||||
Reference in New Issue
Block a user