Text.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 === 'password' ? (show ? 'text' : type) : type"
  13. :error="error || !!violation"
  14. :error-messages="errorMessage || (violation ? $t(violation) : '')"
  15. @change="onChange($event); $emit('change', $event)"
  16. @input="$emit('input', $event, field)"
  17. v-mask="mask"
  18. :append-icon="type === 'password' ? (show ? 'mdi-eye' : 'mdi-eye-off') : ''"
  19. @click:append="show = !show"
  20. />
  21. </template>
  22. <script lang="ts">
  23. import {defineComponent, ref, useContext} from '@nuxtjs/composition-api'
  24. import {useError} from "~/composables/form/useError";
  25. import {mask} from 'vue-the-mask';
  26. import {Num} from "@vuex-orm/core";
  27. export default defineComponent({
  28. props: {
  29. label: {
  30. type: String,
  31. required: false,
  32. default: null
  33. },
  34. field: {
  35. type: String,
  36. required: false,
  37. default: null
  38. },
  39. type: {
  40. type: String,
  41. required: false,
  42. default: null
  43. },
  44. data: {
  45. type: [String, Number],
  46. required: false,
  47. default: null
  48. },
  49. readonly: {
  50. type: Boolean,
  51. required: false
  52. },
  53. rules: {
  54. type: Array,
  55. required: false,
  56. default: () => []
  57. },
  58. error: {
  59. type: Boolean,
  60. required: false
  61. },
  62. errorMessage: {
  63. type: String,
  64. required: false,
  65. default: null
  66. },
  67. mask: {
  68. type: [Array, Boolean],
  69. required: false,
  70. default: false
  71. }
  72. },
  73. setup (props, {emit}) {
  74. const {store} = useContext()
  75. const {violation, onChange} = useError(props.field, emit, store)
  76. return {
  77. label_field: props.label ?? props.field,
  78. violation,
  79. show: ref(false),
  80. onChange
  81. }
  82. },
  83. directives: {
  84. mask: (el, binding, vnode, oldVnode) => {
  85. if (!binding.value) return;
  86. mask(el, binding, vnode, oldVnode);
  87. }
  88. }
  89. })
  90. </script>
  91. <style scoped>
  92. input:read-only{
  93. color: #666 !important;
  94. }
  95. </style>