hookehuyr

refactor(订单管理): 提取通用订单状态更新函数并重构相关逻辑

将订单状态更新逻辑提取为通用函数updateOrderStatus
重构支付成功、评价提交、确认收货等操作使用新函数
修复确认收货时使用错误订单ID的问题
<!--
* @Date: 2022-09-19 14:11:06
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-08-08 17:38:16
* @LastEditTime: 2025-08-09 18:33:54
* @FilePath: /jgdl/src/pages/myOrders/index.vue
* @Description: 订单管理页面
-->
......@@ -928,6 +928,37 @@ const clearAllCountdowns = () => {
}
/**
* 通用的订单状态更新函数
* @param {string} orderId - 订单ID
* @param {number} newStatus - 新的订单状态
* @param {Object} additionalData - 额外需要更新的数据
* @param {string} viewModeOverride - 可选的buy/sell视图模式覆盖
*/
const updateOrderStatus = async (orderId, newStatus, additionalData = {}, viewModeOverride = null) => {
const targetViewMode = viewModeOverride || viewMode.value
const orders = targetViewMode === 'buy' ? boughtOrders.value : targetViewMode === 'verification' ? verificationOrders.value : soldOrders.value
const targetOrderIndex = orders.findIndex(o => o.id === orderId)
if (targetOrderIndex !== -1) {
// 创建新的订单对象来触发响应式更新
const updatedOrder = {
...orders[targetOrderIndex],
status: newStatus,
...additionalData
}
// 替换数组中的订单对象
orders.splice(targetOrderIndex, 1, updatedOrder)
// 使用nextTick确保DOM更新
await nextTick()
return updatedOrder
}
return null
}
/**
* 处理支付
*/
const handlePayment = ({ id, total_amount, remain_time }) => {
......@@ -964,15 +995,11 @@ const onPayClose = () => {
* @param {Object} data - 支付成功数据
* @param {string} data.orderId - 订单ID
*/
const onPaySuccess = ({ orderId }) => {
// 找到对应的订单并更新状态
const orders = viewMode.value === 'buy' ? boughtOrders.value : viewMode.value === 'verification' ? verificationOrders.value : soldOrders.value
const order = orders.find(o => o.id === orderId)
if (order) {
// 更新订单状态为已完成
order.status = 5
const onPaySuccess = async ({ orderId }) => {
// 更新订单状态为已支付
const updatedOrder = await updateOrderStatus(orderId, 5)
if (updatedOrder) {
Taro.showToast({
title: '支付成功,订单已更新',
icon: 'success',
......@@ -1068,26 +1095,31 @@ const submitRate = async () => {
})
if (response.code) {
// API提交成功后的处理
const currentOrders = viewMode.value === 'buy' ? boughtOrders : viewMode.value === 'verification' ? verificationOrders : soldOrders
const order = currentOrders.value.find(o => o.id === currentRateOrder.value.id)
if (order) {
// 创建评价数据对象
const reviewData = {
rating: rateScore.value,
note: rateContent.value,
created_time: new Date().toLocaleString('zh-CN')
}
// 创建评价数据对象
const reviewData = {
rating: rateScore.value,
note: rateContent.value,
created_time: new Date().toLocaleString('zh-CN')
}
// 同时更新order.review和order.details.review,确保状态一致
order.review = reviewData
if (order.details) {
order.details.review = reviewData
}
// 准备额外的更新数据
const additionalData = {
review: reviewData
}
// 确保订单状态为已完成
order.status = 11
// 如果订单有details,也需要更新details.review
const currentOrders = viewMode.value === 'buy' ? boughtOrders : viewMode.value === 'verification' ? verificationOrders : soldOrders
const existingOrder = currentOrders.value.find(o => o.id === currentRateOrder.value.id)
if (existingOrder && existingOrder.details) {
additionalData.details = {
...existingOrder.details,
review: reviewData
}
}
// 使用通用函数更新订单状态
await updateOrderStatus(currentRateOrder.value.id, 11, additionalData)
Taro.showToast({
title: response.msg || '评价提交成功',
icon: 'success',
......@@ -1296,7 +1328,7 @@ const performConfirmReceive = async (orderId) => {
businessType: 'weappOrderConfirm',
extraData: {
merchant_id: order.merchant_id || '',
merchant_trade_no: order.id,
merchant_trade_no: order.merchant_trade_no,
transaction_id: order.transaction_id || ''
},
success() {
......@@ -1366,13 +1398,9 @@ const performConfirmShip = async (orderId) => {
if (response.code) {
// API发货成功后的处理
const orders = viewMode.value === 'buy' ? boughtOrders : viewMode.value === 'verification' ? verificationOrders : soldOrders
const order = orders.value.find(o => o.id === orderId)
if (order) {
// 更新订单状态为待收货
order.status = 9
const updatedOrder = await updateOrderStatus(orderId, 9)
if (updatedOrder) {
Taro.showToast({
title: response.msg || '发货成功',
icon: 'success',
......@@ -1451,31 +1479,26 @@ const performDeleteOrder = async (orderId) => {
* @param {Object} data - 事件数据
*/
const handleConfirmReceiveSuccess = async ({ merchantId, transactionId, merchantTradeNo }) => {
const orders = boughtOrders.value
const order = orders.find(o => o.id === merchantTradeNo)
if (order) {
try {
// 调用买家查询收货状态接口
const response = await receiptOrderStatusAPI({ order_id: merchantTradeNo })
try {
// 调用买家查询收货状态接口
const response = await receiptOrderStatusAPI({ order_id: transactionId })
if (response.code && response.data && response.data.status === 11) {
// 接口返回状态为11,确认收货成功
order.status = 11 // 更新为已完成状态
if (response.code && response.data && response.data.status === 11) {
// 接口返回状态为11,确认收货成功
await updateOrderStatus(transactionId, 11, {}, 'buy')
Taro.showToast({
title: '确认收货成功',
icon: 'success',
duration: 2000
})
} else {
// 状态不是11,可能还在处理中
// 可以根据需要添加其他处理逻辑
}
} catch (error) {
// 查询收货状态失败,即使接口调用失败,也更新本地状态
order.status = 11
Taro.showToast({
title: '确认收货成功',
icon: 'success',
duration: 2000
})
} else {
// 状态不是11,可能还在处理中
// 可以根据需要添加其他处理逻辑
}
} catch (error) {
// 查询收货状态失败,即使接口调用失败,也更新本地状态
await updateOrderStatus(transactionId, 11, {}, 'buy')
}
}
......