Phone.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <!--
  2. Champs de saisie d'un numéro de téléphone
  3. @see https://github.com/yogakurniawan/vue-tel-input-vuetify
  4. -->
  5. <template>
  6. <client-only>
  7. <vue-tel-input-vuetify
  8. :field="field"
  9. :label="label"
  10. v-model="myPhone"
  11. :readonly="readonly"
  12. clearable
  13. valid-characters-only
  14. validate-on-blur
  15. :rules="rules"
  16. @input="onInput"
  17. @change="onChange"
  18. />
  19. </client-only>
  20. </template>
  21. <script lang="ts">
  22. import { defineComponent, Ref, ref, useContext, computed } from '@nuxtjs/composition-api'
  23. export default defineComponent({
  24. props: {
  25. label: {
  26. type: String,
  27. required: false,
  28. default: ''
  29. },
  30. field: {
  31. type: String,
  32. required: false,
  33. default: null
  34. },
  35. data: {
  36. type: [String, Number],
  37. required: false,
  38. default: null
  39. },
  40. readonly: {
  41. type: Boolean,
  42. required: false
  43. },
  44. error: {
  45. type: Boolean,
  46. required: false
  47. },
  48. errorMessage: {
  49. type: String,
  50. required: false,
  51. default: null
  52. }
  53. },
  54. setup (props, {emit}) {
  55. const { app: { i18n } } = useContext()
  56. const nationalNumber: Ref<string | number> = ref('')
  57. const internationalNumber: Ref<string | number> = ref('')
  58. const isValid: Ref<boolean> = ref(false)
  59. const onInit: Ref<boolean> = ref(true)
  60. const onInput = (_: any, { number, valid, countryChoice }: { number: any, valid: boolean, countryChoice: any }) => {
  61. isValid.value = valid
  62. nationalNumber.value = number.national
  63. internationalNumber.value = number.international
  64. onInit.value = false
  65. }
  66. const onChange = () => {
  67. if (isValid.value) {
  68. emit('update', internationalNumber.value, props.field)
  69. }
  70. }
  71. const myPhone = computed(
  72. {
  73. get:()=>{
  74. return onInit.value ? props.data : nationalNumber.value
  75. },
  76. set:(value)=>{
  77. return props.data
  78. }
  79. }
  80. )
  81. return {
  82. myPhone,
  83. onInput,
  84. onChange,
  85. rules: [
  86. () => isValid.value || i18n.t('phone_error')
  87. ]
  88. }
  89. }
  90. })
  91. </script>
  92. <style>
  93. input:read-only{
  94. color: #666 !important;
  95. }
  96. </style>