From 2fe243560d6da1feac79c3c39cee1e3b1ca98548 Mon Sep 17 00:00:00 2001 From: devin Date: Thu, 5 Jan 2023 15:23:06 +0800 Subject: [PATCH 1/4] =?UTF-8?q?select=E5=A2=9E=E5=8A=A0round?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/button/__demo__/BtnLoading.vue | 2 +- .../src/components/popover/OPopover.vue | 6 + .../src/components/select/OSelect.vue | 40 ++++- .../select/__demo__/IndexSelect.vue | 2 + .../select/__demo__/SelectDisabled.vue | 14 +- .../select/__demo__/SelectPopupposition.vue | 145 +++++++++++------- .../select/__demo__/SelectShape.vue | 37 +++++ .../components/select/__demo__/SelectSize.vue | 2 +- .../src/components/select/style/index.scss | 47 +++--- .../src/components/select/style/var.scss | 2 + 10 files changed, 211 insertions(+), 86 deletions(-) create mode 100644 packages/opendesign/src/components/select/__demo__/SelectShape.vue diff --git a/packages/opendesign/src/components/button/__demo__/BtnLoading.vue b/packages/opendesign/src/components/button/__demo__/BtnLoading.vue index 479056e9..d90811eb 100644 --- a/packages/opendesign/src/components/button/__demo__/BtnLoading.vue +++ b/packages/opendesign/src/components/button/__demo__/BtnLoading.vue @@ -22,7 +22,7 @@ const showLoading = (key: 'loading1' | 'loading2' | 'loading3', val: boolean) => Outline Button Text Button - Link Button + Link Button diff --git a/packages/opendesign/src/components/popover/OPopover.vue b/packages/opendesign/src/components/popover/OPopover.vue index 7a249cc0..dd13980a 100644 --- a/packages/opendesign/src/components/popover/OPopover.vue +++ b/packages/opendesign/src/components/popover/OPopover.vue @@ -40,10 +40,16 @@ const props = defineProps({ type: [String, Object] as PropType, default: document.body, }, + /** + * 是否在隐藏时卸载 + */ unmountOnClose: { type: Boolean, default: true, }, + /** + * 距离触发元素的偏移量 + */ offset: { type: Number, default: 8, diff --git a/packages/opendesign/src/components/select/OSelect.vue b/packages/opendesign/src/components/select/OSelect.vue index 285ee01c..d707d32e 100644 --- a/packages/opendesign/src/components/select/OSelect.vue +++ b/packages/opendesign/src/components/select/OSelect.vue @@ -3,20 +3,53 @@ import { provide, ref } from 'vue'; import { defaultSize, defaultShape } from '../_shared/global'; import type { SizeT, ShapeT } from '../_shared/global'; import { IconArrowTraingleDown } from '../icons'; -import { OPopup, PopupPositionT } from '../popup'; +import { OPopup, PopupPositionT, PopupTriggerT } from '../popup'; import { selectOptionInjectKey } from './provide'; import { SelectOptionT } from './types'; interface SelectPropT { + /** + * 下拉框的值 + * v-model + */ modelValue: string | number; + /** + * 大小 + */ size?: SizeT; + /** + * 形状 + */ shape?: ShapeT; + /** + * 提示文本 + */ placeholder?: string; + /** + * 下拉选项触发方式 + */ + trigger?: PopupTriggerT; + /** + * 是否禁用 + */ disabled?: boolean; - + /** + * 下拉选项位置 + */ optionPosition?: PopupPositionT; + /** + * 下拉选项宽度自适应规则 + * 'auto':自动 | 'min-width':最小宽度与选择框一致 | 'width': 宽度与选择框一致 + */ optionWidthMode?: 'auto' | 'min-width' | 'width'; + /** + * 下拉容器自定义类 + */ optionWrapClass?: string; + /** + * 是否在结束选择时,卸载下拉选项 + * v-model + */ unmountOnClose?: boolean; /** * 默认初始值对应的label显示,不传则使用modelValue @@ -29,6 +62,7 @@ const props = withDefaults(defineProps(), { size: undefined, shape: undefined, placeholder: 'please select...', + trigger: 'click', optionPosition: 'bl', optionWidthMode: 'min-width', optionWrapClass: '', @@ -84,7 +118,7 @@ provide(selectOptionInjectKey, { :unmount-on-close="props.unmountOnClose" :position="props.optionPosition" :target="selectRef" - trigger="click" + :trigger="props.trigger" :offset="4" :adjust-min-width="props.optionWidthMode === 'min-width'" :adjust-width="props.optionWidthMode === 'width'" diff --git a/packages/opendesign/src/components/select/__demo__/IndexSelect.vue b/packages/opendesign/src/components/select/__demo__/IndexSelect.vue index c9b842f0..9c8d89ea 100644 --- a/packages/opendesign/src/components/select/__demo__/IndexSelect.vue +++ b/packages/opendesign/src/components/select/__demo__/IndexSelect.vue @@ -3,12 +3,14 @@ import '../style'; import '../../option/style'; import SelectSize from './SelectSize.vue'; +import SelectShape from './SelectShape.vue'; import SelectDisabled from './SelectDisabled.vue'; import SelectPopupposition from './SelectPopupposition.vue';