Some checks failed
Auto Tag Develop / tag (push) Has been cancelled
| Numéro du ticket | Titre du ticket | |------------------|-----------------| | | | ## Description de la PR ## Modification du .env ## Check list - [ ] Pas de régression - [x] TU/TI/TF rédigée - [ ] TU/TI/TF OK - [ ] CHANGELOG modifié Reviewed-on: #50 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
84 lines
3.6 KiB
TypeScript
84 lines
3.6 KiB
TypeScript
import { computed } from 'vue'
|
|
import { useAuthStore } from '~/stores/auth'
|
|
|
|
export interface BovineColumn {
|
|
key: string
|
|
label: string
|
|
width?: string
|
|
}
|
|
|
|
export interface UseBovineColumnsOptions {
|
|
/**
|
|
* 'inventory' (par défaut) : colonnes complètes incluant Bâtiment + Case.
|
|
* 'case' : pas de Bâtiment ni Case (déjà dans le titre de la page),
|
|
* largeurs élargies pour combler l'espace.
|
|
*/
|
|
variant?: 'inventory' | 'case'
|
|
}
|
|
|
|
/**
|
|
* Définition partagée des colonnes des tableaux bovins (inventory + case).
|
|
* Variants distincts pour chaque écran et chaque rôle (admin/user) afin de
|
|
* pouvoir ajuster les largeurs indépendamment.
|
|
*/
|
|
export const useBovineColumns = (options: UseBovineColumnsOptions = {}) => {
|
|
const auth = useAuthStore()
|
|
|
|
const adminColumnsInventory: BovineColumn[] = [
|
|
{ key: 'nationalNumber', label: 'N° National', width: '80px' },
|
|
{ key: 'workNumber', label: 'N° Travail', width: '60px' },
|
|
{ key: 'sex', label: 'Sexe', width: '70px' },
|
|
{ key: 'birthDate', label: 'Né le', width: '72px' },
|
|
{ key: 'age', label: 'Age', width: '110px' },
|
|
{ key: 'bovineType.label', label: 'Race', width: '90px' },
|
|
{ key: 'buildingCase.building.label', label: 'Bâtiment', width: '1fr' },
|
|
{ key: 'buildingCase.caseNumber', label: 'Case', width: '42px' },
|
|
{ key: 'arrivalDate', label: 'Entrée le', width: '90px' },
|
|
{ key: 'pricePerKg', label: 'Prix/kg', width: '65px' },
|
|
{ key: 'finalPrice', label: 'Prix total', width: '80px' }
|
|
]
|
|
|
|
const userColumnsInventory: BovineColumn[] = [
|
|
{ key: 'nationalNumber', label: 'N° National', width: '80px' },
|
|
{ key: 'workNumber', label: 'N° Travail', width: '60px' },
|
|
{ key: 'sex', label: 'Sexe', width: '70px' },
|
|
{ key: 'birthDate', label: 'Né le', width: '72px' },
|
|
{ key: 'age', label: 'Age', width: '110px' },
|
|
{ key: 'bovineType.label', label: 'Race', width: '1fr' },
|
|
{ key: 'buildingCase.building.label', label: 'Bâtiment', width: '120px' },
|
|
{ key: 'buildingCase.caseNumber', label: 'Case', width: '42px' },
|
|
{ key: 'arrivalDate', label: 'Entrée le', width: '90px' }
|
|
]
|
|
|
|
const adminColumnsCase: BovineColumn[] = [
|
|
{ key: 'nationalNumber', label: 'N° National', width: '110px' },
|
|
{ key: 'workNumber', label: 'N° Travail', width: '85px' },
|
|
{ key: 'sex', label: 'Sexe', width: '90px' },
|
|
{ key: 'birthDate', label: 'Né le', width: '100px' },
|
|
{ key: 'age', label: 'Age', width: '90px' },
|
|
{ key: 'bovineType.label', label: 'Race', width: '1fr' },
|
|
{ key: 'arrivalDate', label: 'Entrée le', width: '110px' },
|
|
{ key: 'pricePerKg', label: 'Prix/kg', width: '85px' },
|
|
{ key: 'finalPrice', label: 'Prix total', width: '105px' }
|
|
]
|
|
|
|
const userColumnsCase: BovineColumn[] = [
|
|
{ key: 'nationalNumber', label: 'N° National', width: '130px' },
|
|
{ key: 'workNumber', label: 'N° Travail', width: '100px' },
|
|
{ key: 'sex', label: 'Sexe', width: '110px' },
|
|
{ key: 'birthDate', label: 'Né le', width: '140px' },
|
|
{ key: 'age', label: 'Age', width: '130px' },
|
|
{ key: 'bovineType.label', label: 'Race', width: '1fr' },
|
|
{ key: 'arrivalDate', label: 'Entrée le', width: '170px' }
|
|
]
|
|
|
|
const columns = computed<BovineColumn[]>(() => {
|
|
if (options.variant === 'case') {
|
|
return auth.isAdmin ? adminColumnsCase : userColumnsCase
|
|
}
|
|
return auth.isAdmin ? adminColumnsInventory : userColumnsInventory
|
|
})
|
|
|
|
return { columns }
|
|
}
|