Text.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <!--
  2. Champs de saisie de texte
  3. @see https://vuetifyjs.com/en/components/text-fields/
  4. -->
  5. <template>
  6. <v-text-field
  7. autocomplete="off"
  8. :value="data"
  9. :label="$t(label_field)"
  10. :rules="rules"
  11. :disabled="readonly"
  12. :type="type"
  13. :error="error || violations"
  14. :error-messages="errorMessage"
  15. @change="onChange($event)"
  16. v-mask="mask"
  17. />
  18. </template>
  19. <script lang="ts">
  20. import { defineComponent } from '@nuxtjs/composition-api'
  21. import {$useError} from "~/composables/form/useError";
  22. import {mask} from 'vue-the-mask';
  23. export default defineComponent({
  24. props: {
  25. label: {
  26. type: String,
  27. required: false,
  28. default: null
  29. },
  30. field: {
  31. type: String,
  32. required: false,
  33. default: null
  34. },
  35. type: {
  36. type: String,
  37. required: false,
  38. default: null
  39. },
  40. data: {
  41. type: [String, Number],
  42. required: false,
  43. default: null
  44. },
  45. readonly: {
  46. type: Boolean,
  47. required: false
  48. },
  49. rules: {
  50. type: Array,
  51. required: false,
  52. default: () => []
  53. },
  54. error: {
  55. type: Boolean,
  56. required: false
  57. },
  58. errorMessage: {
  59. type: String,
  60. required: false,
  61. default: null
  62. },
  63. mask: {
  64. type: [Array, Boolean],
  65. required: false,
  66. default: false
  67. }
  68. },
  69. setup (props, {emit}) {
  70. const {error: violations, onChange} = $useError(props.field, emit)
  71. return {
  72. label_field: props.label ?? props.field,
  73. violations,
  74. onChange
  75. }
  76. },
  77. directives: {
  78. mask: (el, binding, vnode, oldVnode) => {
  79. if (!binding.value) return;
  80. mask(el, binding, vnode, oldVnode);
  81. }
  82. }
  83. })
  84. </script>
  85. <style>
  86. input:read-only{
  87. color: #666 !important;
  88. }
  89. </style>