SelectComponent.vue 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <div>
  3. <v-skeleton-loader
  4. v-if="loading"
  5. type="list-item"
  6. loading
  7. ></v-skeleton-loader>
  8. <v-select
  9. v-if="!loading"
  10. :label="$t(label_field)"
  11. :value="data"
  12. :items="items"
  13. item-text="label"
  14. item-value="value"
  15. @change="update"
  16. :rules="rules"
  17. :disabled="readOnly"
  18. ></v-select>
  19. </div>
  20. </template>
  21. <script lang="ts">
  22. import {computed, defineComponent, ref, toRef, useContext, useFetch} from '@nuxtjs/composition-api'
  23. import {$enumDataProvider} from "~/services/dataProvider/enumDataProvider";
  24. import {AnyJson} from "~/types/types";
  25. import {useRepositoryHelper} from "~/use/store/useRepository";
  26. import {Repository} from "@vuex-orm/core";
  27. import {Model} from "~/models/Model";
  28. export default defineComponent({
  29. props: {
  30. repository: {
  31. type: Object as () => Repository<Model>,
  32. required: true
  33. },
  34. entry:{
  35. type: Object,
  36. required: true
  37. },
  38. field: {
  39. type: String,
  40. required: true
  41. },
  42. label: {
  43. type: String,
  44. required: false
  45. },
  46. enumType: {
  47. type: String,
  48. required: true
  49. },
  50. rules: {
  51. type: Array,
  52. required: false
  53. }
  54. },
  55. setup(props){
  56. const {label, field, repository, enumType } = props
  57. const entry = toRef(props, 'entry')
  58. const {$rest, app: {i18n}} = useContext()
  59. const label_field = label ?? field;
  60. const data = computed(() => entry.value[field])
  61. const update = (newValue:string) => useRepositoryHelper.updateStoreFromField(repository, entry.value, newValue, field)
  62. const readOnly = computed(() => useRepositoryHelper.getReadOnly(repository))
  63. const loading = ref(true)
  64. const items: AnyJson = ref([])
  65. const {fetch, fetchState} = useFetch(async () => {
  66. items.value = await $enumDataProvider($rest, i18n).get(enumType)
  67. loading.value = false
  68. })
  69. return {
  70. data,
  71. update,
  72. items,
  73. loading,
  74. label_field,
  75. readOnly
  76. }
  77. }
  78. })
  79. </script>
  80. <style scoped>
  81. </style>