SimpleSelectFormItem.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <a-select
  3. :value="value"
  4. @update:value="onUpdateValue"
  5. :disabled="disabled"
  6. v-bind="customProps"
  7. >
  8. <template v-if="renderOption" #option="data">
  9. <VNodeRenderer :render="renderOption" :data="data" />
  10. </template>
  11. <a-select-option v-for="it in options" :key="it.value" :value="it.value">
  12. <a-badge v-if="it.badgeColor" :color="it.badgeColor" :text="it.text" />
  13. <a-badge v-else-if="it.badgeState" :status="it.badgeState" :text="it.text" />
  14. <span v-else>{{it.text}}</span>
  15. </a-select-option>
  16. </a-select>
  17. </template>
  18. <script lang="ts" setup>
  19. /**
  20. * 简单下拉框表单控件
  21. */
  22. import VNodeRenderer from '@/components/VNodeRenderer.vue';
  23. import type { SelectProps } from 'ant-design-vue/lib/vc-select';
  24. import { defineProps, defineEmits, type PropType } from 'vue';
  25. import type { IDynamicFormItemSelectOption, RenderOption } from './SimpleSelectFormItem';
  26. defineProps({
  27. /**
  28. * 是否禁用
  29. */
  30. disabled: {
  31. type: Boolean,
  32. default: false
  33. },
  34. /**
  35. * 选项数据
  36. */
  37. options: {
  38. type: Object as PropType<IDynamicFormItemSelectOption[]>,
  39. default: null,
  40. },
  41. /**
  42. * 选择值
  43. */
  44. value: {
  45. },
  46. /**
  47. * a-select 其他自定义参数
  48. */
  49. customProps: {
  50. type: Object as PropType<SelectProps>,
  51. default: null,
  52. },
  53. renderOption: {
  54. default: null,
  55. type: Function as PropType<RenderOption>
  56. },
  57. });
  58. const emits = defineEmits([
  59. 'update:value',
  60. ]);
  61. function onUpdateValue(v : unknown) {
  62. emits('update:value', v);
  63. }
  64. </script>