feat: Permettre aux enseignants de créer et gérer les devoirs
Les enseignants avaient besoin d'un outil pour créer des devoirs assignés à leurs classes, avec filtrage automatique par matière selon la classe sélectionnée. Le système valide que la date d'échéance tombe un jour ouvrable (lundi-vendredi) et empêche les dates dans le passé. Le domaine modélise le devoir comme un agrégat avec pièces jointes, statut brouillon/publié, et événements métier (création, modification, suppression). Les handlers de notification écoutent ces événements pour les futurs envois aux parents et élèves.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
import SkeletonList from '$lib/components/atoms/Skeleton/SkeletonList.svelte';
|
||||
import { getApiBaseUrl } from '$lib/api/config';
|
||||
import { authenticatedFetch, isAuthenticated } from '$lib/auth';
|
||||
import { goto } from '$app/navigation';
|
||||
import { untrack } from 'svelte';
|
||||
|
||||
let {
|
||||
@@ -78,7 +79,7 @@
|
||||
<span class="action-icon">📝</span>
|
||||
<span class="action-label">Saisir des notes</span>
|
||||
</button>
|
||||
<button type="button" class="action-card" disabled={!hasRealData}>
|
||||
<button type="button" class="action-card" onclick={() => goto('/dashboard/teacher/homework')}>
|
||||
<span class="action-icon">📚</span>
|
||||
<span class="action-label">Créer un devoir</span>
|
||||
</button>
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
let pathname = $derived(page.url.pathname);
|
||||
let isEleve = $derived(getActiveRole() === 'ROLE_ELEVE');
|
||||
let isParent = $derived(getActiveRole() === 'ROLE_PARENT');
|
||||
let isProf = $derived(getActiveRole() === 'ROLE_PROF');
|
||||
|
||||
// Load user roles on mount for multi-role context switching (FR5)
|
||||
// Guard: only fetch if authenticated (or refresh succeeds), otherwise stay in demo mode
|
||||
@@ -102,6 +103,9 @@
|
||||
<nav class="desktop-nav">
|
||||
<RoleSwitcher />
|
||||
<a href="/dashboard" class="nav-link" class:active={pathname === '/dashboard'}>Tableau de bord</a>
|
||||
{#if isProf}
|
||||
<a href="/dashboard/teacher/homework" class="nav-link" class:active={pathname === '/dashboard/teacher/homework'}>Devoirs</a>
|
||||
{/if}
|
||||
{#if isEleve}
|
||||
<a href="/dashboard/schedule" class="nav-link" class:active={pathname === '/dashboard/schedule'}>Mon EDT</a>
|
||||
{/if}
|
||||
@@ -145,6 +149,11 @@
|
||||
<a href="/dashboard" class="mobile-nav-link" class:active={pathname === '/dashboard'}>
|
||||
Tableau de bord
|
||||
</a>
|
||||
{#if isProf}
|
||||
<a href="/dashboard/teacher/homework" class="mobile-nav-link" class:active={pathname === '/dashboard/teacher/homework'}>
|
||||
Devoirs
|
||||
</a>
|
||||
{/if}
|
||||
{#if isEleve}
|
||||
<a href="/dashboard/schedule" class="mobile-nav-link" class:active={pathname === '/dashboard/schedule'}>
|
||||
Mon emploi du temps
|
||||
|
||||
1128
frontend/src/routes/dashboard/teacher/homework/+page.svelte
Normal file
1128
frontend/src/routes/dashboard/teacher/homework/+page.svelte
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user