TextArea.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <!--
  2. Champs de saisie de bloc texte
  3. @see https://vuetifyjs.com/en/components/textareas/
  4. -->
  5. <template>
  6. <v-textarea
  7. outlined
  8. :value="data"
  9. :label="$t(label_field)"
  10. :rules="rules"
  11. :disabled="readonly"
  12. :error="error || !!violation"
  13. :error-messages="errorMessage || violation ? $t(violation) : ''"
  14. @change="onChange($event)"
  15. />
  16. </template>
  17. <script lang="ts">
  18. import {defineComponent, useContext} from '@nuxtjs/composition-api'
  19. import {useError} from "~/composables/form/useError";
  20. export default defineComponent({
  21. props: {
  22. label: {
  23. type: String,
  24. required: false,
  25. default: null
  26. },
  27. field: {
  28. type: String,
  29. required: false,
  30. default: null
  31. },
  32. data: {
  33. type: [String, Number],
  34. required: false,
  35. default: null
  36. },
  37. readonly: {
  38. type: Boolean,
  39. required: false
  40. },
  41. rules: {
  42. type: Array,
  43. required: false,
  44. default: () => []
  45. },
  46. error: {
  47. type: Boolean,
  48. required: false
  49. },
  50. errorMessage: {
  51. type: String,
  52. required: false,
  53. default: null
  54. }
  55. },
  56. setup (props, {emit}) {
  57. const {store} = useContext()
  58. const {violation, onChange} = useError(props.field, emit, store)
  59. return {
  60. label_field: props.label ?? props.field,
  61. violation,
  62. onChange
  63. }
  64. }
  65. })
  66. </script>
  67. <style>
  68. input:read-only{
  69. color: #666 !important;
  70. }
  71. </style>