SelectItem.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <div :class="prefixCls">
  3. <span> {{ title }}</span>
  4. <Select
  5. v-bind="getBindValue"
  6. :class="`${prefixCls}-select`"
  7. @change="handleChange"
  8. :disabled="disabled"
  9. size="small"
  10. :options="options"
  11. />
  12. </div>
  13. </template>
  14. <script lang="ts">
  15. import { defineComponent, PropType, computed } from 'vue';
  16. import { Select } from 'ant-design-vue';
  17. import { useDesign } from '/@/hooks/web/useDesign';
  18. import { baseHandler } from '../handler';
  19. import { HandlerEnum } from '../enum';
  20. export default defineComponent({
  21. name: 'SelectItem',
  22. components: { Select },
  23. props: {
  24. event: {
  25. type: Number as PropType<HandlerEnum>,
  26. default: () => {},
  27. },
  28. disabled: {
  29. type: Boolean,
  30. },
  31. title: {
  32. type: String,
  33. },
  34. def: {
  35. type: [String, Number] as PropType<string | number>,
  36. },
  37. initValue: {
  38. type: [String, Number] as PropType<string | number>,
  39. },
  40. options: {
  41. type: Array as PropType<LabelValueOptions>,
  42. default: () => [],
  43. },
  44. },
  45. setup(props) {
  46. const { prefixCls } = useDesign('setting-select-item');
  47. const getBindValue = computed(() => {
  48. return props.def ? { value: props.def, defaultValue: props.initValue || props.def } : {};
  49. });
  50. function handleChange(e: ChangeEvent) {
  51. props.event && baseHandler(props.event, e);
  52. }
  53. return {
  54. prefixCls,
  55. handleChange,
  56. getBindValue,
  57. };
  58. },
  59. });
  60. </script>
  61. <style lang="less" scoped>
  62. @prefix-cls: ~'@{namespace}-setting-select-item';
  63. .@{prefix-cls} {
  64. display: flex;
  65. justify-content: space-between;
  66. margin: 16px 0;
  67. &-select {
  68. width: 126px;
  69. }
  70. }
  71. </style>