Phone.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. :variant="variant"
  10. :label="label || field ? $t(label ?? field) : undefined"
  11. default-country="FR"
  12. :invalid-message="(n) => $t('invalid_phone_number', { example: n.example})"
  13. @update:model-value="onUpdate($event)"
  14. />
  15. </template>
  16. <script setup lang="ts">
  17. import type { PropType } from 'vue'
  18. type ValidationRule = (value: string | number | null) => boolean | string
  19. const props = defineProps({
  20. modelValue: {
  21. type: String,
  22. required: true,
  23. },
  24. /**
  25. * Nom de la propriété d'une entité lorsque l'input concerne cette propriété
  26. * - Utilisé par la validation
  27. * - Laisser null si le champ ne s'applique pas à une entité
  28. */
  29. field: {
  30. type: String,
  31. required: false,
  32. default: null,
  33. },
  34. /**
  35. * Label du champ
  36. * Si non défini, c'est le nom de propriété qui est utilisé
  37. */
  38. label: {
  39. type: String,
  40. required: false,
  41. default: null,
  42. },
  43. /**
  44. * Règles de validation
  45. * @see https://vuetify.cn/en/components/forms/#validation-with-submit-clear
  46. */
  47. rules: {
  48. type: Array as PropType<ValidationRule[]>,
  49. required: false,
  50. default: () => [],
  51. },
  52. /**
  53. * @see https://vuetifyjs.com/en/api/v-autocomplete/#props-variant
  54. */
  55. variant: {
  56. type: String as PropType<
  57. | 'filled'
  58. | 'outlined'
  59. | 'plain'
  60. | 'underlined'
  61. | 'solo'
  62. | 'solo-inverted'
  63. | 'solo-filled'
  64. | undefined
  65. >,
  66. required: false,
  67. default: 'outlined',
  68. },
  69. })
  70. const emit = defineEmits(['update:modelValue'])
  71. const onUpdate = (event: string|null) => {
  72. if(event === ''){
  73. event = null
  74. }
  75. emit('update:modelValue', event)
  76. }
  77. </script>
  78. <style lang="scss">
  79. </style>