154 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			154 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
| 
								 | 
							
								<template>
							 | 
						|||
| 
								 | 
							
									<view class="u-divider" :style="{
							 | 
						|||
| 
								 | 
							
										height: height == 'auto' ? 'auto' : height + 'rpx',
							 | 
						|||
| 
								 | 
							
										backgroundColor: bgColor,
							 | 
						|||
| 
								 | 
							
										marginBottom: marginBottom + 'rpx',
							 | 
						|||
| 
								 | 
							
										marginTop: marginTop + 'rpx'
							 | 
						|||
| 
								 | 
							
									}" @tap="click">
							 | 
						|||
| 
								 | 
							
										<view class="u-divider-line" :class="[type ? 'u-divider-line--bordercolor--' + type : '']" :style="[lineStyle]"></view>
							 | 
						|||
| 
								 | 
							
										<view v-if="useSlot" class="u-divider-text" :style="{
							 | 
						|||
| 
								 | 
							
											color: color,
							 | 
						|||
| 
								 | 
							
											fontSize: fontSize + 'rpx'
							 | 
						|||
| 
								 | 
							
										}"><slot /></view>
							 | 
						|||
| 
								 | 
							
										<view class="u-divider-line" :class="[type ? 'u-divider-line--bordercolor--' + type : '']" :style="[lineStyle]"></view>
							 | 
						|||
| 
								 | 
							
									</view>
							 | 
						|||
| 
								 | 
							
								</template>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								<script>
							 | 
						|||
