hookehuyr

feat(orders): 添加确认收货功能并更新订单状态

实现买家确认收货功能,替换原有的微信组件调用方式
新增RECEIVE_ORDER接口用于处理确认收货请求
更新订单状态为已完成(11)并显示成功提示
/*
* @Date: 2025-07-03 17:21:45
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-08-04 15:24:12
* @LastEditTime: 2025-08-06 13:56:19
* @FilePath: /jgdl/src/api/orders.js
* @Description: 文件描述
*/
......@@ -15,6 +15,7 @@ const Api = {
DELETE_ORDER: '/srv/?a=order&t=del',
CANCEL_ORDER: '/srv/?a=order&t=cancel',
SHIP_ORDER: '/srv/?a=order&t=ship',
RECEIVE_ORDER: '/srv/?a=order&t=receive',
RECEIPT_ORDER_STATUS: '/srv/?a=order&t=receipt_status',
}
......@@ -80,3 +81,10 @@ export const shipOrderAPI = (params) => fn(fetch.post(Api.SHIP_ORDER, params));
* @returns data{ status 3=待支付, 5=已支付待发货, 7=已取消, 9=已发货/待收货, 11=已收货 }
*/
export const receiptOrderStatusAPI = (params) => fn(fetch.get(Api.RECEIPT_ORDER_STATUS, params));
/**
* @description: 确认收货订单
* @param order_id 订单ID
* @returns data{}
*/
export const receiveOrderAPI = (params) => fn(fetch.post(Api.RECEIVE_ORDER, params));
......
<!--
* @Date: 2022-09-19 14:11:06
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-08-04 18:04:34
* @LastEditTime: 2025-08-06 14:03:17
* @FilePath: /jgdl/src/pages/myOrders/index.vue
* @Description: 订单管理页面
-->
......@@ -17,7 +17,8 @@
<view class="toggle-option" :class="{ active: viewMode === 'sell' }" @click="setViewMode('sell')">
我卖的车
</view>
<view class="toggle-option" :class="{ active: viewMode === 'verification' }" @click="setViewMode('verification')">
<view class="toggle-option" :class="{ active: viewMode === 'verification' }"
@click="setViewMode('verification')">
我的认证
</view>
</view>
......@@ -28,22 +29,28 @@
<view class="tab-item" :class="{ active: activeTab === '' }" @click="setActiveTab('')">
全部
</view>
<view v-if="viewMode === 'buy' || viewMode === 'verification'" class="tab-item" :class="{ active: activeTab === 3 }" @click="setActiveTab(3)">
<view v-if="viewMode === 'buy' || viewMode === 'verification'" class="tab-item"
:class="{ active: activeTab === 3 }" @click="setActiveTab(3)">
待支付
</view>
<view v-if="viewMode === 'verification'" class="tab-item" :class="{ active: activeTab === 5 }" @click="setActiveTab(5)">
<view v-if="viewMode === 'verification'" class="tab-item" :class="{ active: activeTab === 5 }"
@click="setActiveTab(5)">
已付款
</view>
<view v-if="viewMode === 'buy' || viewMode === 'sell'" class="tab-item" :class="{ active: activeTab === 9 }" @click="setActiveTab(9)">
<view v-if="viewMode === 'buy' || viewMode === 'sell'" class="tab-item" :class="{ active: activeTab === 9 }"
@click="setActiveTab(9)">
待收货
</view>
<view v-if="viewMode === 'buy' || viewMode === 'sell'" class="tab-item" :class="{ active: activeTab === 11 }" @click="setActiveTab(11)">
<view v-if="viewMode === 'buy' || viewMode === 'sell'" class="tab-item" :class="{ active: activeTab === 11 }"
@click="setActiveTab(11)">
已完成
</view>
<view v-if="viewMode === 'buy' || viewMode === 'sell' || viewMode === 'verification'" class="tab-item" :class="{ active: activeTab === 7 }" @click="setActiveTab(7)">
<view v-if="viewMode === 'buy' || viewMode === 'sell' || viewMode === 'verification'" class="tab-item"
:class="{ active: activeTab === 7 }" @click="setActiveTab(7)">
已取消
</view>
<view v-if="viewMode === 'verification'" class="tab-item" :class="{ active: activeTab === 15 }" @click="setActiveTab(15)">
<view v-if="viewMode === 'verification'" class="tab-item" :class="{ active: activeTab === 15 }"
@click="setActiveTab(15)">
退款
</view>
</view>
......@@ -81,10 +88,13 @@
<view class="vehicle-details">
<text class="vehicle-name">{{ order.details.vehicle.brand }} {{ order.details.vehicle.model }}</text>
<text class="vehicle-specs">
<text v-if="order.details.vehicle.manufacture_year">{{ order.details.vehicle.manufacture_year }}年 | </text>续航{{ order.details.vehicle.range_km }}km
<text v-if="order.details.vehicle.manufacture_year">{{ order.details.vehicle.manufacture_year }}年 |
</text>续航{{ order.details.vehicle.range_km }}km
</text>
<text v-if="order.details.vehicle.battery_capacity_ah" class="vehicle-battery">电池容量:{{ order.details.vehicle.battery_capacity_ah }}Ah</text>
<text v-if="order.details.vehicle.price" class="vehicle-price">¥{{ order.details.vehicle.price }}</text>
<text v-if="order.details.vehicle.battery_capacity_ah" class="vehicle-battery">电池容量:{{
order.details.vehicle.battery_capacity_ah }}Ah</text>
<text v-if="order.details.vehicle.price" class="vehicle-price">¥{{ order.details.vehicle.price
}}</text>
</view>
</nut-col>
</nut-row>
......@@ -179,7 +189,8 @@
订单详情
</nut-button>
<!-- 只有买车订单才显示评价按钮,卖车订单不显示 -->
<nut-button v-if="viewMode === 'buy'" type="primary" size="small" @click="rateOrder(order.id)" class="ml-2" color="orange" plain>
<nut-button v-if="viewMode === 'buy'" type="primary" size="small" @click="rateOrder(order.id)"
class="ml-2" color="orange" plain>
{{ order.details.review ? '查看评价' : '评价' }}
</nut-button>
</template>
......@@ -208,7 +219,8 @@
</template>
<!-- 认证模式:已取消状态 -->
<template v-if="viewMode === 'verification' && (order.status === 7 || order.status === 15 || order.status === 5)">
<template
v-if="viewMode === 'verification' && (order.status === 7 || order.status === 15 || order.status === 5)">
<nut-button type="default" size="small" @click="viewOrderDetail(order.id)">
订单详情
</nut-button>
......@@ -334,12 +346,15 @@
<view class="product-detail-content">
<text class="product-detail-name">{{ currentOrderDetail?.details?.vehicle?.brand }} {{
currentOrderDetail?.details?.vehicle?.model }}</text>
<text class="product-detail-specs"><text v-if="currentOrderDetail?.details?.vehicle?.manufacture_year">{{ currentOrderDetail?.details?.vehicle?.manufacture_year }}年 · </text>续航:
<text class="product-detail-specs"><text
v-if="currentOrderDetail?.details?.vehicle?.manufacture_year">{{
currentOrderDetail?.details?.vehicle?.manufacture_year }}年 · </text>续航:
{{
currentOrderDetail?.details?.vehicle?.range_km }}km/h</text>
<text class="product-detail-battery">电池容量: {{ currentOrderDetail?.details?.vehicle?.battery_capacity_ah
}}Ah</text>
<text v-if="currentOrderDetail?.details?.vehicle?.price" class="product-detail-price">¥ {{ currentOrderDetail?.details?.vehicle?.price }}</text>
<text v-if="currentOrderDetail?.details?.vehicle?.price" class="product-detail-price">¥ {{
currentOrderDetail?.details?.vehicle?.price }}</text>
</view>
</view>
</view>
......@@ -406,7 +421,8 @@
<nut-button plain class="flex-1" size="small" @click="showConfirmModal = false">
取消
</nut-button>
<nut-button type="warning" class="flex-1" size="small" color="orange" @click="performDeleteOrder(pendingDeleteOrderId)">
<nut-button type="warning" class="flex-1" size="small" color="orange"
@click="performDeleteOrder(pendingDeleteOrderId)">
确认
</nut-button>
</view>
......@@ -426,7 +442,8 @@
<nut-button plain class="flex-1" size="small" @click="showCancelConfirmModal = false">
我再想想
</nut-button>
<nut-button type="warning" class="flex-1" size="small" color="orange" @click="performCancelOrder(pendingCancelOrderId)">
<nut-button type="warning" class="flex-1" size="small" color="orange"
@click="performCancelOrder(pendingCancelOrderId)">
确定取消
</nut-button>
</view>
......@@ -446,7 +463,8 @@
<nut-button plain class="flex-1" size="small" @click="showShipConfirmModal = false">
取消
</nut-button>
<nut-button type="warning" class="flex-1" size="small" color="orange" @click="performConfirmShip(pendingShipOrderId)">
<nut-button type="warning" class="flex-1" size="small" color="orange"
@click="performConfirmShip(pendingShipOrderId)">
确认发货
</nut-button>
</view>
......@@ -466,7 +484,8 @@
<nut-button plain class="flex-1" size="small" @click="showReceiveConfirmModal = false">
取消
</nut-button>
<nut-button type="warning" class="flex-1" size="small" color="orange" @click="performConfirmReceive(pendingReceiveOrderId)">
<nut-button type="warning" class="flex-1" size="small" color="orange"
@click="performConfirmReceive(pendingReceiveOrderId)">
确认收货
</nut-button>
</view>
......@@ -482,7 +501,7 @@ import './index.less'
import { $ } from '@tarojs/extend'
import payCard from '@/components/payCard.vue'
// 导入接口
import { getOrderListAPI, getOrderDetailAPI, reviewOrderAPI, cancelOrderAPI, deleteOrderAPI, shipOrderAPI, receiptOrderStatusAPI } from '@/api/orders'
import { getOrderListAPI, getOrderDetailAPI, reviewOrderAPI, cancelOrderAPI, deleteOrderAPI, shipOrderAPI, receiptOrderStatusAPI, receiveOrderAPI } from '@/api/orders'
import { DEFAULT_COVER_IMG } from '@/utils/config'
const scrollStyle = ref({
......@@ -1259,35 +1278,21 @@ const performConfirmReceive = async (orderId) => {
try {
const order = boughtOrders.value.find(o => o.id === orderId)
if (wx.openBusinessView) {
wx.openBusinessView({
businessType: 'weappOrderConfirm',
extraData: {
merchant_id: order.merchant_id || '',
merchant_trade_no: order.id,
transaction_id: order.transaction_id || ''
},
success() {
// 确认收货组件调用成功
},
fail(err) {
// 调用确认收货API
if (order) {
// 调用买家查询收货状态接口
const response = await receiveOrderAPI({ order_id: order.id })
if (response.code) {
// 接口返回状态为11,确认收货成功
order.status = 11 // 更新为已完成状态
Taro.showToast({
title: '确认收货失败',
icon: 'error',
title: '确认收货成功',
icon: 'success',
duration: 2000
})
},
complete() {
receivingOrderId.value = ''
}
});
} else {
// 引导用户升级微信版本
Taro.showModal({
title: '提示',
content: '当前微信版本过低,请升级微信版本后重试',
showCancel: false
})
}
} catch (error) {
Taro.showToast({
......