Files
ai_dianshang/miniprogram/pages/order/delivery-detail/index.js
2025-11-17 14:11:46 +08:00

179 lines
4.7 KiB
JavaScript
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.

import { getLogisticsInfo, refreshLogisticsInfo } from './api';
import Toast from 'tdesign-miniprogram/toast/index';
Page({
data: {
logisticsData: {
logisticsNo: '',
nodes: [],
company: '',
phoneNumber: '',
},
active: 0,
loading: false,
refreshing: false,
// 存储查询参数,用于刷新
queryParams: null,
},
onLoad(query) {
console.log('[物流详情] 页面加载', { query });
let data;
try {
data = JSON.parse(decodeURIComponent(query.data || '{}'));
} catch (e) {
console.warn('物流节点数据解析失败', e);
}
// 如果是从售后页面跳转过来的source=2
if (Number(query.source) === 2) {
const service = {
company: data.logisticsCompanyName,
logisticsNo: data.logisticsNo,
nodes: data.nodes,
phoneNumber: data.phoneNumber,
};
this.setData({
logisticsData: service,
queryParams: {
logisticsNo: data.logisticsNo,
logisticsCompanyCode: data.logisticsCompanyCode,
rightsNo: query.rightsNo,
orderNo: query.orderNo
}
});
// 如果有物流单号,尝试获取最新的物流信息
if (data.logisticsNo) {
this.fetchLogisticsInfo();
}
} else if (data) {
// 直接传入的物流数据
this.setData({
logisticsData: data,
queryParams: {
logisticsNo: data.logisticsNo,
logisticsCompanyCode: data.logisticsCompanyCode,
orderNo: query.orderNo
}
});
// 如果有物流单号,尝试获取最新的物流信息
if (data.logisticsNo) {
this.fetchLogisticsInfo();
}
} else if (query.logisticsNo) {
// 直接传入物流单号
this.setData({
queryParams: {
logisticsNo: query.logisticsNo,
logisticsCompanyCode: query.logisticsCompanyCode,
orderNo: query.orderNo,
rightsNo: query.rightsNo
}
});
this.fetchLogisticsInfo();
}
},
// 获取物流信息
async fetchLogisticsInfo() {
if (!this.data.queryParams?.logisticsNo) {
console.warn('[物流详情] 缺少物流单号,无法获取物流信息');
return;
}
this.setData({ loading: true });
try {
console.log('[物流详情] 开始获取物流信息', this.data.queryParams);
const res = await getLogisticsInfo(this.data.queryParams);
if (res.success && res.data) {
console.log('[物流详情] 物流信息获取成功', res.data);
this.setData({
logisticsData: {
logisticsNo: res.data.logisticsNo,
company: res.data.company,
phoneNumber: res.data.phoneNumber,
nodes: res.data.nodes || []
},
active: 0 // 默认激活第一个节点
});
}
} catch (error) {
console.error('[物流详情] 获取物流信息失败', error);
Toast({
context: this,
selector: '#t-toast',
message: error.message || '获取物流信息失败',
icon: 'error-circle',
});
} finally {
this.setData({ loading: false });
}
},
// 刷新物流信息
async onRefresh() {
if (!this.data.queryParams?.logisticsNo) {
Toast({
context: this,
selector: '#t-toast',
message: '无法刷新,缺少物流单号',
icon: 'error-circle',
});
return;
}
this.setData({ refreshing: true });
try {
console.log('[物流详情] 开始刷新物流信息', this.data.queryParams);
const res = await refreshLogisticsInfo(this.data.queryParams);
if (res.success && res.data) {
console.log('[物流详情] 物流信息刷新成功', res.data);
this.setData({
logisticsData: {
logisticsNo: res.data.logisticsNo,
company: res.data.company,
phoneNumber: res.data.phoneNumber,
nodes: res.data.nodes || []
},
active: 0
});
Toast({
context: this,
selector: '#t-toast',
message: '刷新成功',
icon: 'check-circle',
});
}
} catch (error) {
console.error('[物流详情] 刷新物流信息失败', error);
Toast({
context: this,
selector: '#t-toast',
message: error.message || '刷新失败',
icon: 'error-circle',
});
} finally {
this.setData({ refreshing: false });
}
},
onLogisticsNoCopy() {
wx.setClipboardData({ data: this.data.logisticsData.logisticsNo });
},
onCall() {
const { phoneNumber } = this.data.logisticsData;
wx.makePhoneCall({
phoneNumber,
});
},
});