Phone.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <!--
  2. Champs de saisie d'un numéro de téléphone
  3. @see https://github.com/paul-thebaud/v-phone-inpu
  4. -->
  5. <template>
  6. <v-phone-input
  7. :model-value.number="modelValue"
  8. :rules="rules"
  9. :label="label || field ? $t(label ?? field) : undefined"
  10. defaultCountry="FR"
  11. @update:model-value="onUpdate($event)"
  12. :invalidMessage="(n) => $t('invalid_phone_number', { example: n.example})"
  13. />
  14. </template>
  15. <script setup lang="ts">
  16. type ValidationRule = (value: string | number | null) => boolean | string
  17. const props = defineProps({
  18. modelValue: {
  19. type: String,
  20. required: true,
  21. },
  22. /**
  23. * Nom de la propriété d'une entité lorsque l'input concerne cette propriété
  24. * - Utilisé par la validation
  25. * - Laisser null si le champ ne s'applique pas à une entité
  26. */
  27. field: {
  28. type: String,
  29. required: false,
  30. default: null,
  31. },
  32. /**
  33. * Label du champ
  34. * Si non défini, c'est le nom de propriété qui est utilisé
  35. */
  36. label: {
  37. type: String,
  38. required: false,
  39. default: null,
  40. },
  41. /**
  42. * Règles de validation
  43. * @see https://vuetify.cn/en/components/forms/#validation-with-submit-clear
  44. */
  45. rules: {
  46. type: Array as PropType<ValidationRule[]>,
  47. required: false,
  48. default: () => [],
  49. },
  50. })
  51. const emit = defineEmits(['update:modelValue'])
  52. const onUpdate = (event: string|null) => {
  53. if(event === ''){
  54. event = null
  55. }
  56. emit('update:model-value', event)
  57. }
  58. </script>
  59. <style lang="scss">
  60. </style>