Enum.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <main>
  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="$emit('update', $event, field)"
  16. :rules="rules"
  17. :disabled="readOnly"
  18. ></v-select>
  19. </main>
  20. </template>
  21. <script lang="ts">
  22. import {defineComponent, ref, useContext, useFetch} from '@nuxtjs/composition-api'
  23. import {AnyJson} from "~/types/interfaces";
  24. import {QUERY_TYPE} from "~/types/enums";
  25. export default defineComponent({
  26. props: {
  27. enumType: {
  28. type: String,
  29. required: true
  30. },
  31. label:{
  32. type: String,
  33. required: false
  34. },
  35. field:{
  36. type: String,
  37. required: false
  38. },
  39. data: {
  40. type: String,
  41. required: false
  42. },
  43. readOnly: {
  44. type: Boolean,
  45. required: false
  46. },
  47. rules: {
  48. type: Array,
  49. required: false
  50. }
  51. },
  52. setup(props){
  53. const label_field = props.label ?? props.field
  54. const loading = ref(true)
  55. const { enumType } = props
  56. const {$dataProvider} = useContext()
  57. const items: AnyJson = ref([])
  58. const {fetch, fetchState} = useFetch(async () => {
  59. items.value = await $dataProvider.invoke({
  60. type: QUERY_TYPE.ENUM,
  61. enumType: enumType
  62. })
  63. loading.value = false
  64. })
  65. return {
  66. items,
  67. label_field,
  68. loading
  69. }
  70. }
  71. })
  72. </script>
  73. <style scoped>
  74. </style>