84 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
|  | <template> | |||
|  | 	<view class="u-time-axis-item"> | |||
|  | 		<slot name="content" /> | |||
|  | 		<view class="u-time-axis-node" :style="[nodeStyle]"> | |||
|  | 			<slot name="node"> | |||
|  | 				<view class="u-dot"> | |||
|  | 				</view> | |||
|  | 			</slot> | |||
|  | 		</view> | |||
|  | 	</view> | |||
|  | </template> | |||
|  | 
 | |||
|  | <script> | |||
|  | 	/** | |||
|  | 	 * timeLineItem 时间轴Item | |||
|  | 	 * @description 时间轴组件一般用于物流信息展示,各种跟时间相关的记录等场景。(搭配u-time-line使用) | |||
|  | 	 * @tutorial https://www.uviewui.com/components/timeLine.html
 | |||
|  | 	 * @property {String} bg-color 左边节点的背景颜色,一般通过slot内容自定义背景颜色即可(默认#ffffff) | |||
|  | 	 * @property {String Number} node-top 节点左边图标绝对定位的top值,单位rpx | |||
|  | 	 * @example <u-time-line-item node-top="2">...</u-time-line-item> | |||
|  | 	 */ | |||
|  | 	export default { | |||
|  | 		name: "u-time-line-item", | |||
|  | 		props: { | |||
|  | 			// 节点的背景颜色
 | |||
|  | 			bgColor: { | |||
|  | 				type: String, | |||
|  | 				default: "#ffffff" | |||
|  | 			}, | |||
|  | 			// 节点左边图标绝对定位的top值
 | |||
|  | 			nodeTop: { | |||
|  | 				type: [String, Number], | |||
|  | 				default: "" | |||
|  | 			} | |||
|  | 		}, | |||
|  | 		data() { | |||
|  | 			return { | |||
|  | 
 | |||
|  | 			} | |||
|  | 		}, | |||
|  | 		computed: { | |||
|  | 			nodeStyle() { | |||
|  | 				let style = { | |||
|  | 					backgroundColor: this.bgColor, | |||
|  | 				}; | |||
|  | 				if (this.nodeTop != "") style.top = this.nodeTop + 'rpx'; | |||
|  | 				return style; | |||
|  | 			} | |||
|  | 		} | |||
|  | 	} | |||
|  | </script> | |||
|  | 
 | |||
|  | <style lang="scss" scoped> | |||
|  | 	@import "../../libs/css/style.components.scss"; | |||
|  | 	 | |||
|  | 	.u-time-axis-item { | |||
|  | 		@include vue-flex; | |||
|  | 		flex-direction: column; | |||
|  | 		width: 100%; | |||
|  | 		position: relative; | |||
|  | 		margin-bottom: 32rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.u-time-axis-node { | |||
|  | 		position: absolute; | |||
|  | 		top: 12rpx; | |||
|  | 		left: -40rpx; | |||
|  | 		transform-origin: 0; | |||
|  | 		transform: translateX(-50%); | |||
|  | 		@include vue-flex; | |||
|  | 		align-items: center; | |||
|  | 		justify-content: center; | |||
|  | 		z-index: 1; | |||
|  | 		font-size: 24rpx; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.u-dot { | |||
|  | 		height: 16rpx; | |||
|  | 		width: 16rpx; | |||
|  | 		border-radius: 100rpx; | |||
|  | 		background: #ddd; | |||
|  | 	} | |||
|  | </style> |