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>
 |