diff --git a/examples/sites/demos/apis/select.js b/examples/sites/demos/apis/select.js
index 719095a888..c48209760a 100644
--- a/examples/sites/demos/apis/select.js
+++ b/examples/sites/demos/apis/select.js
@@ -544,6 +544,20 @@ export default {
pcDemo: 'tag-type',
mfDemo: 'tag-type'
},
+ {
+ name: 'max-tag-width',
+ type: 'string',
+ defaultValue: '',
+ desc: {
+ 'zh-CN': '多选时,设置最大标签宽度',
+ 'en-US': 'When multiple selections are made, set the maximum label width.'
+ },
+ mode: ['pc', 'mobile-first'],
+ pcDemo: '',
+ meta: {
+ stable: '3.22.0'
+ }
+ },
{
name: 'text-field',
type: 'string',
diff --git a/examples/sites/demos/apis/tag.js b/examples/sites/demos/apis/tag.js
index f88a5df7ba..e975ec0090 100644
--- a/examples/sites/demos/apis/tag.js
+++ b/examples/sites/demos/apis/tag.js
@@ -54,6 +54,20 @@ export default {
mode: ['mobile-first'],
mfDemo: ''
},
+ {
+ name: 'max-width',
+ type: 'string',
+ defaultValue: '',
+ desc: {
+ 'zh-CN': '设置最大宽度',
+ 'en-US': 'set max width'
+ },
+ mode: ['pc', 'mobile-first'],
+ pcDemo: 'max-width',
+ meta: {
+ stable: '3.22.0'
+ }
+ },
{
name: 'disabled',
type: 'boolean',
diff --git a/examples/sites/demos/pc/app/tag/max-width-composition-api.vue b/examples/sites/demos/pc/app/tag/max-width-composition-api.vue
new file mode 100644
index 0000000000..577a86e602
--- /dev/null
+++ b/examples/sites/demos/pc/app/tag/max-width-composition-api.vue
@@ -0,0 +1,16 @@
+
+
+ 文本超长超长的标签
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/tag/max-width.spec.ts b/examples/sites/demos/pc/app/tag/max-width.spec.ts
new file mode 100644
index 0000000000..ffaff39f99
--- /dev/null
+++ b/examples/sites/demos/pc/app/tag/max-width.spec.ts
@@ -0,0 +1,10 @@
+import { test, expect } from '@playwright/test'
+
+test('测试最大宽度', async ({ page }) => {
+ page.on('pageerror', (exception) => expect(exception).not.toBeNull())
+ await page.goto('tag#max-width')
+
+ const normal = page.getByText('文本超长超长的标签')
+
+ await expect(normal).toHaveCSS('max-width', '80px')
+})
diff --git a/examples/sites/demos/pc/app/tag/max-width.vue b/examples/sites/demos/pc/app/tag/max-width.vue
new file mode 100644
index 0000000000..e4cc16197f
--- /dev/null
+++ b/examples/sites/demos/pc/app/tag/max-width.vue
@@ -0,0 +1,22 @@
+
+
+ 文本超长超长的标签
+
+
+
+
+
+
diff --git a/examples/sites/demos/pc/app/tag/webdoc/tag.js b/examples/sites/demos/pc/app/tag/webdoc/tag.js
index 69190b3858..54be68cc6b 100644
--- a/examples/sites/demos/pc/app/tag/webdoc/tag.js
+++ b/examples/sites/demos/pc/app/tag/webdoc/tag.js
@@ -76,6 +76,18 @@ export default {
},
codeFiles: ['size.vue']
},
+ {
+ demoId: 'max-width',
+ name: {
+ 'zh-CN': '最大宽度',
+ 'en-US': 'Max width'
+ },
+ desc: {
+ 'zh-CN': '通过 maxWidth 设置最大宽度 。',
+ 'en-US': 'Set the maxWidth through maxWidth.'
+ },
+ codeFiles: ['max-width.vue']
+ },
{
demoId: 'disabled',
name: {
diff --git a/packages/theme-saas/src/tag/index.less b/packages/theme-saas/src/tag/index.less
index a3042c71b8..29ec126555 100644
--- a/packages/theme-saas/src/tag/index.less
+++ b/packages/theme-saas/src/tag/index.less
@@ -15,6 +15,10 @@
@apply whitespace-nowrap;
@apply inline-flex;
@apply items-center;
+
+ @apply overflow-hidden;
+ @apply text-ellipsis;
+
.tag-variant(
theme('colors.color.info.primary.DEFAULT'),
theme('colors.transparent'),
diff --git a/packages/theme/src/tag/index.less b/packages/theme/src/tag/index.less
index 9862637001..8bfeccba03 100644
--- a/packages/theme/src/tag/index.less
+++ b/packages/theme/src/tag/index.less
@@ -24,7 +24,7 @@
height: fit-content; // 避免 flex时,高度拉伸
line-height: var(--tv-Tag-line-height);
border: 1px solid;
- max-width: 200px; // 新增约束,避免太长的标签
+ max-width: 200px; // 默认约束,避免太长的标签,用户还可以再通过属性,覆盖到style上.
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
diff --git a/packages/vue/src/select/src/index.ts b/packages/vue/src/select/src/index.ts
index e614bc7497..d0a306d123 100644
--- a/packages/vue/src/select/src/index.ts
+++ b/packages/vue/src/select/src/index.ts
@@ -362,6 +362,11 @@ export default defineComponent({
showAllTextTag: {
type: Boolean,
default: false
+ },
+ // 配置多选时,Tag的最大宽度
+ maxTagWidth: {
+ type: [String, Number],
+ default: null
}
},
setup(props, context) {
diff --git a/packages/vue/src/select/src/mobile-first.vue b/packages/vue/src/select/src/mobile-first.vue
index 28555cd953..92b102901b 100644
--- a/packages/vue/src/select/src/mobile-first.vue
+++ b/packages/vue/src/select/src/mobile-first.vue
@@ -27,8 +27,8 @@
multiple && !state.selectDisabled && state.selected.length
? state.selected.map((item) => (item.state ? item.state.currentLabel : item.currentLabel)).join('; ')
: !multiple && state.selectDisabled
- ? state.selectedLabel
- : ''
+ ? state.selectedLabel
+ : ''
"
>
+ {{ state.selectedVal.length - 1 }}
@@ -139,6 +141,7 @@
key="tags-collapse"
:closable="false"
:size="state.collapseTagSize"
+ :maxWidth="maxTagWidth"
>+ {{ state.collapseTagsLength }}
+ {{ state.selected.length - 1 }}
@@ -135,6 +137,7 @@
:closable="true"
:size="state.collapseTagSize"
@close="toggleCheckAll(false)"
+ :maxWidth="maxTagWidth"
>
{{ allText || t('ui.base.all') }}
@@ -150,6 +153,7 @@
:closable="false"
:size="state.collapseTagSize"
@click="onClickCollapseTag($event)"
+ :maxWidth="maxTagWidth"
>
+ {{ state.collapseTagsLength }}
@@ -168,6 +172,7 @@
:type="state.getTagType"
@close="deleteTag($event, item)"
disable-transitions
+ :maxWidth="maxTagWidth"
>
+
{value ? {value} : slots.default && slots.default()}
{closable && (