d72f67d374
Auto Tag Develop / tag (push) Successful in 7s
Page liste `/suppliers` (ERP-93, étape front 6/7 du M2).
## Périmètre
Répertoire fournisseurs uniquement (datatable + filtres + export). Les écrans new/consultation/edit sont d'autres tickets.
- `MalioDataTable` branché sur `usePaginatedList<Supplier>({url:'/suppliers'})`
- Colonnes : Nom, Catégories (`categories[].name`), Site (`sites[].name`, badges colorés), Dernière activité (`updatedAt`) ; clic ligne → `/suppliers/{id}`
- Boutons : « + Ajouter » (manage), « Filtrer » (drawer : search / categoryCode / siteId / includeArchived + badge + Réinitialiser), « Exporter » (XLSX)
- État filtres/pagination 100 % local (règle n°6) ; pagination 10/25/50 ; `useApi()` + composants `Malio*` only
## Différences vs Répertoire clients
- filtre `includeArchived` (au lieu de `archivedOnly`)
- colonne Catégories = `name` (clients affiche `code`)
- catégories du filtre = `?typeCode=FOURNISSEUR` ; export `/suppliers/export.xlsx`
## Tests
- `make nuxt-test` : 284 passed (11 nouveaux : useSuppliersRepository ×3, page index ×8)
- ESLint propre ; typecheck sans erreur sur les fichiers suppliers
- Golden path navigateur OK (page + drawer)
Aucun mirror RBAC à toucher (sidebar + permissions posés par #90/#92).
Reviewed-on: #81
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
55 lines
2.0 KiB
TypeScript
55 lines
2.0 KiB
TypeScript
import { usePaginatedList } from '~/shared/composables/usePaginatedList'
|
|
|
|
/**
|
|
* Site Starseed rattache a une adresse du fournisseur, tel qu'embarque en LISTE
|
|
* (groupe site:read) pour la colonne « Site » du Repertoire (badges colores).
|
|
* Agrege des adresses cote back via Supplier::getSites() (cf. spec-back M2).
|
|
*/
|
|
export interface SupplierSite {
|
|
id: number
|
|
name: string
|
|
color: string
|
|
}
|
|
|
|
/**
|
|
* Categorie (type FOURNISSEUR) rattachee au fournisseur, embarquee en LISTE
|
|
* (groupe category:read). La colonne « Catégories » affiche le `name` (et non le
|
|
* `code` comme au M1 clients — decision spec-front M2 § Datatable).
|
|
*/
|
|
export interface SupplierCategory {
|
|
code: string
|
|
name: string
|
|
}
|
|
|
|
/**
|
|
* Vue MINIMALE d'un fournisseur pour le Repertoire (datatable). Volontairement
|
|
* partielle : seuls les champs des colonnes + l'id (navigation) sont types ici.
|
|
* Le detail complet (onglets) est hors perimetre de cet ecran (ERP-93).
|
|
*/
|
|
export interface Supplier {
|
|
id: number
|
|
companyName: string
|
|
categories: SupplierCategory[]
|
|
sites: SupplierSite[]
|
|
/** Date ISO de derniere modification (default:read) — colonne « Dernière activité ». */
|
|
updatedAt: string | null
|
|
isArchived: boolean
|
|
}
|
|
|
|
/**
|
|
* Repertoire fournisseurs (ERP-93) — simple enveloppe de `usePaginatedList<Supplier>`
|
|
* sur la ressource `/suppliers` (RG-13 : pagination serveur obligatoire ; jamais
|
|
* de chargement integral en memoire). Miroir de `useClientsRepository` (M1).
|
|
*
|
|
* Les filtres (recherche, categories, sites, inclusion des archives) sont pilotes
|
|
* par la page via `setFilters` du composable partage — la remise en page 1 est
|
|
* garantie.
|
|
*
|
|
* Volontairement PAR INSTANCE (pas de singleton module-level) : l'etat tableau
|
|
* est propre a l'ecran Repertoire et meurt avec lui, comme tout consommateur de
|
|
* `usePaginatedList`. Aucun reset au logout a gerer.
|
|
*/
|
|
export function useSuppliersRepository() {
|
|
return usePaginatedList<Supplier>({ url: '/suppliers' })
|
|
}
|