EnumSelect.vue 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <template>
  2. <ElSelect
  3. :modelValue="modelValue"
  4. @change="change"
  5. :placeholder="placeholder"
  6. :clearable="clearable"
  7. @clear="clear"
  8. :multiple="multiple"
  9. :multipleLimit="multipleLimit"
  10. >
  11. <ElOption v-for="item in options" :key="item.value" :value="item.value" :label="item.label" />
  12. </ElSelect>
  13. </template>
  14. <script setup>
  15. import { computed, defineEmits } from 'vue'
  16. const props = defineProps({
  17. enum: {
  18. type: Object,
  19. required: true
  20. },
  21. modelValue: {},
  22. placeholder: {
  23. type: String,
  24. default: '请选择'
  25. },
  26. clearable: {
  27. type: Boolean,
  28. default: true
  29. },
  30. multiple: {
  31. type: Boolean,
  32. default: false
  33. },
  34. multipleLimit: {}
  35. })
  36. const emit = defineEmits(['update:modelValue'])
  37. const options = computed(() => {
  38. return Object.keys(props.enum).map((key) => {
  39. return {
  40. label: props.enum[key],
  41. value: key
  42. }
  43. })
  44. })
  45. function change(value) {
  46. emit('update:modelValue', value)
  47. }
  48. function clear() {
  49. emit('update:modelValue', null)
  50. }
  51. </script>