codevdesign 0.0.79 → 0.0.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/composants/csqcChaise/chaiseConteneur.vue +362 -362
  2. package/composants/csqcChaise/chaiseItem.vue +54 -54
  3. package/composants/csqcDialogue.vue +112 -112
  4. package/composants/csqcEditeurTexteRiche.vue +318 -318
  5. package/composants/csqcEntete.vue +158 -158
  6. package/composants/csqcImportCSV.vue +125 -0
  7. package/composants/csqcRecherche.vue +212 -212
  8. package/composants/csqcRechercheUtilisateur.vue +197 -0
  9. package/composants/csqcTable/csqcTable.vue +386 -386
  10. package/composants/csqcTiroir.vue +155 -155
  11. package/composants/gabarit/csqcMenu.vue +274 -274
  12. package/index.ts +65 -61
  13. package/locales/en.json +21 -0
  14. package/locales/fr.json +36 -13
  15. package/modeles/assurancesAssuranceGeneraleGrics.ts +10 -0
  16. package/modeles/assurancesAssurancePersonnelleGrics.ts +13 -0
  17. package/modeles/assurancesContratGrics.ts +14 -0
  18. package/modeles/assurancesDetailsPrimeReguliereGrics.ts +12 -0
  19. package/modeles/assurancesDonneesAssureurGrics.ts +13 -0
  20. package/modeles/assurancesEmployeGrics.ts +11 -0
  21. package/modeles/assurancesGrics.ts +14 -0
  22. package/modeles/assurancesRegimeAssuranceGrics.ts +9 -0
  23. package/modeles/assurancesRegimeBaseEmployeurGrics.ts +9 -0
  24. package/modeles/assurancesRegimeBaseGrics.ts +9 -0
  25. package/modeles/composants/csqcMenuModele.ts +18 -18
  26. package/modeles/employeAdresseGrics.ts +13 -0
  27. package/modeles/employeAdressesPersonnellesGrics.ts +12 -0
  28. package/modeles/employeAffectationCorpsEmploiGrics.ts +9 -0
  29. package/modeles/employeBanquesCongeBanqueGrics.ts +9 -0
  30. package/modeles/employeBanquesCongeGrics.ts +14 -0
  31. package/modeles/employeBanquesCongeRegimeAbsenceGrics.ts +9 -0
  32. package/modeles/employeCourrielsPersonnels.ts +9 -0
  33. package/modeles/employeCourrielsProfessionnels.ts +9 -0
  34. package/modeles/employeEmploisCategorieGrics.ts +2 -2
  35. package/modeles/employeEmploisClasseGrics.ts +2 -2
  36. package/modeles/employeEmploisCorpsEmploiGrics.ts +2 -2
  37. package/modeles/employeEmploisEtatEmploiGrics.ts +2 -2
  38. package/modeles/employeEmploisGrics.ts +29 -29
  39. package/modeles/employeEmploisGroupePaieGrics.ts +2 -2
  40. package/modeles/employeEmploisLieuTravailPrincipalGrics.ts +3 -3
  41. package/modeles/employeEmploisLieuxTravailSecondairesGrics.ts +3 -3
  42. package/modeles/employeEmploisRegimeAbsenceGrics.ts +2 -2
  43. package/modeles/employeEmploisSecteurGrics.ts +2 -2
  44. package/modeles/employeEmploisStatutEngagementGrics.ts +2 -2
  45. package/modeles/employeExperienceEmploiGrics.ts +9 -0
  46. package/modeles/employeExperienceEmployeGrics.ts +12 -0
  47. package/modeles/employeExperienceExperiencesGrics.ts +11 -0
  48. package/modeles/employeExperienceExperiencesTotalesGrics.ts +15 -0
  49. package/modeles/employeExperienceGrics.ts +17 -0
  50. package/modeles/employeGrics.ts +31 -0
  51. package/modeles/employeMinsLsCodev.ts +10 -0
  52. package/modeles/employeTelephoneGrics.ts +12 -0
  53. package/modeles/employeTelephonesPersonnelsGrics.ts +11 -0
  54. package/modeles/employeTelephonesProfessionnelsGrics.ts +11 -0
  55. package/modeles/groupeCE.ts +6 -6
  56. package/modeles/groupeCEIntervalle.ts +6 -6
  57. package/modeles/historiquesAbsenceBanqueGrics.ts +9 -0
  58. package/modeles/historiquesAbsenceGrics.ts +21 -0
  59. package/modeles/historiquesAbsenceLieuTravailGrics.ts +9 -0
  60. package/modeles/historiquesAbsenceSousBanqueGrics.ts +9 -0
  61. package/modeles/motifsAbsenceBanque.ts +9 -0
  62. package/modeles/motifsAbsenceGrics.ts +17 -0
  63. package/modeles/motifsAbsenceRegimeAbsence.ts +9 -0
  64. package/modeles/motifsAbsenceSousMotifs.ts +9 -0
  65. package/modeles/motifsAbsenceTraitementBanques.ts +11 -0
  66. package/modeles/syndicat.ts +26 -0
  67. package/modeles/syndicatGroupeCe.ts +10 -0
  68. package/modeles/syndicatResponsable.ts +15 -0
  69. package/modeles/syndicatUnite.ts +10 -0
  70. package/modeles/typeTelephone.ts +12 -0
  71. package/modeles/unite.ts +1 -2
  72. package/modeles/utilisateur.ts +8 -8
  73. package/package.json +3 -3
