InputComponent.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template>
  2. <v-text-field
  3. :value="data"
  4. :label="$t(label_field)"
  5. @change="update"
  6. :rules="rules"
  7. :disabled="readOnly"
  8. :type="type"
  9. :error="error"
  10. :error-messages="errorMessage"
  11. >
  12. </v-text-field>
  13. </template>
  14. <script lang="ts">
  15. import {computed, defineComponent, toRef, ref} from '@nuxtjs/composition-api'
  16. import {useRepositoryHelper} from "~/use/store/useRepository";
  17. import {Repository} from "@vuex-orm/core";
  18. import {Model} from "~/models/Model";
  19. export default defineComponent({
  20. props: {
  21. repository:{
  22. type: Object as () => Repository<Model>,
  23. required: true
  24. },
  25. entry:{
  26. type: Object,
  27. required: true
  28. },
  29. field:{
  30. type: String,
  31. required: true
  32. },
  33. label:{
  34. type: String,
  35. required: false
  36. },
  37. type:{
  38. type: String,
  39. required: false
  40. },
  41. rules:{
  42. type: Array,
  43. required: false
  44. },
  45. error:{
  46. type: Boolean,
  47. required: false
  48. },
  49. errorMessage:{
  50. type: String,
  51. required: false
  52. }
  53. },
  54. setup(props, {emit}){
  55. const {label, field, repository } = props
  56. const entry = toRef(props, 'entry')
  57. const label_field = label ? label : field;
  58. const data = computed(() => entry.value[field])
  59. const update = (newValue:string) => {
  60. useRepositoryHelper.updateStoreFromField(repository, entry.value, newValue, field)
  61. emit('update', newValue)
  62. }
  63. const readOnly = computed(() => useRepositoryHelper.getReadOnly(repository))
  64. return {
  65. label_field,
  66. data,
  67. update,
  68. readOnly
  69. }
  70. }
  71. })
  72. </script>
  73. <style>
  74. input:read-only{
  75. color: #666 !important;
  76. }
  77. </style>