| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 | <template>	<view v-if="show" class="u-badge" :class="[			isDot ? 'u-badge-dot' : '',			size == 'mini' ? 'u-badge-mini' : '',			type ? 'u-badge--bg--' + type : ''		]" :style="[{			top: offset[0] + 'rpx',			right: offset[1] + 'rpx',			fontSize: fontSize + 'rpx',			position: absolute ? 'absolute' : 'static',			color: color,			backgroundColor: bgColor		}, boxStyle]"	>		{{showText}}	</view></template><script>	/**	 * badge 角标	 * @description 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。	 * @tutorial https://www.uviewui.com/components/badge.html	 * @property {String Number} count 展示的数字,大于 overflowCount 时显示为 ${overflowCount}+,为0且show-zero为false时隐藏	 * @property {Boolean} is-dot 不展示数字,只有一个小点(默认false)	 * @property {Boolean} absolute 组件是否绝对定位,为true时,offset参数才有效(默认true)	 * @property {String Number} overflow-count 展示封顶的数字值(默认99)	 * @property {String} type 使用预设的背景颜色(默认error)	 * @property {Boolean} show-zero 当数值为 0 时,是否展示 Badge(默认false)	 * @property {String} size Badge的尺寸,设为mini会得到小一号的Badge(默认default)	 * @property {Array} offset 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,单位rpx。absolute为true时有效(默认[20, 20])	 * @property {String} color 字体颜色(默认#ffffff)	 * @property {String} bgColor 背景颜色,优先级比type高,如设置,type参数会失效	 * @property {Boolean} is-center 组件中心点是否和父组件右上角重合,优先级比offset高,如设置,offset参数会失效(默认false)	 * @example <u-badge type="error" count="7"></u-badge>	 */	export default {		name: 'u-badge',		props: {			// primary,warning,success,error,info			type: {				type: String,				default: 'error'			},			// default, mini			size: {				type: String,				default: 'default'			},			//是否是圆点			isDot: {				type: Boolean,				default: false			},			// 显示的数值内容			count: {				type: [Number, String],			},			// 展示封顶的数字值			overflowCount: {				type: Number,				default: 99			},			// 当数值为 0 时,是否展示 Badge			showZero: {				type: Boolean,				default: false			},			// 位置偏移			offset: {				type: Array,				default: () => {					return [20, 20]				}			},			// 是否开启绝对定位,开启了offset才会起作用			absolute: {				type: Boolean,				default: true			},			// 字体大小			fontSize: {				type: [String, Number],				default: '24'			},			// 字体演示			color: {				type: String,				default: '#ffffff'			},			// badge的背景颜色			bgColor: {				type: String,				default: ''			},			// 是否让badge组件的中心点和父组件右上角重合,配置的话,offset将会失效			isCenter: {				type: Boolean,				default: false			}		},		computed: {			// 是否将badge中心与父组件右上角重合			boxStyle() {				let style = {};				if(this.isCenter) {					style.top = 0;					style.right = 0;					// Y轴-50%,意味着badge向上移动了badge自身高度一半,X轴50%,意味着向右移动了自身宽度一半					style.transform = "translateY(-50%) translateX(50%)";				} else {					style.top = this.offset[0] + 'rpx';					style.right = this.offset[1] + 'rpx';					style.transform = "translateY(0) translateX(0)";				}				// 如果尺寸为mini,后接上scale()				if(this.size == 'mini') {					style.transform = style.transform + " scale(0.8)";				}				return style;			},			// isDot类型时,不显示文字			showText() {				if(this.isDot) return '';				else {					if(this.count > this.overflowCount) return `${this.overflowCount}+`;					else return this.count;				}			},			// 是否显示组件			show() {				// 如果count的值为0,并且showZero设置为false,不显示组件				if(this.count == 0 && this.showZero == false) return false;				else return true;			}		}	}</script><style lang="scss" scoped>	@import "../../libs/css/style.components.scss";	.u-badge {		/* #ifndef APP-NVUE */		display: inline-flex;		/* #endif */		justify-content: center;		align-items: center;		line-height: 24rpx;		padding: 4rpx 8rpx;		border-radius: 100rpx;		z-index: 9;		&--bg--primary {			background-color: $u-type-primary;		}		&--bg--error {			background-color: $u-type-error;		}		&--bg--success {			background-color: $u-type-success;		}		&--bg--info {			background-color: $u-type-info;		}		&--bg--warning {			background-color: $u-type-warning;		}	}	.u-badge-dot {		height: 16rpx;		width: 16rpx;		border-radius: 100rpx;		line-height: 1;	}	.u-badge-mini {		transform: scale(0.8);		transform-origin: center center;	}	// .u-primary {	// 	background: $u-type-primary;	// 	color: #fff;	// }	// .u-error {	// 	background: $u-type-error;	// 	color: #fff;	// }	// .u-warning {	// 	background: $u-type-warning;	// 	color: #fff;	// }	// .u-success {	// 	background: $u-type-success;	// 	color: #fff;	// }	// .u-black {	// 	background: #585858;	// 	color: #fff;	// }	.u-info {		background-color: $u-type-info;		color: #fff;	}</style>
 |