|
@@ -14,9 +14,19 @@
|
|
|
</view>
|
|
</view>
|
|
|
<!-- 物流轨迹时间线 -->
|
|
<!-- 物流轨迹时间线 -->
|
|
|
<scroll-view class="timeline-container" scroll-y="true">
|
|
<scroll-view class="timeline-container" scroll-y="true">
|
|
|
- <TimelineItem v-for="(item, index) in trackList" :key="index" :title="item.title" :desc="item.desc"
|
|
|
|
|
- :time="item.time" :is-active="item.isActive" :show-line="index < trackList.length - 1"
|
|
|
|
|
- :show-dot-bg="index == 0" />
|
|
|
|
|
|
|
+ <TimelineItem
|
|
|
|
|
+ v-for="(item, index) in deliverTraceList"
|
|
|
|
|
+ :key="index"
|
|
|
|
|
+ :title="item.title"
|
|
|
|
|
+ :desc="item.context"
|
|
|
|
|
+ :time="item.time"
|
|
|
|
|
+ :is-active="item.isActive"
|
|
|
|
|
+ :show-line="index < deliverTraceList.length - 1"
|
|
|
|
|
+ :show-dot-bg="index === 0"
|
|
|
|
|
+ />
|
|
|
|
|
+ <view v-if="deliverTraceList.length === 0 && !loading" class="empty-trace">
|
|
|
|
|
+ 暂无物流轨迹
|
|
|
|
|
+ </view>
|
|
|
</scroll-view>
|
|
</scroll-view>
|
|
|
</view>
|
|
</view>
|
|
|
</u-popup>
|
|
</u-popup>
|
|
@@ -26,15 +36,21 @@
|
|
|
import {
|
|
import {
|
|
|
ref,
|
|
ref,
|
|
|
defineProps,
|
|
defineProps,
|
|
|
- defineEmits
|
|
|
|
|
|
|
+ defineEmits,
|
|
|
|
|
+ watch
|
|
|
} from 'vue'
|
|
} from 'vue'
|
|
|
import TimelineItem from '@/components/TimelineItem.vue'
|
|
import TimelineItem from '@/components/TimelineItem.vue'
|
|
|
|
|
+ import { queryDeliverTrace } from '@/api/order'
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
|
showPopup: {
|
|
showPopup: {
|
|
|
type: Boolean,
|
|
type: Boolean,
|
|
|
default: false
|
|
default: false
|
|
|
},
|
|
},
|
|
|
|
|
+ orderNo:{
|
|
|
|
|
+ type: String,
|
|
|
|
|
+ default: ""
|
|
|
|
|
+ }
|
|
|
expressData: {
|
|
expressData: {
|
|
|
type: Object,
|
|
type: Object,
|
|
|
default: () => ({
|
|
default: () => ({
|
|
@@ -48,49 +64,44 @@
|
|
|
const emit = defineEmits(['update:showPopup', 'close'])
|
|
const emit = defineEmits(['update:showPopup', 'close'])
|
|
|
|
|
|
|
|
// 模拟物流轨迹数据,实际应用中应该通过API获取
|
|
// 模拟物流轨迹数据,实际应用中应该通过API获取
|
|
|
- const trackList = ref([{
|
|
|
|
|
- title: '已代收',
|
|
|
|
|
- desc: '快件已投递至【北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿...】',
|
|
|
|
|
- time: '2026-01-11 17:32:32',
|
|
|
|
|
- isActive: true
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- title: '派送中',
|
|
|
|
|
- desc: '快件已投递至【北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿...】',
|
|
|
|
|
- time: '2026-01-11 17:32:32',
|
|
|
|
|
- isActive: false
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- title: '运输中',
|
|
|
|
|
- desc: '快件已投递至【北京海淀区北京大学菜鸟驿.北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿..】',
|
|
|
|
|
- time: '2026-01-11 17:32:32',
|
|
|
|
|
- isActive: false
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- title: '',
|
|
|
|
|
- desc: '快件已投递至【北京海淀区北京大学菜鸟驿.北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿..】',
|
|
|
|
|
- time: '2026-01-11 17:32:32',
|
|
|
|
|
- isActive: false
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- title: '',
|
|
|
|
|
- desc: '快件已投递至【北京海淀区北京大学菜鸟驿.北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿..】',
|
|
|
|
|
- time: '2026-01-11 17:32:32',
|
|
|
|
|
- isActive: false
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- title: '',
|
|
|
|
|
- desc: '快件已投递至【北京海淀区北京大学菜鸟驿.北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿北京海淀区北京大学菜鸟驿..】',
|
|
|
|
|
- time: '2026-01-11 17:32:32',
|
|
|
|
|
- isActive: false
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- title: '已揽件',
|
|
|
|
|
- desc: '快件已投递至【北京海淀区北京大学菜鸟驿..北京海淀区北京大学菜鸟驿.】',
|
|
|
|
|
- time: '2026-01-11 17:32:32',
|
|
|
|
|
- isActive: false
|
|
|
|
|
|
|
+ const trackList = ref([])
|
|
|
|
|
+
|
|
|
|
|
+ watch( showPopup,(olddata,newData) => {
|
|
|
|
|
+ if(showPopup){
|
|
|
|
|
+ getDeliverTrace()
|
|
|
}
|
|
}
|
|
|
- ])
|
|
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ // 获取真实物流轨迹
|
|
|
|
|
+ const getDeliverTrace = () => {
|
|
|
|
|
+ if (!props.orderNo) return
|
|
|
|
|
+ loading.value = true
|
|
|
|
|
+ const params = {
|
|
|
|
|
+ number: props.orderNo,
|
|
|
|
|
+ company: '' // 可传入快递公司编码
|
|
|
|
|
+ }
|
|
|
|
|
+ queryDeliverTrace(params).then(response => {
|
|
|
|
|
+ if (response.code === 200 && response.data) {
|
|
|
|
|
+ // 按时间倒序排列(最新的在前)
|
|
|
|
|
+ const list = response.data.data.map((item, index) => ({
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ isActive: index === 0
|
|
|
|
|
+ }))
|
|
|
|
|
+ deliverTraceList.value = list
|
|
|
|
|
+ } else {
|
|
|
|
|
+ uni.showToast({ title: '未查询到物流信息', icon: 'none' })
|
|
|
|
|
+ deliverTraceList.value = []
|
|
|
|
|
+ }
|
|
|
|
|
+ }).catch(error => {
|
|
|
|
|
+ console.error('查询物流轨迹失败:', error)
|
|
|
|
|
+ uni.showToast({ title: '查询物流信息失败', icon: 'error' })
|
|
|
|
|
+ deliverTraceList.value = []
|
|
|
|
|
+ }).finally(() => {
|
|
|
|
|
+ loading.value = false
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
const closePopup = () => {
|
|
const closePopup = () => {
|
|
|
emit('update:showPopup', false)
|
|
emit('update:showPopup', false)
|