import { isDef, createNamespace } from '../utils'; import { isNumeric } from '../utils/validate/number'; const [createComponent, bem] = createNamespace('badge'); export default createComponent({ props: { dot: Boolean, max: [Number, String], color: String, content: [Number, String], tag: { type: String, default: 'div', }, }, methods: { hasContent() { return !!( this.$scopedSlots.content || (isDef(this.content) && this.content !== '') ); }, renderContent() { const { dot, max, content } = this; if (!dot && this.hasContent()) { if (this.$scopedSlots.content) { return this.$scopedSlots.content(); } if (isDef(max) && isNumeric(content) && +content > max) { return `${max}+`; } return content; } }, renderBadge() { if (this.hasContent() || this.dot) { return (
{this.renderContent()}
); } }, }, render() { if (this.$scopedSlots.default) { const { tag } = this; return ( {this.$scopedSlots.default()} {this.renderBadge()} ); } return this.renderBadge(); }, });