From 52b8d98d90d55290e5e93bd7f35a85f18dd2e96c Mon Sep 17 00:00:00 2001 From: wangchen Date: Fri, 16 Aug 2024 18:43:24 +0800 Subject: [PATCH] feat(select): add tag prop --- .../_components/select-view/select-view.tsx | 5 +++++ .../web-vue/components/cascader/cascader.vue | 10 ++++++++++ .../web-vue/components/input-tag/input-tag.tsx | 17 ++++++++++++++++- .../components/input-tag/style/input-tag.less | 5 +++++ packages/web-vue/components/select/select.tsx | 10 ++++++++++ .../web-vue/components/tag/style/index.less | 6 ++++++ packages/web-vue/components/tag/tag.vue | 14 +++++++++++++- 7 files changed, 65 insertions(+), 2 deletions(-) diff --git a/packages/web-vue/components/_components/select-view/select-view.tsx b/packages/web-vue/components/_components/select-view/select-view.tsx index d91bdcf52..608f3fe0a 100644 --- a/packages/web-vue/components/_components/select-view/select-view.tsx +++ b/packages/web-vue/components/_components/select-view/select-view.tsx @@ -68,6 +68,10 @@ export default defineComponent({ type: Number, default: 0, }, + tagNowrap: { + type: Boolean, + default: false, + }, retainInputValue: { type: Boolean, default: false, @@ -190,6 +194,7 @@ export default defineComponent({ error={mergedError.value} maxTagCount={props.maxTagCount} disabledInput={!props.allowSearch && !props.allowCreate} + tagNowrap={props.tagNowrap} retainInputValue uninjectFormItemContext onRemove={handleRemove} diff --git a/packages/web-vue/components/cascader/cascader.vue b/packages/web-vue/components/cascader/cascader.vue index 6766fbc81..a967e6cf0 100644 --- a/packages/web-vue/components/cascader/cascader.vue +++ b/packages/web-vue/components/cascader/cascader.vue @@ -27,6 +27,7 @@ :placeholder="placeholder" :loading="loading" :max-tag-count="maxTagCount" + :tag-nowrap="tagNowrap" v-bind="$attrs" @input-value-change="handleInputValueChange" @clear="handleClear" @@ -426,6 +427,15 @@ export default defineComponent({ virtualListProps: { type: Object as PropType, }, + /** + * @zh 标签内容不换行 + * @en Tag content does not wrap + * @version 2.56.1 + */ + tagNowrap: { + type: Boolean, + default: false, + }, }, emits: { 'update:modelValue': ( diff --git a/packages/web-vue/components/input-tag/input-tag.tsx b/packages/web-vue/components/input-tag/input-tag.tsx index ed818e8d8..d8005f229 100644 --- a/packages/web-vue/components/input-tag/input-tag.tsx +++ b/packages/web-vue/components/input-tag/input-tag.tsx @@ -155,6 +155,15 @@ export default defineComponent({ fieldNames: { type: Object as PropType, }, + /** + * @zh 标签内容不换行 + * @en Tag content does not wrap + * @version 2.56.1 + */ + tagNowrap: { + type: Boolean, + default: false, + }, // private baseCls: String, focused: Boolean, @@ -531,7 +540,12 @@ export default defineComponent({ tag="span" name="input-tag-zoom" // @ts-ignore - class={`${prefixCls}-inner`} + class={[ + `${prefixCls}-inner`, + { + [`${prefixCls}-nowrap`]: props.tagNowrap, + }, + ]} > {tags.value.map((item, index) => ( handleRemove(item.value, index, ev)} > diff --git a/packages/web-vue/components/input-tag/style/input-tag.less b/packages/web-vue/components/input-tag/style/input-tag.less index 00ac25dbd..dd13db91b 100644 --- a/packages/web-vue/components/input-tag/style/input-tag.less +++ b/packages/web-vue/components/input-tag/style/input-tag.less @@ -25,6 +25,11 @@ overflow: hidden; line-height: 0; + &.@{cls}-nowrap { + display: flex; + flex-wrap: wrap; + } + .@{cls}-tag { display: inline-flex; align-items: center; diff --git a/packages/web-vue/components/select/select.tsx b/packages/web-vue/components/select/select.tsx index 0b7776d66..cff74ac9c 100644 --- a/packages/web-vue/components/select/select.tsx +++ b/packages/web-vue/components/select/select.tsx @@ -368,6 +368,15 @@ export default defineComponent({ type: Boolean as PropType, default: false, }, + /** + * @zh 标签内容不换行 + * @en Tag content does not wrap + * @version 2.56.1 + */ + tagNowrap: { + type: Boolean, + default: false, + }, }, emits: { 'update:modelValue': ( @@ -1002,6 +1011,7 @@ export default defineComponent({ placeholder={props.placeholder} bordered={props.bordered} size={mergedSize.value} + tagNowrap={props.tagNowrap} // @ts-ignore onInputValueChange={handleInputValueChange} onRemove={handleRemove} diff --git a/packages/web-vue/components/tag/style/index.less b/packages/web-vue/components/tag/style/index.less index 72bbfa07e..0d4d41488 100644 --- a/packages/web-vue/components/tag/style/index.less +++ b/packages/web-vue/components/tag/style/index.less @@ -82,6 +82,12 @@ color: @tag-default-color-icon; } + &-text { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + each(@colors, { &&-checked&-@{value} { color: ~'@{tag-@{value}-color-text}'; diff --git a/packages/web-vue/components/tag/tag.vue b/packages/web-vue/components/tag/tag.vue index c13c9db9f..0ff69e2d8 100644 --- a/packages/web-vue/components/tag/tag.vue +++ b/packages/web-vue/components/tag/tag.vue @@ -3,7 +3,10 @@ - + + + + true,