| 
								 | 
							
								/**
							 | 
						|||
| 
								 | 
							
								 * divider 分割线
							 | 
						|||
| 
								 | 
							
								 * @description 区隔内容的分割线,一般用于页面底部"没有更多"的提示。
							 | 
						|||
| 
								 | 
							
								 * @tutorial https://www.uviewui.com/components/divider.html
							 | 
						|||
| 
								 | 
							
								 * @property {String Number} half-width 文字左或右边线条宽度,数值或百分比,数值时单位为rpx
							 | 
						|||
| 
								 | 
							
								 * @property {String} border-color 线条颜色,优先级高于type(默认#dcdfe6)
							 | 
						|||
| 
								 | 
							
								 * @property {String} color 文字颜色(默认#909399)
							 | 
						|||
| 
								 | 
							
								 * @property {String Number} fontSize 字体大小,单位rpx(默认26)
							 | 
						|||
| 
								 | 
							
								 * @property {String} bg-color 整个divider的背景颜色(默认呢#ffffff)
							 | 
						|||
| 
								 | 
							
								 * @property {String Number} height 整个divider的高度,单位rpx(默认40)
							 | 
						|||
| 
								 | 
							
								 * @property {String} type 将线条设置主题色(默认primary)
							 | 
						|||
| 
								 | 
							
								 * @property {Boolean} useSlot 是否使用slot传入内容,如果不传入,中间不会有空隙(默认true)
							 | 
						|||
| 
								 | 
							
								 * @property {String Number} margin-top 与前一个组件的距离,单位rpx(默认0)
							 | 
						|||
| 
								 | 
							
								 * @property {String Number} margin-bottom 与后一个组件的距离,单位rpx(0)
							 | 
						|||
| 
								 | 
							
								 * @event {Function} click divider组件被点击时触发
							 | 
						|||
| 
								 | 
							
								 * @example <u-divider color="#fa3534">长河落日圆</u-divider>
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								export default {
							 | 
						|||
| 
								 | 
							
									name: 'u-divider',
							 | 
						|||
| 
								 | 
							
									props: {
							 | 
						|||
| 
								 | 
							
										// 单一边divider横线的宽度(数值),单位rpx。或者百分比
							 | 
						|||
| 
								 | 
							
										halfWidth: {
							 | 
						|||
| 
								 | 
							
											type: [Number, String],
							 | 
						|||
| 
								 | 
							
											default: 150
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// divider横线的颜色,如设置,
							 | 
						|||
| 
								 | 
							
										borderColor: {
							 | 
						|||
| 
								 | 
							
											type: String,
							 | 
						|||
| 
								 | 
							
											default: '#dcdfe6'
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// 主题色,可以是primary|info|success|warning|error之一值
							 | 
						|||
| 
								 | 
							
										type: {
							 | 
						|||
| 
								 | 
							
											type: String,
							 | 
						|||
| 
								 | 
							
											default: 'primary'
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// 文字颜色
							 | 
						|||
| 
								 | 
							
										color: {
							 | 
						|||
| 
								 | 
							
											type: String,
							 | 
						|||
| 
								 | 
							
											default: '#909399'
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// 文字大小,单位rpx
							 | 
						|||
| 
								 | 
							
										fontSize: {
							 | 
						|||
| 
								 | 
							
											type: [Number, String],
							 | 
						|||
| 
								 | 
							
											default: 26
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// 整个divider的背景颜色
							 | 
						|||
| 
								 | 
							
										bgColor: {
							 | 
						|||
| 
								 | 
							
											type: String,
							 | 
						|||
| 
								 | 
							
											default: '#ffffff'
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// 整个divider的高度单位rpx
							 | 
						|||
| 
								 | 
							
										height: {
							 | 
						|||
| 
								 | 
							
											type: [Number, String],
							 | 
						|||
| 
								 | 
							
											default: 'auto'
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// 上边距
							 | 
						|||
| 
								 | 
							
										marginTop: {
							 | 
						|||
| 
								 | 
							
											type: [String, Number],
							 | 
						|||
| 
								 | 
							
											default: 0
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// 下边距
							 | 
						|||
| 
								 | 
							
										marginBottom: {
							 | 
						|||
| 
								 | 
							
											type: [String, Number],
							 | 
						|||
| 
								 | 
							
											default: 0
							 | 
						|||
| 
								 | 
							
										},
							 | 
						|||
| 
								 | 
							
										// 是否使用slot传入内容,如果不用slot传入内容,先的中间就不会有空隙
							 | 
						|||
| 
								 | 
							
										useSlot: {
							 | 
						|||
| 
								 | 
							
											type: Boolean,
							 | 
						|||
| 
								 | 
							
											default: true
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									},
							 | 
						|||
| 
								 | 
							
									computed: {
							 | 
						|||
| 
								 | 
							
										lineStyle() {
							 | 
						|||
| 
								 | 
							
											let style = {};
							 | 
						|||
| 
								 | 
							
											if(String(this.halfWidth).indexOf('%') != -1) style.width = this.halfWidth;
							 | 
						|||
| 
								 | 
							
											else style.width = this.halfWidth + 'rpx';
							 | 
						|||
| 
								 | 
							
											// borderColor优先级高于type值
							 | 
						|||
| 
								 | 
							
											if(this.borderColor) style.borderColor = this.borderColor;
							 | 
						|||
| 
								 | 
							
											return style;
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									},
							 | 
						|||
| 
								 | 
							
									methods: {
							 | 
						|||
| 
								 | 
							
										click() {
							 | 
						|||
| 
								 | 
							
											this.$emit('click');
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								};
							 | 
						|||
| 
								 | 
							
								</script>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								<style lang="scss" scoped>
							 | 
						|||
| 
								 | 
							
								@import "../../libs/css/style.components.scss";
							 | 
						|||
| 
								 | 
							
								.u-divider {
							 | 
						|||
| 
								 | 
							
									width: 100%;
							 | 
						|||
| 
								 | 
							
									position: relative;
							 | 
						|||
| 
								 | 
							
									text-align: center;
							 | 
						|||
| 
								 | 
							
									@include vue-flex;
							 | 
						|||
| 
								 | 
							
									justify-content: center;
							 | 
						|||
| 
								 | 
							
									align-items: center;
							 | 
						|||
| 
								 | 
							
									overflow: hidden;
							 | 
						|||
| 
								 | 
							
									flex-direction: row;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								.u-divider-line {
							 | 
						|||
| 
								 | 
							
									border-bottom: 1px solid $u-border-color;
							 | 
						|||
| 
								 | 
							
									transform: scale(1, 0.5);
							 | 
						|||
| 
								 | 
							
									transform-origin: center;
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									&--bordercolor--primary {
							 | 
						|||
| 
								 | 
							
										border-color: $u-type-primary;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									&--bordercolor--success {
							 | 
						|||
| 
								 | 
							
										border-color: $u-type-success;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									&--bordercolor--error {
							 | 
						|||
| 
								 | 
							
										border-color: $u-type-primary;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									&--bordercolor--info {
							 | 
						|||
| 
								 | 
							
										border-color: $u-type-info;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									
							 | 
						|||
| 
								 | 
							
									&--bordercolor--warning {
							 | 
						|||
| 
								 | 
							
										border-color: $u-type-warning;
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								.u-divider-text {
							 | 
						|||
| 
								 | 
							
									white-space: nowrap;
							 | 
						|||
| 
								 | 
							
									padding: 0 16rpx;
							 | 
						|||
| 
								 | 
							
									/* #ifndef APP-NVUE */
							 | 
						|||
| 
								 | 
							
									display: inline-flex;		
							 | 
						|||
| 
								 | 
							
									/* #endif */
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								</style>
							 |