CNCEC_APP/uni_modules/uview-pro/components/u-time-line-item/u-time-line-item.vue

90 lines
2.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="u-time-axis-item" :class="customClass" :style="$u.toStyle(customStyle)">
<slot name="content" />
<view class="u-time-axis-node" :style="[nodeStyle]">
<slot name="node">
<view class="u-dot"> </view>
</slot>
</view>
</view>
</template>
<script lang="ts">
export default {
name: 'u-time-line-item',
options: {
addGlobalClass: true,
// #ifndef MP-TOUTIAO
virtualHost: true,
// #endif
styleIsolation: 'shared'
}
};
</script>
<script setup lang="ts">
import { computed } from 'vue';
import { TimeLineItemProps } from './types';
import { $u } from '../../';
/**
* timeLineItem 时间轴Item
* @description 时间轴组件一般用于物流信息展示,各种跟时间相关的记录等场景。(搭配u-time-line使用)
* @tutorial https://uviewpro.cn/zh/components/timeLine.html
* @property {String} bg-color 左边节点的背景颜色一般通过slot内容自定义背景颜色即可默认var(--u-bg-white)
* @property {String | Number} node-top 节点左边图标绝对定位的top值单位rpx
* @example <u-time-line-item node-top="2">...</u-time-line-item>
*/
/**
* 节点的背景颜色
*/
const props = defineProps(TimeLineItemProps);
/**
* 计算节点样式
* @returns 节点样式对象
*/
const nodeStyle = computed(() => {
// 生成节点样式对象
const style: Record<string, string> = {
backgroundColor: props.bgColor
};
// 如果设置了 nodeTop则添加 top 属性
if (props.nodeTop !== '') style.top = String(props.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: var(--u-divider-color);
}
</style>