Blame view

node_modules/uview-ui/components/u-badge/u-badge.vue 5.29 KB
c7add6cf   “wangming”   初始版本开发完毕
1
  <template>
25852764   unknown   s
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  	<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>
c7add6cf   “wangming”   初始版本开发完毕
17
18
19
  </template>
  
  <script>
c7add6cf   “wangming”   初始版本开发完毕
20
  	/**
25852764   unknown   s
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  	 * badge 角标
  	 * @description 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。
  	 * @tutorial https://www.uviewui.com/components/badge.html
  	 * @property {String Number} count 展示的数字,大于 overflowCount 时显示为 ${overflowCount}+,为0show-zerofalse时隐藏
  	 * @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],也即设置的为topright的值,单位rpxabsolutetrue时有效(默认[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>
c7add6cf   “wangming”   初始版本开发完毕
36
37
38
  	 */
  	export default {
  		name: 'u-badge',
25852764   unknown   s
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  		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
  			}
  		},
c7add6cf   “wangming”   初始版本开发完毕
102
103
104
105
  		computed: {
  			// 是否将badge中心与父组件右上角重合
  			boxStyle() {
  				let style = {};
25852764   unknown   s
106
107
108
109
110
111
112
113
114
  				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)";
c7add6cf   “wangming”   初始版本开发完毕
115
  				}
25852764   unknown   s
116
117
118
  				// 如果尺寸为mini,后接上scal()
  				if(this.size == 'mini') {
  					style.transform = style.transform + " scale(0.8)";
c7add6cf   “wangming”   初始版本开发完毕
119
  				}
25852764   unknown   s
120
  				return style;
c7add6cf   “wangming”   初始版本开发完毕
121
  			},
25852764   unknown   s
122
123
124
125
126
127
  			// isDot类型时,不显示文字
  			showText() {
  				if(this.isDot) return '';
  				else {
  					if(this.count > this.overflowCount) return `${this.overflowCount}+`;
  					else return this.count;
c7add6cf   “wangming”   初始版本开发完毕
128
129
  				}
  			},
25852764   unknown   s
130
131
132
133
134
135
  			// 是否显示组件
  			show() {
  				// 如果count的值为0,并且showZero设置为false,不显示组件
  				if(this.count == 0 && this.showZero == false) return false;
  				else return true;
  			}
c7add6cf   “wangming”   初始版本开发完毕
136
137
138
139
140
  		}
  	}
  </script>
  
  <style lang="scss" scoped>
25852764   unknown   s
141
142
  	@import "../../libs/css/style.components.scss";
  	
c7add6cf   “wangming”   初始版本开发完毕
143
  	.u-badge {
25852764   unknown   s
144
145
146
147
148
149
150
151
152
  		/* #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;
c7add6cf   “wangming”   初始版本开发完毕
153
  		
25852764   unknown   s
154
155
  		&--bg--primary {
  			background-color: $u-type-primary;
c7add6cf   “wangming”   初始版本开发完毕
156
157
  		}
  		
25852764   unknown   s
158
159
  		&--bg--error {
  			background-color: $u-type-error;
c7add6cf   “wangming”   初始版本开发完毕
160
161
  		}
  		
25852764   unknown   s
162
163
  		&--bg--success {
  			background-color: $u-type-success;
c7add6cf   “wangming”   初始版本开发完毕
164
165
  		}
  		
25852764   unknown   s
166
167
  		&--bg--info {
  			background-color: $u-type-info;
c7add6cf   “wangming”   初始版本开发完毕
168
169
  		}
  		
25852764   unknown   s
170
171
  		&--bg--warning {
  			background-color: $u-type-warning;
c7add6cf   “wangming”   初始版本开发完毕
172
173
  		}
  	}
25852764   unknown   s
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
  	
  	.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>