diff --git a/frontend/app/pages/index.vue b/frontend/app/pages/index.vue index 6c92db8..55125b7 100644 --- a/frontend/app/pages/index.vue +++ b/frontend/app/pages/index.vue @@ -2,6 +2,7 @@ const documents = useDocumentsStore() const decisions = useDecisionsStore() const protocols = useProtocolsStore() +const mandates = useMandatesStore() const auth = useAuthStore() const loading = ref(true) @@ -13,6 +14,7 @@ onMounted(async () => { documents.fetchAll(), decisions.fetchAll(), protocols.fetchProtocols(), + mandates.fetchAll(), ]) } finally { @@ -20,52 +22,61 @@ onMounted(async () => { } }) -const entryCards = computed(() => [ - { - key: 'decisions', - title: 'Décisions structurantes', - icon: 'i-lucide-scale', - to: '/decisions', - count: decisions.activeDecisions.length, - countLabel: `${decisions.activeDecisions.length} en cours`, - totalLabel: `${decisions.list.length} au total`, - description: 'Processus de décision collectifs', - color: 'var(--mood-secondary, var(--mood-accent))', - }, - { - key: 'documents', - title: 'Documents de référence', - icon: 'i-lucide-book-open', - to: '/documents', - count: documents.activeDocuments.length, - countLabel: `${documents.activeDocuments.length} actif${documents.activeDocuments.length > 1 ? 's' : ''}`, - totalLabel: `${documents.list.length} au total`, - description: 'Textes fondateurs sous vote permanent', - color: 'var(--mood-accent)', - }, - { - key: 'mandats', - title: 'Mandats et nominations', - icon: 'i-lucide-user-check', - to: '/mandates', - count: null, - countLabel: null, - totalLabel: null, - description: 'Missions déléguées avec nomination en binôme', - color: 'var(--mood-success)', - }, - { - key: 'protocoles', - title: 'Protocoles et fonctionnement', - icon: 'i-lucide-settings', - to: '/protocols', - count: 2, - countLabel: '2 protocoles', - totalLabel: `${protocols.protocols.length} modalités de vote`, - description: 'Modalités de vote, formules, workflows', - color: 'var(--mood-tertiary, var(--mood-accent))', - }, -]) +const entryCards = computed(() => { + const decisionsTotal = decisions.list.length + const decisionsActive = decisions.activeDecisions.length + + const docsActive = documents.activeDocuments.length + const docsTotal = documents.list.length + + const mandatesActive = mandates.list.filter(m => ['active', 'voting'].includes(m.status)).length + const mandatesTotal = mandates.list.length + + const protocolsCount = protocols.protocols.length + + return [ + { + key: 'decisions', + title: 'Décisions', + icon: 'i-lucide-scale', + to: '/decisions', + count: decisionsTotal, + countLabel: decisionsActive > 0 ? `${decisionsActive} en cours` : `${decisionsTotal} au total`, + totalLabel: decisionsActive > 0 ? `${decisionsTotal} au total` : 'aucune en cours', + color: 'var(--mood-secondary, var(--mood-accent))', + }, + { + key: 'documents', + title: 'Documents', + icon: 'i-lucide-book-open', + to: '/documents', + count: docsActive || docsTotal, + countLabel: docsActive > 0 ? `${docsActive} actif${docsActive > 1 ? 's' : ''}` : `${docsTotal} au total`, + totalLabel: docsTotal > 0 ? `${docsTotal} document${docsTotal > 1 ? 's' : ''}` : 'textes fondateurs', + color: 'var(--mood-accent)', + }, + { + key: 'mandats', + title: 'Mandats', + icon: 'i-lucide-user-check', + to: '/mandates', + count: mandatesTotal || null, + countLabel: mandatesTotal > 0 ? `${mandatesActive} en cours` : null, + totalLabel: mandatesTotal > 0 ? `${mandatesTotal} mandats` : 'missions déléguées', + color: 'var(--mood-success)', + }, + { + key: 'protocoles', + title: 'Protocoles', + icon: 'i-lucide-settings', + to: '/protocols', + count: protocolsCount || null, + countLabel: protocolsCount > 0 ? `${protocolsCount} protocoles` : null, + totalLabel: 'modalités de vote', + color: 'var(--mood-tertiary, var(--mood-accent))', + }, + ] +}) const recentDecisions = computed(() => { return [...decisions.list] @@ -98,7 +109,7 @@ function formatDate(dateStr: string): string {
Décisions collectives pour la communauté Duniter / G1
@@ -127,7 +138,7 @@ function formatDate(dateStr: string): string {
{{ card.totalLabel }}
- {{ card.description }}
+ {{ card.totalLabel }}