TextArea.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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(fieldLabel)"
  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 setup lang="ts">
  18. import { useNuxtApp } from '#app'
  19. import { useFieldViolation } from '~/composables/form/useFieldViolation'
  20. const props = defineProps({
  21. label: {
  22. type: String,
  23. required: false,
  24. default: null,
  25. },
  26. field: {
  27. type: String,
  28. required: false,
  29. default: null,
  30. },
  31. data: {
  32. type: [String, Number],
  33. required: false,
  34. default: null,
  35. },
  36. readonly: {
  37. type: Boolean,
  38. required: false,
  39. },
  40. rules: {
  41. type: Array,
  42. required: false,
  43. default: () => [],
  44. },
  45. error: {
  46. type: Boolean,
  47. required: false,
  48. },
  49. errorMessage: {
  50. type: String,
  51. required: false,
  52. default: null,
  53. },
  54. })
  55. const { emit } = useNuxtApp()
  56. const fieldLabel = props.label ?? props.field
  57. const { violation, onChange } = useFieldViolation(props.field, emit)
  58. </script>
  59. <style lang="scss">
  60. input:read-only {
  61. color: rgb(var(--v-theme-on-neutral));
  62. }
  63. </style>