diff --git a/packages/components/badge/__tests__/badge.test.tsx b/packages/components/badge/__tests__/badge.test.tsx
index e2aab4fb74..d3ed6d448c 100644
--- a/packages/components/badge/__tests__/badge.test.tsx
+++ b/packages/components/badge/__tests__/badge.test.tsx
@@ -70,16 +70,29 @@ describe('Badge', () => {
))
expect(wrapper.find('.el-badge__content').text()).toEqual('0')
- badgeValue.value = 80
- await nextTick()
- expect(wrapper.find('.el-badge__content').text()).toEqual('80')
showZero.value = false
+ await nextTick()
+ expect(wrapper.find('.el-badge__content').classes()).toContain(
+ 'is-hide-zero'
+ )
+
+ badgeValue.value = 1
+ await nextTick()
+ expect(wrapper.find('.el-badge__content').text()).toEqual('1')
+ expect(wrapper.find('.el-badge__content').classes()).not.toContain(
+ 'is-hide-zero'
+ )
badgeValue.value = 0
await nextTick()
- expect(wrapper.find('.el-badge__content').text()).toEqual('')
- badgeValue.value = 80
+ expect(wrapper.find('.el-badge__content').classes()).toContain(
+ 'is-hide-zero'
+ )
+
+ showZero.value = true
await nextTick()
- expect(wrapper.find('.el-badge__content').text()).toEqual('80')
+ expect(wrapper.find('.el-badge__content').classes()).not.toContain(
+ 'is-hide-zero'
+ )
})
test('showZero with max', async () => {
diff --git a/packages/components/badge/src/badge.vue b/packages/components/badge/src/badge.vue
index 29703be944..b2de55b91f 100644
--- a/packages/components/badge/src/badge.vue
+++ b/packages/components/badge/src/badge.vue
@@ -9,6 +9,7 @@
ns.em('content', type),
ns.is('fixed', !!$slots.default),
ns.is('dot', isDot),
+ ns.is('hide-zero', !showZero && props.value === 0),
badgeClass,
]"
:style="style"
@@ -36,13 +37,11 @@ const ns = useNamespace('badge')
const content = computed(() => {
if (props.isDot) return ''
if (isNumber(props.value) && isNumber(props.max)) {
- if (props.max < props.value) {
- return `${props.max}+`
- }
- return props.value === 0 && !props.showZero ? '' : `${props.value}`
+ return props.max < props.value ? `${props.max}+` : `${props.value}`
}
return `${props.value}`
})
+
const style = computed(() => {
return [
{
diff --git a/packages/theme-chalk/src/badge.scss b/packages/theme-chalk/src/badge.scss
index 05d18becbb..07db187d3f 100644
--- a/packages/theme-chalk/src/badge.scss
+++ b/packages/theme-chalk/src/badge.scss
@@ -45,6 +45,10 @@
border-radius: 50%;
}
+ @include when(hide-zero) {
+ display: none;
+ }
+
@each $type in (primary, success, warning, info, danger) {
@include m($type) {
background-color: getCssVar('color', $type);