175 lines
4.8 KiB
Vue
175 lines
4.8 KiB
Vue
|
<!-- 物流追踪 -->
|
|||
|
<template>
|
|||
|
<s-layout title="物流追踪">
|
|||
|
<view class="log-wrap">
|
|||
|
<view class="log-card ss-flex" v-if="goodsImages.length > 0">
|
|||
|
<uni-swiper-dot :info="goodsImages" :current="state.current" mode="round">
|
|||
|
<swiper class="swiper-box" @change="change">
|
|||
|
<swiper-item v-for="(item, index) in goodsImages" :key="index">
|
|||
|
<image class="log-card-img" :src="sheep.$url.static(item.image)"></image>
|
|||
|
</swiper-item>
|
|||
|
</swiper>
|
|||
|
</uni-swiper-dot>
|
|||
|
|
|||
|
<view class="log-card-msg">
|
|||
|
<view class="ss-flex ss-m-b-8">
|
|||
|
<view>物流状态:</view>
|
|||
|
<view class="warning-color">{{ state.info.status_text }}</view>
|
|||
|
</view>
|
|||
|
<view class="ss-m-b-8">快递单号:{{ state.info.express_no }}</view>
|
|||
|
<view>快递公司:{{ state.info.express_name }}</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="log-content">
|
|||
|
<view
|
|||
|
class="log-content-box ss-flex"
|
|||
|
v-for="(item, index) in state.info.logs"
|
|||
|
:key="item.title"
|
|||
|
>
|
|||
|
<view class="log-icon ss-flex-col ss-col-center ss-m-r-20">
|
|||
|
<text
|
|||
|
v-if="state.info.logs[index].status === state.info.logs[index - 1]?.status"
|
|||
|
class="cicon-title"
|
|||
|
></text>
|
|||
|
<text
|
|||
|
v-if="state.info.logs[index].status != state.info.logs[index - 1]?.status"
|
|||
|
:class="[
|
|||
|
index === 0 ? 'activity-color' : 'info-color',
|
|||
|
item.status === 'transport'
|
|||
|
? 'sicon-transport'
|
|||
|
: item.status === 'delivery'
|
|||
|
? 'sicon-delivery'
|
|||
|
: item.status === 'collect'
|
|||
|
? 'sicon-a-collectmaterials'
|
|||
|
: item.status === 'fail' || item.status === 'back' || item.status === 'refuse'
|
|||
|
? 'sicon-circleclose'
|
|||
|
: item.status === 'signfor'
|
|||
|
? 'sicon-circlecheck'
|
|||
|
: 'sicon-warning-outline',
|
|||
|
]"
|
|||
|
></text>
|
|||
|
<view v-if="state.info.logs.length - 1 != index" class="line"></view>
|
|||
|
</view>
|
|||
|
<view class="log-content-msg">
|
|||
|
<view
|
|||
|
v-if="
|
|||
|
item.status_text &&
|
|||
|
state.info.logs[index].status != state.info.logs[index - 1]?.status
|
|||
|
"
|
|||
|
class="log-msg-title ss-m-b-20"
|
|||
|
>{{ item.status_text }}</view
|
|||
|
>
|
|||
|
<view class="log-msg-desc ss-m-b-16">{{ item.content }}</view>
|
|||
|
<view class="log-msg-date ss-m-b-40">{{ item.change_date }}</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</s-layout>
|
|||
|
</template>
|
|||
|
|
|||
|
<script setup>
|
|||
|
import sheep from '@/sheep';
|
|||
|
import { onLoad } from '@dcloudio/uni-app';
|
|||
|
import { computed, reactive } from 'vue';
|
|||
|
|
|||
|
const state = reactive({
|
|||
|
info: [],
|
|||
|
current: 0,
|
|||
|
});
|
|||
|
const goodsImages = computed(() => {
|
|||
|
let array = [];
|
|||
|
if (state.info.items) {
|
|||
|
state.info.items.forEach((item) => {
|
|||
|
array.push({
|
|||
|
image: item.goods_image,
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
return array;
|
|||
|
});
|
|||
|
function change(e) {
|
|||
|
state.current = e.detail.current;
|
|||
|
}
|
|||
|
async function getExpressdetail(id, orderId) {
|
|||
|
const { data } = await sheep.$api.order.express(id, orderId);
|
|||
|
state.info = data;
|
|||
|
}
|
|||
|
onLoad((Option) => {
|
|||
|
getExpressdetail(Option.id, Option.orderId);
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
.swiper-box {
|
|||
|
width: 200rpx;
|
|||
|
height: 200rpx;
|
|||
|
}
|
|||
|
.log-card {
|
|||
|
border-top: 2rpx solid rgba(#dfdfdf, 0.5);
|
|||
|
padding: 20rpx;
|
|||
|
background: #fff;
|
|||
|
margin-bottom: 20rpx;
|
|||
|
.log-card-img {
|
|||
|
width: 200rpx;
|
|||
|
height: 200rpx;
|
|||
|
margin-right: 20rpx;
|
|||
|
}
|
|||
|
.log-card-msg {
|
|||
|
font-size: 28rpx;
|
|||
|
font-weight: 500;
|
|||
|
width: 490rpx;
|
|||
|
color: #333333;
|
|||
|
.warning-color {
|
|||
|
color: #999;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
.log-content {
|
|||
|
padding: 34rpx 20rpx 0rpx 20rpx;
|
|||
|
background: #fff;
|
|||
|
.log-content-box {
|
|||
|
align-items: stretch;
|
|||
|
}
|
|||
|
.log-icon {
|
|||
|
height: inherit;
|
|||
|
.cicon-title {
|
|||
|
color: #ccc;
|
|||
|
font-size: 40rpx;
|
|||
|
}
|
|||
|
.activity-color {
|
|||
|
color: #f0c785;
|
|||
|
font-size: 40rpx;
|
|||
|
}
|
|||
|
.info-color {
|
|||
|
color: #ccc;
|
|||
|
font-size: 40rpx;
|
|||
|
}
|
|||
|
.line {
|
|||
|
width: 1px;
|
|||
|
height: 100%;
|
|||
|
background: #d8d8d8;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.log-content-msg {
|
|||
|
.log-msg-title {
|
|||
|
font-size: 28rpx;
|
|||
|
font-weight: bold;
|
|||
|
color: #333333;
|
|||
|
}
|
|||
|
.log-msg-desc {
|
|||
|
font-size: 24rpx;
|
|||
|
font-weight: 400;
|
|||
|
color: #333333;
|
|||
|
line-height: 36rpx;
|
|||
|
}
|
|||
|
.log-msg-date {
|
|||
|
font-size: 24rpx;
|
|||
|
font-weight: 500;
|
|||
|
color: #999999;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|