codevdesign 0.0.90 → 0.0.92

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.
@@ -1,281 +1,281 @@
1
- <template>
2
- <!-- desktop -->
3
- <div v-if="!estMobile">
4
- <v-toolbar
5
- class="pa-0 ajouterPointeur barreMenu"
6
- :border="false"
7
- elevation="2"
8
- >
9
- <div
10
- v-for="item in filtrerMenuItems"
11
- :key="item.nom"
12
- class="pt-1"
13
- >
14
- <v-btn
15
- v-if="doitAfficherItemMenu(item)"
16
- variant="text"
17
- :to="item.path"
18
- :active="item.path === route"
19
- :active-color="'white'"
20
- :style="'min-width: 100px;'"
21
- >{{ item.nom }}</v-btn
22
- >
23
- </div>
24
- <v-spacer></v-spacer>
25
- <!-- Sous Liste -->
26
- <v-menu
27
- v-for="(item, index) in filtrerSousListe"
28
- :key="index"
29
- open-on-hover
30
- >
31
- <template #activator="{ props }">
32
- <v-btn
33
- color="white"
34
- v-bind="props"
35
- :active="estActifSousliste(item)"
36
- >
37
- {{ item.nom }}
38
- </v-btn>
39
- </template>
40
-
41
- <v-list
42
- style="background-color: #223654 !important"
43
- min-width="230px"
44
- >
45
- <v-list-item
46
- v-for="(sousitem, sousindex) in obtenirItemsSousListeSelonDroits(item.id)"
47
- :key="sousindex"
48
- >
49
- <v-btn
50
- :max-height="35"
51
- width="100%"
52
- class="params_item"
53
- :to="sousitem.path"
54
- variant="text"
55
- :active="sousitem.path === route"
56
- >{{ sousitem.nom }}</v-btn
57
- >
58
- </v-list-item>
59
- </v-list>
60
- </v-menu>
61
- <v-btn
62
- v-if="btnDeconnexion"
63
- variant="text"
64
- :style="'min-width: 100px;'"
65
- @click="deconnexion"
66
- >{{ $t('csqc.csqcMenu.deconnexion') }}</v-btn
67
- >
68
- </v-toolbar>
69
- </div>
70
-
71
- <!-- mobile -->
72
- <div v-else>
73
- <v-toolbar class="pa-0 ajouterPointeur barreMenuMobile">
74
- <v-app-bar-nav-icon
75
- variant="text"
76
- @click.stop="menu = !menu"
77
- ></v-app-bar-nav-icon>
78
- <v-toolbar-title
79
- ><label
80
- class="ajouterPointeur"
81
- style="color: white !important"
82
- >{{ $t('menu.menu') }}</label
83
- >
84
- </v-toolbar-title>
85
- </v-toolbar>
86
-
87
- <!-- mobile -->
88
- <v-navigation-drawer
89
- v-model="menu"
90
- nav
91
- >
92
- <v-list>
93
- <!-- Menu principal -->
94
- <template
95
- v-for="item in filtrerMenuItems"
96
- :key="item.nom"
97
- >
98
- <v-list-item
99
- :to="item.path"
100
- :active="item.path === route"
101
- :title="item.nom"
102
- />
103
- </template>
104
-
105
- <!-- Sous-listes -->
106
- <template
107
- v-for="item in filtrerSousListe"
108
- :key="item.id"
109
- >
110
- <v-list-group :value="item.nom">
111
- <template #activator="{ props }">
112
- <v-list-item
113
- v-bind="props"
114
- :title="item.nom"
115
- />
116
- </template>
117
-
118
- <template
119
- v-for="(sousitem, index) in obtenirItemsSousListeSelonDroits(item.id)"
120
- :key="index"
121
- >
122
- <v-list-item
123
- :title="sousitem.nom"
124
- :value="sousitem.nom"
125
- :to="sousitem.path"
126
- />
127
- </template>
128
- </v-list-group>
129
- </template>
130
-
131
- <!-- ✅ Déconnexion : UNE seule fois -->
132
- <v-list-item
133
- v-if="btnDeconnexion"
134
- :title="$t('csqc.csqcMenu.deconnexion')"
135
- @click="deconnexion"
136
- />
137
- </v-list>
138
- </v-navigation-drawer>
139
- </div>
140
- </template>
141
-
142
- <script setup lang="ts">
143
- import type { MenuItem, SousListe, SousListeItems } from '../../modeles/composants/csqcMenuModele'
144
- import { ref, computed } from 'vue'
145
-
146
- const props = defineProps({
147
- estMobile: {
148
- type: Boolean,
149
- required: true,
150
- },
151
- btnDeconnexion: {
152
- type: Boolean,
153
- required: false,
154
- },
155
- route: {
156
- type: String,
157
- required: true,
158
- },
159
- menuItems: {
160
- type: Array as () => MenuItem[],
161
- required: true,
162
- },
163
- sousliste: {
164
- type: Array as () => SousListe[],
165
- required: false,
166
- default: () => [],
167
- },
168
- souslisteItems: {
169
- type: Array as () => SousListeItems[],
170
- required: false,
171
- default: () => [],
172
- },
173
- droitsMap: {
174
- type: Object as () => Record<string, boolean>,
175
- required: true,
176
- default: () => ({}),
177
- },
178
- })
179
-
180
- const menu = ref<boolean>(false)
181
- const emit = defineEmits(['deconnexion'])
182
-
183
- /*const verifierDroits = (monelement: string) => {
184
- return props.droitsMap[monelement] || false
185
- }*/
186
-
187
- const deconnexion = () => {
188
- emit('deconnexion')
189
- }
190
-
191
- const doitAfficherItemMenu = (item: MenuItem) => {
192
- return props.droitsMap[item.droit] || false
193
- }
194
-
195
- const filtrerMenuItems = computed(() => {
196
- return props.menuItems.filter(item => props.droitsMap[item.droit])
197
- })
198
-
199
- const filtrerSousListe = computed(() => {
200
- return props.sousliste.filter(item => props.droitsMap[item.droit])
201
- })
202
-
203
- const obtenirItemsSousListeSelonDroits = (monitemId: number) => {
204
- return props.souslisteItems.filter(item => item.parentId === monitemId && props.droitsMap[item.droit])
205
- }
206
-
207
- // Vérifie si un item de la sous-liste est actif (route correspond à un item)
208
- const estActifSousliste = (item: SousListe) => {
209
- // Vérifie si un des sous-items correspond à la route
210
- return obtenirItemsSousListeSelonDroits(item.id).some(sousitem => sousitem.path === props.route)
211
- }
212
- </script>
213
- <style lang="css" scoped>
214
- /* desktop background de la barre de menu et hauteur */
215
- .v-toolbar {
216
- background-color: #223654;
217
- height: 64px;
218
- }
219
-
220
- /* desktop couleur du texte de la barre, marge du haut, padding */
221
- .barreMenu {
222
- color: white !important;
223
- padding: 0 10px 0 10px !important;
224
- }
225
- /* desktop */
226
- .v-btn {
227
- font-weight: 400;
228
- height: 72px !important;
229
- }
230
- /* desktop */
231
- .v-btn--active {
232
- font-weight: 600 !important;
233
- }
234
-
235
- /* desktop empeche le texte parametre detre trop bas */
236
- .params {
237
- padding-top: 5px !important;
238
- }
239
- /* desktop */
240
- .params_item {
241
- font-weight: 400;
242
- color: white !important;
243
- background-color: #223654 !important;
244
- }
245
- /* desktop */
246
- .params_item.v-btn--active {
247
- color: white !important;
248
- font-weight: 600 !important;
249
- }
250
- /* desktop */
251
- .params_item.v-btn--active:hover {
252
- color: white !important;
253
- background-color: #223654 !important;
254
- }
255
- /* desktop */
256
- .params_item.v-btn--active:hover::before {
257
- color: #ffffff80 !important;
258
- }
259
- /* desktop */
260
- .params_item.v-btn--active::before {
261
- opacity: 0.24;
262
- border-radius: 0;
263
- color: #ffffff80 !important;
264
- margin-top: 1px !important;
265
- }
266
-
267
- /* mobile couleur du texte de la barre, marge du haut, padding */
268
- .barreMenuMobile {
269
- color: white !important;
270
- padding: 0 10px 0 10px !important;
271
- }
272
-
273
- /* mobile drawer apparait sous les app bar */
274
- .v-navigation-drawer {
275
- top: 132px !important;
276
- }
277
- /* mobile drawer, Calcule la hauteur comme étant 100% moins 132px pour afficher le scroll */
278
- :deep(.v-navigation-drawer__content) {
279
- height: calc(100% - 132px);
280
- }
281
- </style>
1
+ <template>
2
+ <!-- desktop -->
3
+ <div v-if="!estMobile">
4
+ <v-toolbar
5
+ class="pa-0 ajouterPointeur barreMenu"
6
+ :border="false"
7
+ elevation="2"
8
+ >
9
+ <div
10
+ v-for="item in filtrerMenuItems"
11
+ :key="item.nom"
12
+ class="pt-1"
13
+ >
14
+ <v-btn
15
+ v-if="doitAfficherItemMenu(item)"
16
+ variant="text"
17
+ :to="item.path"
18
+ :active="item.path === route"
19
+ :active-color="'white'"
20
+ :style="'min-width: 100px;'"
21
+ >{{ item.nom }}</v-btn
22
+ >
23
+ </div>
24
+ <v-spacer></v-spacer>
25
+ <!-- Sous Liste -->
26
+ <v-menu
27
+ v-for="(item, index) in filtrerSousListe"
28
+ :key="index"
29
+ open-on-hover
30
+ >
31
+ <template #activator="{ props }">
32
+ <v-btn
33
+ color="white"
34
+ v-bind="props"
35
+ :active="estActifSousliste(item)"
36
+ >
37
+ {{ item.nom }}
38
+ </v-btn>
39
+ </template>
40
+
41
+ <v-list
42
+ style="background-color: #223654 !important"
43
+ min-width="230px"
44
+ >
45
+ <v-list-item
46
+ v-for="(sousitem, sousindex) in obtenirItemsSousListeSelonDroits(item.id)"
47
+ :key="sousindex"
48
+ >
49
+ <v-btn
50
+ :max-height="35"
51
+ width="100%"
52
+ class="params_item"
53
+ :to="sousitem.path"
54
+ variant="text"
55
+ :active="sousitem.path === route"
56
+ >{{ sousitem.nom }}</v-btn
57
+ >
58
+ </v-list-item>
59
+ </v-list>
60
+ </v-menu>
61
+ <v-btn
62
+ v-if="btnDeconnexion"
63
+ variant="text"
64
+ :style="'min-width: 100px;'"
65
+ @click="deconnexion"
66
+ >{{ $t('csqc.csqcMenu.deconnexion') }}</v-btn
67
+ >
68
+ </v-toolbar>
69
+ </div>
70
+
71
+ <!-- mobile -->
72
+ <div v-else>
73
+ <v-toolbar class="pa-0 ajouterPointeur barreMenuMobile">
74
+ <v-app-bar-nav-icon
75
+ variant="text"
76
+ @click.stop="menu = !menu"
77
+ ></v-app-bar-nav-icon>
78
+ <v-toolbar-title
79
+ ><label
80
+ class="ajouterPointeur"
81
+ style="color: white !important"
82
+ >{{ $t('menu.menu') }}</label
83
+ >
84
+ </v-toolbar-title>
85
+ </v-toolbar>
86
+
87
+ <!-- mobile -->
88
+ <v-navigation-drawer
89
+ v-model="menu"
90
+ nav
91
+ >
92
+ <v-list>
93
+ <!-- Menu principal -->
94
+ <template
95
+ v-for="item in filtrerMenuItems"
96
+ :key="item.nom"
97
+ >
98
+ <v-list-item
99
+ :to="item.path"
100
+ :active="item.path === route"
101
+ :title="item.nom"
102
+ />
103
+ </template>
104
+
105
+ <!-- Sous-listes -->
106
+ <template
107
+ v-for="item in filtrerSousListe"
108
+ :key="item.id"
109
+ >
110
+ <v-list-group :value="item.nom">
111
+ <template #activator="{ props }">
112
+ <v-list-item
113
+ v-bind="props"
114
+ :title="item.nom"
115
+ />
116
+ </template>
117
+
118
+ <template
119
+ v-for="(sousitem, index) in obtenirItemsSousListeSelonDroits(item.id)"
120
+ :key="index"
121
+ >
122
+ <v-list-item
123
+ :title="sousitem.nom"
124
+ :value="sousitem.nom"
125
+ :to="sousitem.path"
126
+ />
127
+ </template>
128
+ </v-list-group>
129
+ </template>
130
+
131
+ <!-- ✅ Déconnexion : UNE seule fois -->
132
+ <v-list-item
133
+ v-if="btnDeconnexion"
134
+ :title="$t('csqc.csqcMenu.deconnexion')"
135
+ @click="deconnexion"
136
+ />
137
+ </v-list>
138
+ </v-navigation-drawer>
139
+ </div>
140
+ </template>
141
+
142
+ <script setup lang="ts">
143
+ import type { MenuItem, SousListe, SousListeItems } from '../../modeles/composants/csqcMenuModele'
144
+ import { ref, computed } from 'vue'
145
+
146
+ const props = defineProps({
147
+ estMobile: {
148
+ type: Boolean,
149
+ required: true,
150
+ },
151
+ btnDeconnexion: {
152
+ type: Boolean,
153
+ required: false,
154
+ },
155
+ route: {
156
+ type: String,
157
+ required: true,
158
+ },
159
+ menuItems: {
160
+ type: Array as () => MenuItem[],
161
+ required: true,
162
+ },
163
+ sousliste: {
164
+ type: Array as () => SousListe[],
165
+ required: false,
166
+ default: () => [],
167
+ },
168
+ souslisteItems: {
169
+ type: Array as () => SousListeItems[],
170
+ required: false,
171
+ default: () => [],
172
+ },
173
+ droitsMap: {
174
+ type: Object as () => Record<string, boolean>,
175
+ required: true,
176
+ default: () => ({}),
177
+ },
178
+ })
179
+
180
+ const menu = ref<boolean>(false)
181
+ const emit = defineEmits(['deconnexion'])
182
+
183
+ /*const verifierDroits = (monelement: string) => {
184
+ return props.droitsMap[monelement] || false
185
+ }*/
186
+
187
+ const deconnexion = () => {
188
+ emit('deconnexion')
189
+ }
190
+
191
+ const doitAfficherItemMenu = (item: MenuItem) => {
192
+ return props.droitsMap[item.droit] || false
193
+ }
194
+
195
+ const filtrerMenuItems = computed(() => {
196
+ return props.menuItems.filter(item => props.droitsMap[item.droit])
197
+ })
198
+
199
+ const filtrerSousListe = computed(() => {
200
+ return props.sousliste.filter(item => props.droitsMap[item.droit])
201
+ })
202
+
203
+ const obtenirItemsSousListeSelonDroits = (monitemId: number) => {
204
+ return props.souslisteItems.filter(item => item.parentId === monitemId && props.droitsMap[item.droit])
205
+ }
206
+
207
+ // Vérifie si un item de la sous-liste est actif (route correspond à un item)
208
+ const estActifSousliste = (item: SousListe) => {
209
+ // Vérifie si un des sous-items correspond à la route
210
+ return obtenirItemsSousListeSelonDroits(item.id).some(sousitem => sousitem.path === props.route)
211
+ }
212
+ </script>
213
+ <style lang="css" scoped>
214
+ /* desktop background de la barre de menu et hauteur */
215
+ .v-toolbar {
216
+ background-color: #223654;
217
+ height: 64px;
218
+ }
219
+
220
+ /* desktop couleur du texte de la barre, marge du haut, padding */
221
+ .barreMenu {
222
+ color: white !important;
223
+ padding: 0 10px 0 10px !important;
224
+ }
225
+ /* desktop */
226
+ .v-btn {
227
+ font-weight: 400;
228
+ height: 72px !important;
229
+ }
230
+ /* desktop */
231
+ .v-btn--active {
232
+ font-weight: 600 !important;
233
+ }
234
+
235
+ /* desktop empeche le texte parametre detre trop bas */
236
+ .params {
237
+ padding-top: 5px !important;
238
+ }
239
+ /* desktop */
240
+ .params_item {
241
+ font-weight: 400;
242
+ color: white !important;
243
+ background-color: #223654 !important;
244
+ }
245
+ /* desktop */
246
+ .params_item.v-btn--active {
247
+ color: white !important;
248
+ font-weight: 600 !important;
249
+ }
250
+ /* desktop */
251
+ .params_item.v-btn--active:hover {
252
+ color: white !important;
253
+ background-color: #223654 !important;
254
+ }
255
+ /* desktop */
256
+ .params_item.v-btn--active:hover::before {
257
+ color: #ffffff80 !important;
258
+ }
259
+ /* desktop */
260
+ .params_item.v-btn--active::before {
261
+ opacity: 0.24;
262
+ border-radius: 0;
263
+ color: #ffffff80 !important;
264
+ margin-top: 1px !important;
265
+ }
266
+
267
+ /* mobile couleur du texte de la barre, marge du haut, padding */
268
+ .barreMenuMobile {
269
+ color: white !important;
270
+ padding: 0 10px 0 10px !important;
271
+ }
272
+
273
+ /* mobile drawer apparait sous les app bar */
274
+ .v-navigation-drawer {
275
+ top: 132px !important;
276
+ }
277
+ /* mobile drawer, Calcule la hauteur comme étant 100% moins 132px pour afficher le scroll */
278
+ :deep(.v-navigation-drawer__content) {
279
+ height: calc(100% - 132px);
280
+ }
281
+ </style>
package/index.ts CHANGED
@@ -8,9 +8,9 @@ import pivEntete from './composants/gabarit/pivEntete.vue'
8
8
  import pivFooter from './composants/gabarit/pivPiedPage.vue'
