feat(shipping): 前端添加48小时撤销限制
- 添加checkCanCancel函数判断是否在48小时内 - 超过48小时不显示撤销发货按钮 - 点击撤销时如超过48小时提示'需要撤销发货请联系客服'
This commit is contained in:
parent
be915a1507
commit
bcbe7a9b29
@ -91,7 +91,7 @@
|
||||
<view class="shipment-status" :class="getStatusClass(item.status)">
|
||||
{{ getStatusText(item.status) }}
|
||||
</view>
|
||||
<text class="shipment-cancel" v-if="Number(item.status) === 1 && item.batch_no" @tap="onCancelShipping(item)">撤销发货</text>
|
||||
<text class="shipment-cancel" v-if="Number(item.status) === 1 && item.batch_no && item.can_cancel" @tap="onCancelShipping(item)">撤销发货</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -411,7 +411,7 @@ async function loadShipments(uid) {
|
||||
const products = s.products || []
|
||||
let productImages = []
|
||||
let productNames = []
|
||||
|
||||
|
||||
// 从 products 数组中提取图片和名称
|
||||
products.forEach(product => {
|
||||
if (product) {
|
||||
@ -422,13 +422,16 @@ async function loadShipments(uid) {
|
||||
productNames.push(product.name || product.title || '商品')
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
// 如果没有获取到任何图片,使用默认图片
|
||||
if (productImages.length === 0) {
|
||||
productImages = ['/static/logo.png']
|
||||
productNames = ['未知商品']
|
||||
}
|
||||
|
||||
|
||||
// 判断是否可以撤销(48小时内且状态为待发货)
|
||||
const canCancel = checkCanCancel(s.status, s.created_at)
|
||||
|
||||
return {
|
||||
batch_no: s.batch_no || '',
|
||||
count: s.count ?? (Array.isArray(s.inventory_ids) ? s.inventory_ids.length : 0),
|
||||
@ -440,7 +443,8 @@ async function loadShipments(uid) {
|
||||
created_at: s.created_at || '',
|
||||
shipped_at: s.shipped_at || '',
|
||||
received_at: s.received_at || '',
|
||||
status: s.status || 1
|
||||
status: s.status || 1,
|
||||
can_cancel: canCancel
|
||||
}
|
||||
})
|
||||
|
||||
@ -692,10 +696,39 @@ async function onShip() {
|
||||
})
|
||||
}
|
||||
|
||||
// 检查是否可以撤销发货(48小时内)
|
||||
function checkCanCancel(status, createdAt) {
|
||||
// 只有待发货状态(status=1)才能撤销
|
||||
if (Number(status) !== 1) {
|
||||
return false
|
||||
}
|
||||
// 没有创建时间,默认允许撤销(兼容旧数据)
|
||||
if (!createdAt) {
|
||||
return true
|
||||
}
|
||||
const created = new Date(createdAt).getTime()
|
||||
const now = Date.now()
|
||||
const diffHours = (now - created) / (1000 * 60 * 60)
|
||||
// 48小时内可以撤销
|
||||
return diffHours <= 48
|
||||
}
|
||||
|
||||
function onCancelShipping(shipment) {
|
||||
const user_id = uni.getStorageSync('user_id')
|
||||
const batchNo = shipment && shipment.batch_no
|
||||
if (!user_id || !batchNo) return
|
||||
|
||||
// 前端再次检查48小时限制
|
||||
if (!checkCanCancel(shipment.status, shipment.created_at)) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '发货申请超过48小时,不允许撤销,需要撤销发货请联系客服',
|
||||
showCancel: false,
|
||||
confirmText: '知道了'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
uni.showModal({
|
||||
title: '撤销发货',
|
||||
content: `确认不再发货,并撤销发货单 ${batchNo} 吗?`,
|
||||
@ -711,7 +744,9 @@ function onCancelShipping(shipment) {
|
||||
shippedList.value = []
|
||||
await loadShipments(user_id)
|
||||
} catch (e) {
|
||||
uni.showToast({ title: e?.message || '取消失败', icon: 'none' })
|
||||
// 后端返回的错误信息可能包含"联系客服"提示
|
||||
const msg = e?.message || '取消失败'
|
||||
uni.showToast({ title: msg, icon: 'none' })
|
||||
} finally {
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user