You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
high-mini/components/trackNode/trackNode.vue

207 lines
5.8 KiB

2 years ago
<template>
<view class="total-wrap" :style="{marginTop: isMainNode?'22rpx':'6rpx'}">
<view class="node-container">
<view class="node-container-left">
<view class="tag-container">
<image class="height100 width100" v-if="isMainNode" :src="nodeIconUrl"/>
<view v-else class="node-tag-container">
<view class="node-tag"></view>
</view>
</view>
<view class="line-container" :style="{height: isMainNode?'142rpx':'88rpx', paddingTop: isMainNode?'22rpx':'8rpx'}">
<view v-if="!isFirst" class="line" :style="{height: isMainNode?'120rpx':'80rpx'}"></view>
</view>
</view>
<view class="node-container-right" :style="{paddingTop: isMainNode?'0':'8rpx'}">
<view v-if="isMainNode" class="node-title " :style="{color: isNewest?'#222':'#999'}">
<text>{{nodeData.areaName}}</text>
</view>
<view class="node-desc" :style="{color: isNewest?'#4b4b4b':'#999', marginTop: isMainNode?'10rpx':'0'}">{{acceptStationFixed}}</view>
<view v-if="nodeData.phone" class="node-phone">{{nodeData.phone}}</view>
<view class="node-time">{{nodeData.time | formatDate }}</view>
</view>
</view>
</view>
<!--
isNewest Boolean 是否是最新时间节点
isFirst Boolean 是否是第一项第一项不展示竖线
isMainNode Boolean 是否是每种状态下的主节点主节点显示图标非主节点显示圆点
nodeData Object 每项数据
-->
</template>
<script>
export default {
props: {
isNewest: {
type: Boolean,
default: false
},
isFirst: {
type: Boolean,
default: false
},
isMainNode: {
type: Boolean,
default: false
},
isShowDetail:{
type: Boolean,
default: false
},
nodeData: {
type: Object,
default () {
return {
status: '',
statusName: '',
createTime: '2023-01-01 00:00:00',
acceptStation: 'xxxxxx'
}
}
}
},
computed: {
nodeIconUrl () {
if (this.nodeData.logisticsStatus === 'WAIT_ACCEPT') { // 待揽收
return this.isNewest ? '../../static/img/wuliu/ic-paied.png' : '../../static/img/wuliu/ic-paied-G.png'
} else if (this.nodeData.logisticsStatus === 'ACCEPT') { // 已揽收
return this.isNewest ? '../../static/img/wuliu/ic-pacakaging.png' : '../../static/img/wuliu/ic-pacakaging-G.png'
} else if (this.nodeData.logisticsStatus === 'DELIVERING') { // 派件中
return this.isNewest ? '../../static/img/wuliu/ic-sending.png' : '../../static/img/wuliu/ic-sending-G.png'
} else if (this.nodeData.logisticsStatus === 'SIGN'|| this.nodeData.logisticsStatus === 'AGENT_SIGN') { // 已签收,已待签收
return this.isNewest ? '../../static/img/wuliu/ic-delivering.png' : '../../static/img/wuliu/ic-delivering-G.png'
}else if (this.nodeData.logisticsStatus === 'FAILED') { // 包裹异常
return this.isNewest ? '../../static/img/wuliu/ic-package-failed.png' : '../../static/img/wuliu/ic-package-failed-G.png'
}
},
acceptStationFixed () {
if (!this.nodeData.desc) return ''
return this.nodeData.desc
}
},
methods:{
},
filters:{
formatDate(value, spe = '/') {
let data = new Date(value);
let year = data.getFullYear();
let month = data.getMonth() + 1;
let day = data.getDate();
let h = data.getHours();
let mm = data.getMinutes();
let s = data.getSeconds();
month = month >= 10 ? month : "0" + month;
day = day >= 10 ? day : "0" + day;
h = h >= 10 ? h : "0" + h;
mm = mm >= 10 ? mm : "0" + mm;
s = s >= 10 ? s : "0" + s;
return `${year}${spe}${month}${spe}${day} ${h}:${mm}:${s}`;
},
}
}
</script>
<style lang="scss" scoped>
.dis-fx{
display: flex;
justify-content: space-between;
align-items: center;
}
.ft{
font-size: 16px;
}
.total-wrap {
margin-top: 22rpx;
width: 100%;
.node-container {
width: 100%;
height: auto;
display: flex;
&-left {
width: 44rpx;
height: auto;
.tag-container {
width: 44rpx;
height: 44rpx;
img {
width: 44rpx;
height: 44rpx;
}
.node-tag-container {
width: 44rpx;
height: 44rpx;
display: flex;
justify-content: center;
align-items: center;
.node-tag {
width: 14rpx;
height: 14rpx;
background-color: #dcdcdc;
border-radius: 50%;
}
}
}
.line-container {
box-sizing: border-box;
width: 44rpx;
display: flex;
align-items: center;
justify-content: center;
.line {
width: 2rpx;
background-color: #dcdcdc;
}
}
}
&-right {
flex: 1;
box-sizing: border-box;
padding: 0 10rpx 0 24rpx;
.node-title {
width: 100%;
height: 40rpx;
line-height: 44rpx;
color: #222;
font-size: 28rpx;
font-family: 'PingFangSC-Medium';
}
.node-desc {
margin-top: 16rpx;
width: 100%;
min-height: 30rpx;
line-height: 30rpx;
color: #222;
font-size: 24rpx;
font-family: 'PingFangSC-Regular';
word-wrap: break-word;
word-break: normal;
}
.node-phone {
margin-top: 8rpx;
width: 100%;
height: 26rpx;
line-height: 26rpx;
color: #FE4E2C;
font-size: 26rpx;
font-family: 'Avenir-Medium';
}
.node-time {
margin-top: 12rpx;
width: 100%;
height: 34rpx;
line-height: 34rpx;
color: #999;
font-size: 24rpx;
font-family: 'Avenir-Book';
}
}
}
}
</style>