9
9
  import csqcMenu from './composants/gabarit/csqcMenu.vue'
10
10
  import csqcConfirmation from './composants/csqcConfirmation.vue'
11
- import csqcDate from './composants/csqcDate/csqcDate.vue'
11
+ import csqcDate from './composants/csqcDate.vue'
12
12
  import csqcTable from './composants/csqcTable/csqcTable.vue'
13
- import csqcCodeBudgetaire from './composants/codeBudgetaireGenerique.vue'
13
+ import csqcCodeBudgetaire from './composants/csqcCodeBudgetaireGenerique.vue'
14
14
  import csqcChaise from './composants/csqcChaise/chaiseConteneur.vue'
15
15
  import csqcAide from './composants/csqcAide.vue'
16
16
  import csqcEntete from './composants/csqcEntete.vue'
@@ -1,18 +1,18 @@
1
- export interface MenuItem {
2
- nom: string
3
- path: string
4
- droit: string
5
- }
6
-
7
- export interface SousListe {
8
- droit: string
9
- id: number
10
- nom: string
11
- }
12
-
13
- export interface SousListeItems {
14
- parentId: number
15
- nom: string
16
- path: string
17
- droit: string
18
- }
1
+ export interface MenuItem {
2
+ nom: string
3
+ path: string
4
+ droit: string
5
+ }
6
+
7
+ export interface SousListe {
8
+ droit: string
9
+ id: number
10
+ nom: string
11
+ }
12
+
13
+ export interface SousListeItems {
14
+ parentId: number
15
+ nom: string
16
+ path: string
17
+ droit: string
18
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codevdesign",
3
- "version": "0.0.90",
3
+ "version": "0.0.92",
4
4
  "description": "Composants Vuetify 3 pour les projets Codev",
5
5
  "files": [
6
6
  "./**/*.vue",
@@ -13,7 +13,7 @@
13
13
  "build": "vite build"
14
14
  },
15
15
  "dependencies": {
16
- "vuetify": "^3.9.0",
16
+ "vuetify": "^3.10.2",
17
17
  "vue-i18n": "^11.0.0",
18
18
  "@e965/xlsx": "^0.20.3",
19
19
  "tinymce": "^8.0.2",