Enum.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <main>
  3. <v-skeleton-loader
  4. v-if="$fetchState.pending"
  5. type="list-item"
  6. loading
  7. ></v-skeleton-loader>
  8. <v-select
  9. v-else
  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 { enumType } = props
  55. const {$dataProvider} = useContext()
  56. const items: AnyJson = ref([])
  57. const {fetch, fetchState} = useFetch(async () => {
  58. items.value = await $dataProvider.invoke({
  59. type: QUERY_TYPE.ENUM,
  60. enumType: enumType
  61. })
  62. })
  63. return {
  64. items,
  65. label_field
  66. }
  67. }
  68. })
  69. </script>
  70. <style scoped>
  71. </style>