diff --git a/pages/mine/msgTips/packageMsg/index.vue b/pages/mine/msgTips/packageMsg/index.vue index 7b0067a..260c48b 100644 --- a/pages/mine/msgTips/packageMsg/index.vue +++ b/pages/mine/msgTips/packageMsg/index.vue @@ -6,7 +6,7 @@
{{ formatSendTime(row.send_time) }}
- - - - {{ logisticsInfo.shipper }}快递 {{ logisticsInfo.logisticCode }} - - - - - - - - - - - + + diff --git a/pages/order/deliverDetail.vue b/pages/order/deliverDetail.vue index e4d61f2..3ee8c97 100644 --- a/pages/order/deliverDetail.vue +++ b/pages/order/deliverDetail.vue @@ -1,238 +1,310 @@ - + \ No newline at end of file + +.empty { + padding: 40rpx 0; +} + diff --git a/pages/order/orderDetail.vue b/pages/order/orderDetail.vue index 8f7728b..3ad41e8 100644 --- a/pages/order/orderDetail.vue +++ b/pages/order/orderDetail.vue @@ -8,26 +8,24 @@ - - - + + 券码: {{ order.orderStatus == 'CANCELLED' ? '已失效' : order.verificationCode }} - - - 当前订单有 {{ orderPackage.length }} 个包裹快递 - -
- 点击此处查看 -
-
- - {{ '暂无物流信息' }} + + {{ deliveryEntryText }} +
点击此处查看
+
+ + 等待商家发货
-
@@ -131,7 +129,7 @@ 取消订单 - 查看物流 + 查看物流 查看拼团信息 立即付款 确认收货 store.getters.lightColor) @@ -279,7 +282,6 @@ const orderStatusMap: Record = { TAKE: { title: '待核验' }, } -const logisticsList = ref('') const shareFlag = ref(false) const order = ref>({}) const cancelShow = ref(false) @@ -290,7 +292,28 @@ const sn = ref('') const cancelList = ref([]) const rogShow = ref(false) const reason = ref('') -const orderPackage = ref('') +const orderPackage = ref([]) +const legacyTraces = ref(null) + +const allowOperation = computed(() => + getOrderAllowOperation(order.value, orderDetail.value) +) + +const showDeliveryInfoBlock = computed(() => { + if (order.value.orderType === 'VIRTUAL') return false + if (order.value.deliveryMethod === 'SELF_PICK_UP') return false + if (order.value.verificationCode) return true + if (order.value.deliveryMethod === 'LOGISTICS') return true + return false +}) + +const deliveryEntryText = computed(() => + getDeliveryEntryText( + orderPackage.value, + order.value.orderStatus, + legacyTraces.value + ) +) function hideLoadingIfNeeded() { if (store.state.isShowToast) uni.hideLoading() @@ -302,12 +325,27 @@ onLoad((options) => { loadData(orderSnParam) }) -function getOrderPackage() { - getPackage(order.value.sn).then((res) => { - if (res.data.success) { - orderPackage.value = res.data.result +async function loadDelivery(orderData: Record) { + orderPackage.value = [] + legacyTraces.value = null + + if (!shouldLoadDelivery(orderData)) { + return + } + + try { + const packageResponse = await getPackage(orderData.sn) + const packages = packageResponse?.data?.result || [] + if (packages.length) { + orderPackage.value = packages + return } - }) + + const traceResponse = await getExpress(orderData.sn) + legacyTraces.value = traceResponse?.data?.result || null + } catch { + // 配送信息加载失败时不阻断订单详情展示 + } } function handleClickDeliver() { @@ -347,12 +385,6 @@ function goToShopPage(val: any) { }) } -function loadLogistics(orderSnParam: string) { - getExpress(orderSnParam).then((res) => { - logisticsList.value = res.data.result - }) -} - function inviteGroup() { shareFlag.value = true } @@ -371,15 +403,15 @@ function ByUserMessage(orderItem: any) { function loadData(orderSnParam: string) { uni.showLoading({ title: '加载中' }) - getOrderDetail(orderSnParam).then((res) => { + getOrderDetail(orderSnParam).then(async (res) => { const result = res.data.result order.value = result.order orderGoodsList.value = result.orderItems orderDetail.value = result - if (order.value.deliveryMethod === 'LOGISTICS') { - loadLogistics(orderSnParam) - getOrderPackage() + if (!order.value.allowOperationVO && result.allowOperationVO) { + order.value.allowOperationVO = result.allowOperationVO } + await loadDelivery(order.value) hideLoadingIfNeeded() }) } @@ -482,18 +514,6 @@ function onComment(_orderSnText: string) { }) } -function onLogistics(orderItem: any) { - uni.navigateTo({ - url: - '/pages/mine/msgTips/packageMsg/logisticsDetail?logi_id=' + - orderItem.logi_id + - '&ship_no=' + - orderItem.ship_no + - '&order_sn=' + - orderItem.sn, - }) -} - function reasonChange(val: string) { reason.value = val } diff --git a/utils/orderDelivery.js b/utils/orderDelivery.js new file mode 100644 index 0000000..9ba1f0b --- /dev/null +++ b/utils/orderDelivery.js @@ -0,0 +1,47 @@ +/** + * 订单配送展示工具(整单 / 拆单 / 无需配送) + */ + +export function shouldLoadDelivery(order) { + return ( + order?.deliveryMethod === 'LOGISTICS' && + order?.allowOperationVO?.showLogistics === true + ) +} + +export function isNoDelivery(packageItem) { + return ( + packageItem?.fulfillmentMode === 'NO_DELIVERY' || + packageItem?.logisticsRequired === false + ) +} + +export function getPackageTitle(packageItem, index) { + if (isNoDelivery(packageItem)) return '无需配送' + if (packageItem?.fulfillmentMode === 'WHOLE') return '整单发货' + if (packageItem?.fulfillmentMode === 'SPLIT') return `包裹 ${index + 1}` + return `包裹 ${index + 1}` +} + +export function getDeliveryEntryText(packages, orderStatus, legacyTraces) { + if (packages?.length) { + const allNoDelivery = packages.every(isNoDelivery) + if (allNoDelivery) return '查看配送说明' + if (orderStatus === 'PARTS_DELIVERED') { + return `已发出 ${packages.length} 个包裹,剩余商品待发货` + } + return `共 ${packages.length} 个配送包裹` + } + + const traces = legacyTraces?.traces + if (Array.isArray(traces) && traces.length) { + const latest = traces[0] + return latest?.AcceptStation || '商家已发货,物流信息同步中' + } + + return '商家已发货,物流信息同步中' +} + +export function getOrderAllowOperation(order, orderDetail) { + return order?.allowOperationVO || orderDetail?.allowOperationVO || {} +}