Venus : pages consigne
Venus (Nest + Vue, central/venus) expose la consigne via GraphQL et ajoute un groupe
Consignes dans la sidebar.
Sidebar dynamique
Les onglets par consigne sont générés depuis la requête consignes (rafraîchie toutes les
30 s, composable partagé useConsignes) :
const consigneTab = computed<SidebarTab>(() => ({
id: 'consignes',
label: 'Consignes',
icon: '📦',
defaultOpen: true,
children: [
{ id: 'consignes-overview', label: 'Vue d’ensemble', icon: '◎', to: '/consignes' },
...consignes.value.map((c) => ({
id: `consigne-${c.node_id}`,
label: c.name || c.node_id,
icon: c.online ? '🟢' : '⚪',
to: `/consignes/${encodeURIComponent(c.node_id)}`,
})),
{ id: 'consignes-parcel-new', label: 'Nouveau colis', icon: '➕', to: '/consignes/parcels/new' },
{ id: 'consignes-email', label: 'Email SMTP', icon: '✉', to: '/consignes/email' },
],
}));
Pages
| Route | Vue | Contenu |
|---|---|---|
/consignes | ConsignesView.vue | Cartes : en ligne, libres / occupés, canal et date de sync |
/consignes/:nodeId | ConsigneDetailView.vue | Grille des casiers, table des colis (statut, email, livraison), journal (rafraîchi toutes les 15 s) |
/consignes/parcels/new | ConsigneParcelNewView.vue | Formulaire : consigne active, casier libre, nom, email |
/consignes/email | ConsigneEmailView.vue | Configuration SMTP + email de test |
Captures du frontend
Liste des consignes

La vue d'ensemble présente les consignes connues, leur disponibilité et leur capacité.
Détail d'une consigne

La vue détaillée regroupe l'état du node, les onglets de supervision, le journal et l'état des casiers.
Chaîne d'appel backend
Les resolvers restent de simples dispatchers ; la logique est dans
modules/consignes/consignes.service.ts.
Schéma GraphQL
type Query {
consignes: [ConsigneDevice!]!
consigne(nodeId: String!): ConsigneDetail!
consigneParcels(nodeId: String): [ConsigneParcel!]!
consigneSmtp: SmtpSettings!
}
type Mutation {
createConsigneParcel(nodeId: String!, input: ParcelCreateInput!): ConsigneParcel!
saveConsigneSmtp(input: SmtpSettingsInput!): SmtpSettings!
testConsigneSmtp(to: String!): Boolean!
}
input ParcelCreateInput {
locker: Int!
recipient_name: String!
recipient_email: String!
}
Exemple :
curl -s -X POST http://localhost:8135/graphql -H 'Content-Type: application/json' \
-d '{"query":"{ consignes { node_id name enabled locker_count occupied_count online last_channel } }"}'
{"data":{"consignes":[{"node_id":"node-0001","name":"luckOS","enabled":true,
"locker_count":19,"occupied_count":1,"online":true,"last_channel":"grpc"}]}}
Fichiers
| Côté | Fichiers |
|---|---|
| Nest | src/models/consigne.model.ts, src/modules/consignes/*, src/api/graph/resolvers/consignes.resolver.ts, src/gateway/central-api.client.ts |
| Vue | web/src/types/consigne.ts, web/src/services/consigneApi.ts, web/src/composables/useConsignes.ts, web/src/views/Consigne*.vue, web/src/App.vue, web/src/router/index.ts |