@@ -1,158 +1,158 @@
1
- <template>
2
- <v-app-bar
3
- color="white"
4
- class="px-0 mx-0"
5
- :style="{ position: 'sticky' }"
6
- height="82px"
7
- >
8
- <v-row
9
- class="pt-2"
10
- @resize="controlAffichage"
11
- >
12
- <v-col
13
- :cols="titreCol"
14
- class="pr-0 mr-0 pl-5"
15
- >
16
- <v-toolbar-title class="titre">
17
- <!-- Barre de retour -->
18
- <slot name="retour">
19
- <v-icon
20
- v-if="retour"
21
- size="large"
22
- start
23
- color="grisMoyen"
24
- icon="mdi-arrow-left-thin"
25
- @click="retournerMenu"
26
- /></slot>
27
-
28
- <div class="titre-bloc">
29
- <!-- Titre -->
30
- <slot name="titre"
31
- ><span class="pl-3"> {{ props.titre }}</span></slot
32
- >
33
-
34
- <!-- État -->
35
- <slot name="etat">
36
- <span
37
- v-if="monEtat?.afficher"
38
- class="pl-10"
39
- >
40
- <v-btn
41
- size="small"
42
- :color="monEtat.couleur"
43
- variant="tonal"
44
- >
45
- {{ monEtat.texte }}
46
- </v-btn>
47
- </span></slot
48
- >
49
- <!-- État secondaire-->
50
- <slot name="etatSecondaire">
51
- <span
52
- v-if="monEtatSecondaire?.afficher"
53
- class="pl-3"
54
- >
55
- <v-btn
56
- size="small"
57
- :color="monEtatSecondaire.couleur"
58
- variant="tonal"
59
- >
60
- {{ monEtatSecondaire.texte }}
61
- </v-btn>
62
- </span></slot
63
- >
64
- <!-- Sous-titre -->
65
- <slot name="soustitre"
66
- ><span class="pl-3 soustitre"> {{ props.soustitre }}</span></slot
67
- >
68
- </div>
69
- </v-toolbar-title>
70
- </v-col>
71
- </v-row>
72
- <!-- Barre en bas -->
73
- <div style="position: absolute; bottom: 0; left: 0; right: 0; height: 2px; background-color: #808a9d" />
74
- </v-app-bar>
75
- </template>
76
-
77
- <script setup lang="ts">
78
- import { useRouter } from 'vue-router'
79
- import { ref, computed } from 'vue'
80
-
81
- // Déclaration de l'interface
82
- interface EnteteEtat {
83
- afficher: boolean
84
- couleur: string
85
- texte: string
86
- }
87
-
88
- interface EnteteEtatSecondaire {
89
- afficher: boolean
90
- couleur: string
91
- texte: string
92
- }
93
-
94
- const router = useRouter()
95
-
96
- const props = defineProps<{
97
- titre: string
98
- soustitre?: string
99
- retour?: string
100
- etat?: EnteteEtat
101
- etatSecondaire?: EnteteEtatSecondaire
102
- }>()
103
-
104
- const titreCol = ref(12)
105
-
106
- // État calculé basé sur la prop, avec fallback
107
- const monEtat = computed<EnteteEtat>(() => {
108
- return (
109
- props.etat ?? {
110
- afficher: false,
111
- couleur: 'primary',
112
- texte: 'test',
113
- }
114
- )
115
- })
116
-
117
- const monEtatSecondaire = computed<EnteteEtatSecondaire>(() => {
118
- return (
119
- props.etatSecondaire ?? {
120
- afficher: false,
121
- couleur: 'primary',
122
- texte: 'test',
123
- }
124
- )
125
- })
126
-
127
- function retournerMenu() {
128
- if (props.retour) {
129
- router.push({ name: props.retour })
130
- }
131
- }
132
-
133
- function controlAffichage() {
134
- // logique à l’événement de redimensionnement
135
- }
136
- </script>
137
- <style lang="css" scoped>
138
- .titre {
139
- font-size: 1.85rem;
140
- color: #223654;
141
- font-weight: bold;
142
- margin-bottom: 15px;
143
- }
144
- .soustitre {
145
- display: block;
146
- font-size: 1rem;
147
- color: #223654;
148
- font-weight: normal;
149
- }
150
- .titre-bloc {
151
- display: inline-block;
152
- vertical-align: middle;
153
- padding-left: 12px;
154
- }
155
- .v-icon:hover {
156
- color: #095797 !important;
157
- }
158
- </style>
1
+ <template>
2
+ <v-app-bar
3
+ color="white"
4
+ class="px-0 mx-0"
5
+ :style="{ position: 'sticky' }"
6
+ height="82px"
7
+ >
8
+ <v-row
9
+ class="pt-2"
10
+ @resize="controlAffichage"
11
+ >
12
+ <v-col
13
+ :cols="titreCol"
14
+ class="pr-0 mr-0 pl-5"
15
+ >
16
+ <v-toolbar-title class="titre">
17
+ <!-- Barre de retour -->
18
+ <slot name="retour">
19
+ <v-icon
20
+ v-if="retour"
21
+ size="large"
22
+ start
23
+ color="grisMoyen"
24
+ icon="mdi-arrow-left-thin"
25
+ @click="retournerMenu"
26
+ /></slot>
27
+
28
+ <div class="titre-bloc">
29
+ <!-- Titre -->
30
+ <slot name="titre"
31
+ ><span class="pl-3"> {{ props.titre }}</span></slot
32
+ >
33
+
34
+ <!-- État -->
35
+ <slot name="etat">
36
+ <span
37
+ v-if="monEtat?.afficher"
38
+ class="pl-10"
39
+ >
40
+ <v-btn
41
+ size="small"
42
+ :color="monEtat.couleur"
43
+ variant="tonal"
44
+ >
45
+ {{ monEtat.texte }}
46
+ </v-btn>
47
+ </span></slot
48
+ >
49
+ <!-- État secondaire-->
50
+ <slot name="etatSecondaire">
51
+ <span
52
+ v-if="monEtatSecondaire?.afficher"
53
+ class="pl-3"
54
+ >
55
+ <v-btn
56
+ size="small"
57
+ :color="monEtatSecondaire.couleur"
58
+ variant="tonal"
59
+ >
60
+ {{ monEtatSecondaire.texte }}
61
+ </v-btn>
62
+ </span></slot
63
+ >
64
+ <!-- Sous-titre -->
65
+ <slot name="soustitre"
66
+ ><span class="pl-3 soustitre"> {{ props.soustitre }}</span></slot
67
+ >
68
+ </div>
69
+ </v-toolbar-title>
70
+ </v-col>
71
+ </v-row>
72
+ <!-- Barre en bas -->
73
+ <div style="position: absolute; bottom: 0; left: 0; right: 0; height: 2px; background-color: #808a9d" />
74
+ </v-app-bar>
75
+ </template>
76
+
77
+ <script setup lang="ts">
78
+ import { useRouter } from 'vue-router'
79
+ import { ref, computed } from 'vue'
80
+
81
+ // Déclaration de l'interface
82
+ interface EnteteEtat {
83
+ afficher: boolean
84
+ couleur: string
85
+ texte: string
86
+ }
87
+
88
+ interface EnteteEtatSecondaire {
89
+ afficher: boolean
90
+ couleur: string
91
+ texte: string
92
+ }
93
+
94
+ const router = useRouter()
95
+
96
+ const props = defineProps<{
97
+ titre: string
98
+ soustitre?: string
99
+ retour?: string
100
+ etat?: EnteteEtat
101
+ etatSecondaire?: EnteteEtatSecondaire
102
+ }>()
103
+
104
+ const titreCol = ref(12)
105
+
106
+ // État calculé basé sur la prop, avec fallback
107
+ const monEtat = computed<EnteteEtat>(() => {
108
+ return (
109
+ props.etat ?? {
110
+ afficher: false,
111
+ couleur: 'primary',
112
+ texte: 'test',
113
+ }
114
+ )
115
+ })
116
+
117
+ const monEtatSecondaire = computed<EnteteEtatSecondaire>(() => {
118
+ return (
119
+ props.etatSecondaire ?? {
120
+ afficher: false,
121
+ couleur: 'primary',
122
+ texte: 'test',
123
+ }
124
+ )
125
+ })
126
+
127
+ function retournerMenu() {
128
+ if (props.retour) {
129
+ router.push({ name: props.retour })
130
+ }
131
+ }
132
+
133
+ function controlAffichage() {
134
+ // logique à l’événement de redimensionnement
135
+ }
136
+ </script>
137
+ <style lang="css" scoped>
138
+ .titre {
139
+ font-size: 1.85rem;
140
+ color: #223654;
141
+ font-weight: bold;
142
+ margin-bottom: 15px;
143
+ }
144
+ .soustitre {
145
+ display: block;
146
+ font-size: 1rem;
147
+ color: #223654;
148
+ font-weight: normal;
149
+ }
150
+ .titre-bloc {
151
+ display: inline-block;
152
+ vertical-align: middle;
153
+ padding-left: 12px;
154
+ }
155
+ .v-icon:hover {
156
+ color: #095797 !important;
157
+ }
158
+ </style>
@@ -0,0 +1,125 @@
1
+ <template>
2
+ <div>
3
+ <v-btn
4
+ color="success"
5
+ variant="outlined"
6
+ :loading="chargement"
7
+ class="elevation-0"
8
+ @click="importCsv"
9
+ >
10
+ {{ boutonTexte }}
11
+ <template #append>
12
+ <v-icon icon="mdi-microsoft-excel"></v-icon>
13
+ </template>
14
+ </v-btn>
15
+
16
+ <input
17
+ ref="fileInput"
18
+ type="file"
19
+ accept=".csv"
20
+ style="display: none"
21
+ @change="handleFileUpload"
22
+ />
23
+ </div>
24
+ </template>
25
+
26
+ <script setup lang="ts">
27
+ import { ref, computed } from 'vue'
28
+ import { useI18n } from 'vue-i18n'
29
+
30
+ // Props
31
+ const props = withDefaults(
32
+ defineProps<{
33
+ boutonTexte?: string
34
+ erreurTexte?: string
35
+ chargement?: boolean
36
+ }>(),
37
+ {
38
+ chargement: false, // défaut
39
+ },
40
+ )
41
+ const emit = defineEmits(['import', 'import-erreur'])
42
+
43
+ const { t } = useI18n()
44
+
45
+ const boutonTexte = computed(() => props.boutonTexte ?? t('csqc.bouton.importer'))
46
+ const erreurTexte = computed(() => props.erreurTexte ?? t('csqc.csqcImportCSV.erreur.lectureFichier'))
47
+
48
+ // Références
49
+ const fileInput = ref<HTMLInputElement | null>(null)
50
+ const csvFile = ref<File | null>(null)
51
+
52
+ // Méthodes
53
+ function importCsv() {
54
+ fileInput.value?.click()
55
+ }
56
+
57
+ function handleFileUpload(event: Event) {
58
+ const target = event.target as HTMLInputElement
59
+ const file = target.files?.[0]
60
+
61
+ if (file?.name.toLowerCase().endsWith('.csv')) {
62
+ csvFile.value = file
63
+
64
+ const reader = new FileReader()
65
+
66
+ reader.onload = () => {
67
+ try {
68
+ let text = reader.result as string
69
+
70
+ // Supprime BOM UTF-8 si présent
71
+ if (text.charCodeAt(0) === 0xfeff) {
72
+ text = text.slice(1)
73
+ }
74
+
75
+ const lignes = text
76
+ .trim()
77
+ .split(/\r?\n/)
78
+ .filter(row => row.trim() !== '') // ignore lignes vides
79
+
80
+ if (lignes.length === 0) {
81
+ emit('import-erreur', 'Le fichier CSV est vide.')
82
+ return
83
+ }
84
+
85
+ // Détection automatique du séparateur
86
+ const separateur = detecterSeparateur(lignes[0]!)
87
+
88
+ // Découpage des lignes
89
+ const data: string[][] = lignes.map(row => row.split(separateur).map(cell => cell.trim()))
90
+
91
+ emit('import', data)
92
+ } catch (error) {
93
+ emit('import-erreur', erreurTexte || t('csqc.csqcImportCSV.erreur.lectureFichier'))
94
+ }
95
+ }
96
+
97
+ reader.onerror = () => {
98
+ emit('import-erreur', t('csqc.csqcImportCSV.erreur.lectureFichier'))
99
+ }
100
+
101
+ reader.readAsText(file)
102
+ } else {
103
+ const message = erreurTexte || t('csqc.csqcImportCSV.erreur.erreur')
104
+ emit('import-erreur', message)
105
+ csvFile.value = null
106
+ }
107
+ }
108
+
109
+ // Fonction pour détecter le séparateur le plus probable
110
+ function detecterSeparateur(ligne: string): string {
111
+ const separateursTestés = [',', ';', '\t', '|']
112
+ let meilleurSeparateur = ','
113
+ let maxColonnes = 0
114
+
115
+ for (const sep of separateursTestés) {
116
+ const nb = ligne.split(sep).length
117
+ if (nb > maxColonnes) {
118
+ maxColonnes = nb
119
+ meilleurSeparateur = sep
120
+ }
121
+ }
122
+
123
+ return meilleurSeparateur
124
+ }
125
+ </script>