codevdesign 1.0.78 → 2.0.0
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.
- package/assets/csqc.css +28 -30
- package/composants/csqcAide.vue +1 -1
- package/composants/csqcAlerteErreur.vue +1 -1
- package/composants/csqcChaise/chaiseConteneur.vue +4 -4
- package/composants/csqcChaise/chaiseItem.vue +54 -54
- package/composants/csqcCodeBudgetaireGenerique.vue +260 -256
- package/composants/csqcConfirmation.vue +76 -75
- package/composants/csqcDate.vue +88 -86
- package/composants/csqcDialogue.vue +120 -118
- package/composants/csqcEditeurTexteRiche.vue +378 -378
- package/composants/csqcEntete.vue +17 -17
- package/composants/csqcImportCSV.vue +2 -2
- package/composants/csqcModaleSaisie.vue +97 -97
- package/composants/csqcRecherche.vue +9 -9
- package/composants/csqcRechercheUtilisateur.vue +198 -198
- package/composants/csqcSnackbar.vue +207 -207
- package/composants/csqcSwitch.vue +6 -6
- package/composants/csqcTable/csqcTable.vue +19 -14
- package/composants/csqcTable/csqcTableModaleChoixColonnes.vue +5 -5
- package/composants/csqcTable/sortableDataTable.ts +1 -1
- package/composants/csqcTexteBilingue.vue +1 -1
- package/composants/csqcTiroir.vue +197 -197
- package/composants/gabarit/csqcMenu.vue +4 -4
- package/composants/gabarit/pivEntete.vue +6 -5
- package/composants/gabarit/pivPiedPage.vue +44 -29
- package/composants/validateurs.ts +8 -2
- package/editeur.ts +1 -1
- package/importCSV.ts +1 -1
- package/index.ts +80 -80
- package/locales/en.json +1 -1
- package/locales/fr.json +3 -3
- package/modeles/assurancesAssuranceGeneraleGrics.ts +3 -3
- package/modeles/assurancesAssurancePersonnelleGrics.ts +6 -6
- package/modeles/assurancesContratGrics.ts +6 -6
- package/modeles/assurancesDetailsPrimeReguliereGrics.ts +4 -4
- package/modeles/assurancesDonneesAssureurGrics.ts +5 -5
- package/modeles/assurancesEmployeGrics.ts +4 -4
- package/modeles/assurancesGrics.ts +6 -6
- package/modeles/assurancesRegimeAssuranceGrics.ts +2 -2
- package/modeles/assurancesRegimeBaseEmployeurGrics.ts +2 -2
- package/modeles/assurancesRegimeBaseGrics.ts +2 -2
- package/modeles/composants/csqcMenuModele.ts +18 -18
- package/modeles/composants/datatableColonne.ts +19 -19
- package/modeles/employeAdresseGrics.ts +6 -6
- package/modeles/employeAdressesPersonnellesGrics.ts +4 -4
- package/modeles/employeAffectationCorpsEmploiGrics.ts +2 -2
- package/modeles/employeBanquesCongeBanqueGrics.ts +2 -2
- package/modeles/employeBanquesCongeGrics.ts +6 -6
- package/modeles/employeBanquesCongeRegimeAbsenceGrics.ts +2 -2
- package/modeles/employeCourrielsPersonnels.ts +2 -2
- package/modeles/employeCourrielsProfessionnels.ts +2 -2
- package/modeles/employeEmploisCategorieGrics.ts +2 -2
- package/modeles/employeEmploisClasseGrics.ts +2 -2
- package/modeles/employeEmploisCorpsEmploiGrics.ts +2 -2
- package/modeles/employeEmploisEtatEmploiGrics.ts +2 -2
- package/modeles/employeEmploisGrics.ts +29 -29
- package/modeles/employeEmploisGroupePaieGrics.ts +2 -2
- package/modeles/employeEmploisLieuTravailPrincipalGrics.ts +3 -3
- package/modeles/employeEmploisLieuxTravailSecondairesGrics.ts +3 -3
- package/modeles/employeEmploisRegimeAbsenceGrics.ts +2 -2
- package/modeles/employeEmploisSecteurGrics.ts +2 -2
- package/modeles/employeEmploisStatutEngagementGrics.ts +2 -2
- package/modeles/employeExperienceEmploiGrics.ts +2 -2
- package/modeles/employeExperienceEmployeGrics.ts +5 -5
- package/modeles/employeExperienceExperiencesGrics.ts +4 -4
- package/modeles/employeExperienceExperiencesTotalesGrics.ts +7 -7
- package/modeles/employeExperienceGrics.ts +9 -9
- package/modeles/employeGrics.ts +23 -23
- package/modeles/employeTelephoneGrics.ts +4 -4
- package/modeles/employeTelephonesPersonnelsGrics.ts +3 -3
- package/modeles/employeTelephonesProfessionnelsGrics.ts +3 -3
- package/modeles/groupeCE.ts +6 -6
- package/modeles/groupeCEIntervalle.ts +6 -6
- package/modeles/historiquesAbsenceBanqueGrics.ts +2 -2
- package/modeles/historiquesAbsenceGrics.ts +13 -13
- package/modeles/historiquesAbsenceLieuTravailGrics.ts +2 -2
- package/modeles/historiquesAbsenceSousBanqueGrics.ts +2 -2
- package/modeles/motifsAbsenceBanque.ts +2 -2
- package/modeles/motifsAbsenceGrics.ts +9 -9
- package/modeles/motifsAbsenceRegimeAbsence.ts +2 -2
- package/modeles/motifsAbsenceSousMotifs.ts +2 -2
- package/modeles/motifsAbsenceTraitementBanques.ts +3 -3
- package/modeles/syndicat.ts +18 -18
- package/modeles/syndicatGroupeCe.ts +3 -3
- package/modeles/syndicatResponsable.ts +8 -8
- package/modeles/syndicatUnite.ts +3 -3
- package/modeles/unite.ts +15 -15
- package/modeles/uniteTypeEnseignement.ts +4 -4
- package/modeles/utilisateur.ts +8 -8
- package/outils/appAxios.ts +16 -16
- package/outils/csqcOutils.ts +6 -5
- package/outils/csqcRafraichisseurTokenParent.ts +20 -4
- package/outils/rafraichisseurToken.ts +1 -1
- package/package.json +13 -13
|
@@ -1,75 +1,76 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<csqcDialogue
|
|
3
|
-
ref="modale"
|
|
4
|
-
:titre="props.titre"
|
|
5
|
-
:operation-en-cours="operationEnCours"
|
|
6
|
-
activator="supprimer"
|
|
7
|
-
:largeur="props.largeur"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
</
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
import
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
1
|
+
<template>
|
|
2
|
+
<csqcDialogue
|
|
3
|
+
ref="modale"
|
|
4
|
+
:titre="props.titre"
|
|
5
|
+
:operation-en-cours="operationEnCours"
|
|
6
|
+
activator="supprimer"
|
|
7
|
+
:largeur="props.largeur"
|
|
8
|
+
:est-dialogue-alerte="modeAlerte"
|
|
9
|
+
v-bind="$attrs"
|
|
10
|
+
@ok="confirmer"
|
|
11
|
+
@annuler="annuler"
|
|
12
|
+
>
|
|
13
|
+
<v-form
|
|
14
|
+
ref="form"
|
|
15
|
+
@submit.prevent
|
|
16
|
+
>
|
|
17
|
+
<v-row>
|
|
18
|
+
<v-col
|
|
19
|
+
cols="12"
|
|
20
|
+
class="pa-0 ma-0"
|
|
21
|
+
>
|
|
22
|
+
<span v-html="texte"></span>
|
|
23
|
+
</v-col>
|
|
24
|
+
</v-row>
|
|
25
|
+
</v-form>
|
|
26
|
+
</csqcDialogue>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<script lang="ts" setup>
|
|
30
|
+
import { ref } from 'vue'
|
|
31
|
+
import csqcDialogue from './csqcDialogue.vue'
|
|
32
|
+
|
|
33
|
+
const modale = ref<InstanceType<typeof csqcDialogue> | null>(null)
|
|
34
|
+
const utilisateurATermine = ref(false)
|
|
35
|
+
const reponse = ref(false)
|
|
36
|
+
const texte = ref('')
|
|
37
|
+
const modeAlerte = ref(false)
|
|
38
|
+
|
|
39
|
+
const props = defineProps({
|
|
40
|
+
operationEnCours: { type: Boolean, default: false },
|
|
41
|
+
titre: { type: String, default: '' },
|
|
42
|
+
largeur: { type: String, default: '525px' },
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
const ouvrir = async (message: string, modeAlerteParam: boolean = false) => {
|
|
46
|
+
texte.value = message
|
|
47
|
+
modeAlerte.value = modeAlerteParam
|
|
48
|
+
utilisateurATermine.value = false
|
|
49
|
+
modale.value?.ouvrir()
|
|
50
|
+
|
|
51
|
+
while (!utilisateurATermine.value) {
|
|
52
|
+
await new Promise(resolve => setTimeout(resolve, 100)) // Attendre 100ms
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return reponse.value
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const confirmer = (): void => {
|
|
59
|
+
reponse.value = true
|
|
60
|
+
utilisateurATermine.value = true
|
|
61
|
+
|
|
62
|
+
if (modeAlerte.value) fermer()
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const annuler = (): void => {
|
|
66
|
+
reponse.value = false
|
|
67
|
+
utilisateurATermine.value = true
|
|
68
|
+
fermer()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const fermer = (): void => {
|
|
72
|
+
modale.value?.fermer()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
defineExpose({ ouvrir, fermer })
|
|
76
|
+
</script>
|
package/composants/csqcDate.vue
CHANGED
|
@@ -1,86 +1,88 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-date-input
|
|
3
|
-
:model-value="dateInterne"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
1
|
+
<template>
|
|
2
|
+
<v-date-input
|
|
3
|
+
:model-value="dateInterne"
|
|
4
|
+
bg-color="white"
|
|
5
|
+
color="primary"
|
|
6
|
+
input-format="yyyy-MM-dd"
|
|
7
|
+
variant="outlined"
|
|
8
|
+
prepend-icon=""
|
|
9
|
+
prepend-inner-icon="$calendar"
|
|
10
|
+
density="comfortable"
|
|
11
|
+
:picker-props="{ color: 'accent' }"
|
|
12
|
+
v-bind="$attrs"
|
|
13
|
+
@update:model-value="choixUtilisateur"
|
|
14
|
+
/>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script setup lang="ts">
|
|
18
|
+
import { computed, ref } from 'vue'
|
|
19
|
+
|
|
20
|
+
type Model = string | Date | null
|
|
21
|
+
|
|
22
|
+
const props = defineProps<{ modelValue: Model }>()
|
|
23
|
+
|
|
24
|
+
const emit = defineEmits<{
|
|
25
|
+
(e: 'update:modelValue', v: string | null): void
|
|
26
|
+
(e: 'change', v: string | null): void
|
|
27
|
+
}>()
|
|
28
|
+
|
|
29
|
+
// Normalisation, TOUJOURS "YYYY-MM-DD" ou null
|
|
30
|
+
const normalizeToYmd = (v: Date | string | null | undefined): string | null => {
|
|
31
|
+
if (v == null || v === '') return null
|
|
32
|
+
|
|
33
|
+
// Date -> YYYY-MM-DD (local)
|
|
34
|
+
if (v instanceof Date) {
|
|
35
|
+
if (isNaN(v.getTime())) return null
|
|
36
|
+
const yyyy = v.getFullYear()
|
|
37
|
+
const mm = String(v.getMonth() + 1).padStart(2, '0')
|
|
38
|
+
const dd = String(v.getDate()).padStart(2, '0')
|
|
39
|
+
return `${yyyy}-${mm}-${dd}`
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// String -> accepte seulement YYYY-MM-DD ISO8601 (optionnellement suivi de l'heure, qui est ignorée)
|
|
43
|
+
const s = String(v).trim()
|
|
44
|
+
const m = s.match(
|
|
45
|
+
/^(?<date>(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}))(?:T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|(?:[-+]\d{2}:\d{2}?))?)?$/,
|
|
46
|
+
)
|
|
47
|
+
if (!m) return null
|
|
48
|
+
|
|
49
|
+
// Optionnel: validation simple (évite 2026-99-99)
|
|
50
|
+
const y = Number(m.groups!.year),
|
|
51
|
+
mo = Number(m.groups!.month),
|
|
52
|
+
d = Number(m.groups!.day)
|
|
53
|
+
if (mo < 1 || mo > 12 || d < 1 || d > 31) return null
|
|
54
|
+
if (mo === 2) {
|
|
55
|
+
const isLeap = (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0
|
|
56
|
+
if (d > (isLeap ? 29 : 28)) return null
|
|
57
|
+
}
|
|
58
|
+
if ([4, 6, 9, 11].includes(mo) && d > 30) return null
|
|
59
|
+
|
|
60
|
+
return `${m.groups!.date}`
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// UI: VDateInput stable avec Date|null
|
|
64
|
+
const dateInterne = computed<Date | null>(() => {
|
|
65
|
+
const ymd = normalizeToYmd(props.modelValue as any)
|
|
66
|
+
if (!ymd) return null
|
|
67
|
+
const [y, m, d] = ymd.split('-').map(Number)
|
|
68
|
+
return new Date(y, m - 1, d) // local, stable
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
const prevBeforeEmit = ref<string | null>(null)
|
|
72
|
+
|
|
73
|
+
const choixUtilisateur = (v: Date | string | null) => {
|
|
74
|
+
const next = normalizeToYmd(v)
|
|
75
|
+
const current = normalizeToYmd(props.modelValue as any)
|
|
76
|
+
|
|
77
|
+
// rollback: on reçoit l'ancienne valeur (celle qu'on avait avant)
|
|
78
|
+
if (prevBeforeEmit.value && next === prevBeforeEmit.value && current !== prevBeforeEmit.value) {
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (next === current) return
|
|
83
|
+
|
|
84
|
+
prevBeforeEmit.value = current
|
|
85
|
+
emit('update:modelValue', next)
|
|
86
|
+
emit('change', next)
|
|
87
|
+
}
|
|
88
|
+
</script>
|
|
@@ -1,118 +1,120 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-dialog
|
|
3
|
-
v-model="dialog"
|
|
4
|
-
class="pa-0 ma-0"
|
|
5
|
-
:width="largeur"
|
|
6
|
-
:fullscreen="display.xs.value"
|
|
7
|
-
max-width="650"
|
|
8
|
-
:persistent="props.persistant"
|
|
9
|
-
v-bind="$attrs"
|
|
10
|
-
@keydown.esc="!persistant ? annuler : ''"
|
|
11
|
-
@click:outside="!persistant ? annuler : ''"
|
|
12
|
-
>
|
|
13
|
-
<v-card class="pa-0 ma-0 pl-8 pt-8">
|
|
14
|
-
<!-- Bouton en haut à droite -->
|
|
15
|
-
<v-btn
|
|
16
|
-
icon="mdi-close"
|
|
17
|
-
variant="text"
|
|
18
|
-
class="position-absolute iconeHover"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<slot
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
:
|
|
54
|
-
:
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
</
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
import {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
1
|
+
<template>
|
|
2
|
+
<v-dialog
|
|
3
|
+
v-model="dialog"
|
|
4
|
+
class="pa-0 ma-0"
|
|
5
|
+
:width="largeur"
|
|
6
|
+
:fullscreen="display.xs.value"
|
|
7
|
+
max-width="650"
|
|
8
|
+
:persistent="props.persistant"
|
|
9
|
+
v-bind="$attrs"
|
|
10
|
+
@keydown.esc="!persistant ? annuler : ''"
|
|
11
|
+
@click:outside="!persistant ? annuler : ''"
|
|
12
|
+
>
|
|
13
|
+
<v-card class="pa-0 ma-0 pl-8 pt-8">
|
|
14
|
+
<!-- Bouton en haut à droite -->
|
|
15
|
+
<v-btn
|
|
16
|
+
icon="mdi-close"
|
|
17
|
+
variant="text"
|
|
18
|
+
class="position-absolute iconeHover"
|
|
19
|
+
color="primary"
|
|
20
|
+
style="right: 5px; top: 5px"
|
|
21
|
+
@click="annuler"
|
|
22
|
+
></v-btn>
|
|
23
|
+
|
|
24
|
+
<v-card-title
|
|
25
|
+
class="pa-0 ma-0 pb-6 headline"
|
|
26
|
+
style="font-size: 24px; white-space: normal; word-break: break-word"
|
|
27
|
+
>
|
|
28
|
+
<slot name="titre"></slot>
|
|
29
|
+
<div text-h5><span v-html="titre"></span></div>
|
|
30
|
+
</v-card-title>
|
|
31
|
+
|
|
32
|
+
<v-card-text class="pa-0 ma-0 pb-6 pr-6">
|
|
33
|
+
<v-container>
|
|
34
|
+
<slot></slot>
|
|
35
|
+
<slot name="content"></slot>
|
|
36
|
+
</v-container>
|
|
37
|
+
</v-card-text>
|
|
38
|
+
<v-card-actions class="my-2 d-flex justify-end pr-6 pb-5">
|
|
39
|
+
<slot name="actions"></slot>
|
|
40
|
+
<v-btn
|
|
41
|
+
v-if="btnAnnuler"
|
|
42
|
+
color="primary"
|
|
43
|
+
:loading="operationEnCours"
|
|
44
|
+
variant="text"
|
|
45
|
+
@click="annuler"
|
|
46
|
+
>
|
|
47
|
+
{{ btnAnnulerTexte ? btnAnnulerTexte : $t('csqc.bouton.annuler') }}
|
|
48
|
+
</v-btn>
|
|
49
|
+
|
|
50
|
+
<v-btn
|
|
51
|
+
v-if="btnOk"
|
|
52
|
+
class="Gouttiere"
|
|
53
|
+
:color="props.estDialogueAlerte ? 'rouge' : 'primary'"
|
|
54
|
+
:loading="operationEnCours"
|
|
55
|
+
:disabled="btnOkDesactiver"
|
|
56
|
+
variant="flat"
|
|
57
|
+
@click="okBouton"
|
|
58
|
+
>
|
|
59
|
+
{{ btnOkTexte ? btnOkTexte : $t('csqc.bouton.ok') }}
|
|
60
|
+
</v-btn>
|
|
61
|
+
</v-card-actions>
|
|
62
|
+
</v-card>
|
|
63
|
+
</v-dialog>
|
|
64
|
+
</template>
|
|
65
|
+
|
|
66
|
+
<script setup lang="ts">
|
|
67
|
+
import { ref } from 'vue'
|
|
68
|
+
import { useDisplay } from 'vuetify'
|
|
69
|
+
|
|
70
|
+
const display = useDisplay()
|
|
71
|
+
|
|
72
|
+
// Déclaration des props
|
|
73
|
+
const props = defineProps({
|
|
74
|
+
largeur: { type: String, default: '50vw' },
|
|
75
|
+
persistant: { type: Boolean, default: true },
|
|
76
|
+
operationEnCours: { type: Boolean, default: false },
|
|
77
|
+
btnAnnuler: { type: Boolean, default: true },
|
|
78
|
+
btnOk: { type: Boolean, default: true },
|
|
79
|
+
btnAnnulerTexte: { type: String, default: '' },
|
|
80
|
+
btnOkTexte: { type: String, default: '' },
|
|
81
|
+
titre: { type: String, default: '' },
|
|
82
|
+
btnOkDesactiver: { type: Boolean, default: false },
|
|
83
|
+
estDialogueAlerte: { type: Boolean, default: false },
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
// Déclaration des événements émis
|
|
87
|
+
const emit = defineEmits(['annuler', 'ok'])
|
|
88
|
+
|
|
89
|
+
// Gestion de l'état du dialogue
|
|
90
|
+
const dialog = ref(false)
|
|
91
|
+
|
|
92
|
+
// Méthodes pour gérer l'ouverture et la fermeture
|
|
93
|
+
const ouvrir = () => {
|
|
94
|
+
dialog.value = true
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const fermer = () => {
|
|
98
|
+
dialog.value = false
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Gestion des actions des boutons
|
|
102
|
+
const annuler = () => {
|
|
103
|
+
emit('annuler')
|
|
104
|
+
fermer()
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const okBouton = () => {
|
|
108
|
+
emit('ok')
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// permet d'exporter les 2 actions
|
|
112
|
+
defineExpose({ ouvrir, fermer })
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<style lang="css" scoped>
|
|
116
|
+
.v-card__text,
|
|
117
|
+
.v-card__title {
|
|
118
|
+
word-break: normal; /* empeche le wrap de couper un mot en XS */
|
|
119
|
+
}
|
|
120
|
+
</style>
|