StdSelect.vue 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <script setup lang="ts">
  2. import {computed, ref} from 'vue'
  3. import {SelectProps} from 'ant-design-vue'
  4. const props = defineProps(['value', 'mask'])
  5. const emit = defineEmits(['update:value'])
  6. const options = computed(() => {
  7. const _options = ref<SelectProps['options']>([])
  8. for (const [key, value] of Object.entries(props.mask)) {
  9. const v = value as any
  10. _options.value!.push({label: v?.(), value: key})
  11. }
  12. return _options
  13. })
  14. const _value = computed({
  15. get() {
  16. let v
  17. if (typeof props.mask?.[props.value] === 'function') {
  18. v = props.mask[props.value]()
  19. } else if (typeof props.mask?.[props.value] === 'string') {
  20. v = props.mask[props.value]
  21. } else {
  22. v = props.value
  23. }
  24. return v
  25. },
  26. set(v) {
  27. emit('update:value', v)
  28. }
  29. })
  30. </script>
  31. <template>
  32. <a-select v-model:value="_value"
  33. :options="options.value" style="min-width: 180px"/>
  34. </template>
  35. <style lang="less" scoped>
  36. </style>