418 lines
15 KiB
JavaScript
418 lines
15 KiB
JavaScript
|
|
import { config } from '../../config/index';
|
|||
|
|
|
|||
|
|
/** 获取订单列表mock数据 */
|
|||
|
|
function mockFetchOrders(params) {
|
|||
|
|
console.log('[订单服务] 使用Mock数据获取订单列表', {
|
|||
|
|
params,
|
|||
|
|
timestamp: new Date().toISOString()
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const { delay } = require('../_utils/delay');
|
|||
|
|
const { genOrders } = require('../../model/order/orderList');
|
|||
|
|
|
|||
|
|
return delay(200).then(() => {
|
|||
|
|
const result = genOrders(params);
|
|||
|
|
console.log('[订单服务] Mock数据生成完成', {
|
|||
|
|
orderCount: result.data?.orders?.length || 0,
|
|||
|
|
totalCount: result.data?.totalCount || 0
|
|||
|
|
});
|
|||
|
|
return result;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** 获取订单列表数据 */
|
|||
|
|
export function fetchOrders(statusOrParams, pageNum, pageSize) {
|
|||
|
|
console.log('[订单服务] 开始获取订单列表', {
|
|||
|
|
statusOrParams,
|
|||
|
|
pageNum,
|
|||
|
|
pageSize,
|
|||
|
|
timestamp: new Date().toISOString()
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 兼容两种调用方式:
|
|||
|
|
// 1. fetchOrders(params) - 原有方式,params包含parameter对象
|
|||
|
|
// 2. fetchOrders(status, pageNum, pageSize) - 新的调用方式
|
|||
|
|
let requestParams;
|
|||
|
|
|
|||
|
|
if (typeof statusOrParams === 'object' && statusOrParams.parameter) {
|
|||
|
|
// 原有的参数格式
|
|||
|
|
requestParams = {
|
|||
|
|
page: statusOrParams.parameter.pageNum || 1,
|
|||
|
|
page_size: statusOrParams.parameter.pageSize || 20,
|
|||
|
|
status: statusOrParams.parameter.orderStatus
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
console.log('[订单服务] 使用原有参数格式', {
|
|||
|
|
originalParams: statusOrParams,
|
|||
|
|
requestParams
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
if (config.useMock) {
|
|||
|
|
console.log('[订单服务] 使用Mock模式');
|
|||
|
|
return mockFetchOrders(statusOrParams);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
// 新的参数格式
|
|||
|
|
requestParams = {
|
|||
|
|
page: pageNum || 1,
|
|||
|
|
page_size: pageSize || 20,
|
|||
|
|
status: statusOrParams || ''
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
console.log('[订单服务] 使用新参数格式', {
|
|||
|
|
status: statusOrParams,
|
|||
|
|
pageNum,
|
|||
|
|
pageSize,
|
|||
|
|
requestParams
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
if (config.useMock) {
|
|||
|
|
console.log('[订单服务] 使用Mock模式');
|
|||
|
|
const mockParams = {
|
|||
|
|
parameter: {
|
|||
|
|
pageNum: pageNum || 1,
|
|||
|
|
pageSize: pageSize || 20,
|
|||
|
|
orderStatus: statusOrParams || -1
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
return mockFetchOrders(mockParams);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
console.log('[订单服务] 发送真实API请求', {
|
|||
|
|
url: `${config.apiBase}/orders`,
|
|||
|
|
requestParams,
|
|||
|
|
token: wx.getStorageSync('token') ? '已获取' : '未获取'
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return new Promise((resolve, reject) => {
|
|||
|
|
wx.request({
|
|||
|
|
url: `${config.apiBase}/orders`,
|
|||
|
|
method: 'GET',
|
|||
|
|
header: {
|
|||
|
|
'Authorization': `Bearer ${wx.getStorageSync('token') || ''}`
|
|||
|
|
},
|
|||
|
|
data: requestParams,
|
|||
|
|
success: (res) => {
|
|||
|
|
console.log('🌐 [订单服务] API响应成功 - 完整响应数据', {
|
|||
|
|
statusCode: res.statusCode,
|
|||
|
|
dataCode: res.data?.code,
|
|||
|
|
orderCount: res.data?.data?.list?.length || 0,
|
|||
|
|
total: res.data?.data?.total || 0,
|
|||
|
|
requestParams,
|
|||
|
|
fullResponse: res,
|
|||
|
|
responseDataStructure: {
|
|||
|
|
hasData: !!res.data,
|
|||
|
|
hasDataData: !!res.data?.data,
|
|||
|
|
hasList: !!res.data?.data?.list,
|
|||
|
|
hasOrders: !!res.data?.data?.orders,
|
|||
|
|
responseKeys: res.data ? Object.keys(res.data) : [],
|
|||
|
|
dataKeys: res.data?.data ? Object.keys(res.data.data) : []
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 打印原始订单数据
|
|||
|
|
const orderList = res.data?.data?.list || res.data?.data?.orders || [];
|
|||
|
|
if (orderList.length > 0) {
|
|||
|
|
console.log('📦 [订单服务] 原始API订单数据详情', {
|
|||
|
|
totalOrders: orderList.length,
|
|||
|
|
rawOrders: orderList,
|
|||
|
|
orderSummary: orderList.map((order, index) => ({
|
|||
|
|
index,
|
|||
|
|
orderId: order.orderId,
|
|||
|
|
orderNo: order.orderNo,
|
|||
|
|
orderStatus: order.orderStatus,
|
|||
|
|
paymentAmount: order.paymentAmount,
|
|||
|
|
orderItemVOsCount: order.orderItemVOs?.length || 0,
|
|||
|
|
orderKeys: Object.keys(order)
|
|||
|
|
}))
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (res.statusCode === 200 && res.data.code === 200) {
|
|||
|
|
const rawOrders = res.data.data.list || res.data.data.orders || [];
|
|||
|
|
console.log('[订单服务] 开始处理订单数据', {
|
|||
|
|
rawOrderCount: rawOrders.length
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 转换后端数据格式为前端期望的格式
|
|||
|
|
const processedOrderList = rawOrders.map((order, index) => {
|
|||
|
|
console.log(`[订单服务] 处理订单 ${index + 1}:`, {
|
|||
|
|
id: order.orderId || order.id,
|
|||
|
|
orderNo: order.orderNo || order.order_no,
|
|||
|
|
status: order.orderStatus || order.status,
|
|||
|
|
payAmount: order.paymentAmount || order.pay_amount,
|
|||
|
|
itemCount: order.orderItemVOs?.length || order.items?.length || 0
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
id: order.orderId || order.id,
|
|||
|
|
orderId: order.orderId || order.id,
|
|||
|
|
orderNo: order.orderNo || order.order_no,
|
|||
|
|
order_no: order.orderNo || order.order_no,
|
|||
|
|
parentOrderNo: order.orderNo || order.order_no,
|
|||
|
|
storeId: order.storeId || '1',
|
|||
|
|
storeName: order.storeName || '默认店铺',
|
|||
|
|
status: order.orderStatus || order.status,
|
|||
|
|
orderStatus: order.orderStatus || order.status,
|
|||
|
|
statusName: getOrderStatusName(order.orderStatus || order.status),
|
|||
|
|
orderStatusName: getOrderStatusName(order.orderStatus || order.status),
|
|||
|
|
payAmount: order.paymentAmount || order.pay_amount,
|
|||
|
|
pay_amount: order.paymentAmount || order.pay_amount,
|
|||
|
|
paymentAmount: order.paymentAmount || order.pay_amount,
|
|||
|
|
totalAmount: order.totalAmount || order.total_amount,
|
|||
|
|
total_amount: order.totalAmount || order.total_amount,
|
|||
|
|
createdAt: order.createdAt || order.created_at,
|
|||
|
|
created_at: order.createdAt || order.created_at,
|
|||
|
|
createTime: new Date(order.createdAt || order.created_at).getTime(),
|
|||
|
|
receiverName: order.receiverName || order.receiver_name,
|
|||
|
|
receiver_name: order.receiverName || order.receiver_name,
|
|||
|
|
receiverPhone: order.receiverPhone || order.receiver_phone,
|
|||
|
|
receiver_phone: order.receiverPhone || order.receiver_phone,
|
|||
|
|
receiverAddress: order.receiverAddress || order.receiver_address,
|
|||
|
|
receiver_address: order.receiverAddress || order.receiver_address,
|
|||
|
|
logisticsVO: {
|
|||
|
|
logisticsNo: order.logisticsNo || '',
|
|||
|
|
receiverName: order.receiverName || order.receiver_name,
|
|||
|
|
receiverPhone: order.receiverPhone || order.receiver_phone,
|
|||
|
|
receiverAddress: order.receiverAddress || order.receiver_address
|
|||
|
|
},
|
|||
|
|
orderItemVOs: (order.orderItemVOs || order.items || []).map(item => ({
|
|||
|
|
...item,
|
|||
|
|
spec_info: item.spec_info || {},
|
|||
|
|
specInfo: item.spec_info || {},
|
|||
|
|
// 格式化spec_info为显示文本
|
|||
|
|
specText: item.spec_info ? Object.entries(item.spec_info).map(([key, value]) => `${key}: ${value}`).join(', ') : ''
|
|||
|
|
})),
|
|||
|
|
items: (order.orderItemVOs || order.items || []).map(item => ({
|
|||
|
|
...item,
|
|||
|
|
spec_info: item.spec_info || {},
|
|||
|
|
specInfo: item.spec_info || {},
|
|||
|
|
// 格式化spec_info为显示文本
|
|||
|
|
specText: item.spec_info ? Object.entries(item.spec_info).map(([key, value]) => `${key}: ${value}`).join(', ') : ''
|
|||
|
|
})),
|
|||
|
|
buttonVOs: getOrderButtons(order.orderStatus || order.status),
|
|||
|
|
buttons: getOrderButtons(order.orderStatus || order.status)
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
console.log('✅ [订单服务] 订单数据处理完成', {
|
|||
|
|
processedOrderCount: processedOrderList.length,
|
|||
|
|
total: res.data.data.total || 0
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 打印处理后的订单详情
|
|||
|
|
console.log('🔄 [订单服务] 处理后的订单数据详情', {
|
|||
|
|
processedOrders: processedOrderList.map((order, index) => ({
|
|||
|
|
index,
|
|||
|
|
id: order.id,
|
|||
|
|
orderId: order.orderId,
|
|||
|
|
orderNo: order.orderNo,
|
|||
|
|
status: order.status,
|
|||
|
|
orderStatus: order.orderStatus,
|
|||
|
|
statusName: order.statusName,
|
|||
|
|
payAmount: order.payAmount,
|
|||
|
|
paymentAmount: order.paymentAmount,
|
|||
|
|
totalAmount: order.totalAmount,
|
|||
|
|
receiverName: order.receiverName,
|
|||
|
|
receiverAddress: order.receiverAddress,
|
|||
|
|
orderItemVOsCount: order.orderItemVOs?.length || 0,
|
|||
|
|
itemsCount: order.items?.length || 0,
|
|||
|
|
orderItemVOs: order.orderItemVOs,
|
|||
|
|
items: order.items,
|
|||
|
|
buttons: order.buttons,
|
|||
|
|
buttonVOs: order.buttonVOs,
|
|||
|
|
// 添加spec_info详情
|
|||
|
|
itemsWithSpecInfo: order.items?.map(item => ({
|
|||
|
|
productName: item.product_name || item.productName,
|
|||
|
|
specInfo: item.spec_info,
|
|||
|
|
specText: item.specText
|
|||
|
|
})) || []
|
|||
|
|
}))
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 返回兼容两种格式的数据
|
|||
|
|
const result = {
|
|||
|
|
// 新格式 - 使用orders字段供 index.js 使用
|
|||
|
|
orders: processedOrderList,
|
|||
|
|
total: res.data.data.total || 0,
|
|||
|
|
page: requestParams.page,
|
|||
|
|
pageSize: requestParams.page_size,
|
|||
|
|
// 旧格式 - 保持兼容性
|
|||
|
|
list: processedOrderList,
|
|||
|
|
data: {
|
|||
|
|
orders: processedOrderList,
|
|||
|
|
totalCount: res.data.data.total || 0,
|
|||
|
|
pageNum: requestParams.page,
|
|||
|
|
pageSize: requestParams.page_size
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
console.log('📤 [订单服务] 返回处理结果 - 完整数据结构', {
|
|||
|
|
ordersCount: result.orders.length,
|
|||
|
|
total: result.total,
|
|||
|
|
page: result.page,
|
|||
|
|
pageSize: result.pageSize,
|
|||
|
|
resultStructure: {
|
|||
|
|
hasOrders: !!result.orders,
|
|||
|
|
hasList: !!result.list,
|
|||
|
|
hasData: !!result.data,
|
|||
|
|
hasDataOrders: !!result.data?.orders,
|
|||
|
|
resultKeys: Object.keys(result),
|
|||
|
|
dataKeys: result.data ? Object.keys(result.data) : []
|
|||
|
|
},
|
|||
|
|
fullResult: result
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
resolve(result);
|
|||
|
|
} else {
|
|||
|
|
const errorMsg = res.data.message || '获取订单列表失败';
|
|||
|
|
console.error('[订单服务] API响应错误', {
|
|||
|
|
statusCode: res.statusCode,
|
|||
|
|
dataCode: res.data?.code,
|
|||
|
|
message: errorMsg,
|
|||
|
|
requestParams
|
|||
|
|
});
|
|||
|
|
reject(new Error(errorMsg));
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
fail: (err) => {
|
|||
|
|
console.error('[订单服务] API请求失败', {
|
|||
|
|
error: err,
|
|||
|
|
requestParams,
|
|||
|
|
timestamp: new Date().toISOString()
|
|||
|
|
});
|
|||
|
|
reject(err);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取订单状态名称
|
|||
|
|
function getOrderStatusName(status) {
|
|||
|
|
// 与后端order.go中的状态映射保持一致
|
|||
|
|
const statusMap = {
|
|||
|
|
1: '未付款',
|
|||
|
|
2: '待发货', // 统一为待发货
|
|||
|
|
3: '待发货', // 统一为待发货
|
|||
|
|
4: '已发货',
|
|||
|
|
5: '待收货',
|
|||
|
|
6: '已完成',
|
|||
|
|
7: '已取消',
|
|||
|
|
8: '退货中',
|
|||
|
|
9: '已退款'
|
|||
|
|
};
|
|||
|
|
const statusName = statusMap[status] || '未知状态';
|
|||
|
|
|
|||
|
|
console.log('[订单服务] 获取订单状态名称', {
|
|||
|
|
status,
|
|||
|
|
statusName
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return statusName;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取订单按钮
|
|||
|
|
function getOrderButtons(status) {
|
|||
|
|
console.log('[订单服务] ===== 按钮生成开始 =====');
|
|||
|
|
console.log('[订单服务] 输入参数详情', {
|
|||
|
|
status: status,
|
|||
|
|
statusType: typeof status,
|
|||
|
|
statusString: String(status)
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const buttons = [];
|
|||
|
|
|
|||
|
|
console.log('[订单服务] 开始按状态生成按钮...');
|
|||
|
|
|
|||
|
|
switch (status) {
|
|||
|
|
case 1: // 未付款
|
|||
|
|
console.log('[订单服务] 状态1-未付款: 添加取消订单和立即付款按钮');
|
|||
|
|
buttons.push({ type: 1, name: '取消订单' });
|
|||
|
|
buttons.push({ type: 2, name: '立即付款', primary: true });
|
|||
|
|
break;
|
|||
|
|
case 2: // 已付款
|
|||
|
|
console.log('[订单服务] 状态2-已付款: 添加提醒发货和申请退款按钮');
|
|||
|
|
buttons.push({ type: 3, name: '提醒发货', primary: true });
|
|||
|
|
buttons.push({ type: 5, name: '申请退款' });
|
|||
|
|
break;
|
|||
|
|
case 3: // 待发货
|
|||
|
|
console.log('[订单服务] 状态3-待发货: 添加提醒发货和申请退款按钮');
|
|||
|
|
buttons.push({ type: 3, name: '提醒发货', primary: true });
|
|||
|
|
buttons.push({ type: 5, name: '申请退款' });
|
|||
|
|
break;
|
|||
|
|
case 4: // 已发货
|
|||
|
|
console.log('[订单服务] 状态4-已发货: 添加确认收货按钮 (type=4)');
|
|||
|
|
buttons.push({ type: 4, name: '确认收货', primary: true });
|
|||
|
|
break;
|
|||
|
|
case 5: // 待收货
|
|||
|
|
console.log('[订单服务] 状态5-待收货: 添加确认收货按钮 (type=4)');
|
|||
|
|
buttons.push({ type: 4, name: '确认收货', primary: true });
|
|||
|
|
break;
|
|||
|
|
case 6: // 已完成
|
|||
|
|
console.log('[订单服务] 状态6-已完成: 添加评价按钮 (type=5)');
|
|||
|
|
buttons.push({ type: 5, name: '评价', primary: true });
|
|||
|
|
break;
|
|||
|
|
case 7: // 已取消
|
|||
|
|
console.log('[订单服务] 状态7-已取消: 不添加任何按钮');
|
|||
|
|
break;
|
|||
|
|
case 8: // 已退款
|
|||
|
|
case 9: // 已退款
|
|||
|
|
console.log('[订单服务] 状态8/9-已退款: 不添加任何按钮');
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
console.log('[订单服务] 未知状态:', status);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
console.log('[订单服务] ===== 按钮生成完成 =====');
|
|||
|
|
console.log('[订单服务] 最终生成的按钮列表:', {
|
|||
|
|
status: status,
|
|||
|
|
buttonCount: buttons.length,
|
|||
|
|
buttons: buttons.map((btn, index) => ({
|
|||
|
|
index: index,
|
|||
|
|
type: btn.type,
|
|||
|
|
name: btn.name,
|
|||
|
|
primary: btn.primary || false
|
|||
|
|
}))
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return buttons;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** 获取订单列表mock数据 */
|
|||
|
|
function mockFetchOrdersCount(params) {
|
|||
|
|
console.log('[订单服务] 使用Mock数据获取订单统计', {
|
|||
|
|
params,
|
|||
|
|
timestamp: new Date().toISOString()
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const { delay } = require('../_utils/delay');
|
|||
|
|
const { genOrdersCount } = require('../../model/order/orderList');
|
|||
|
|
|
|||
|
|
return delay().then(() => {
|
|||
|
|
const result = genOrdersCount(params);
|
|||
|
|
console.log('[订单服务] Mock统计数据生成完成', result);
|
|||
|
|
return result;
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/** 获取订单列表统计 */
|
|||
|
|
export function fetchOrdersCount(params) {
|
|||
|
|
console.log('[订单服务] 开始获取订单统计', {
|
|||
|
|
params,
|
|||
|
|
useMock: config.useMock,
|
|||
|
|
timestamp: new Date().toISOString()
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
if (config.useMock) {
|
|||
|
|
console.log('[订单服务] 使用Mock模式获取统计');
|
|||
|
|
return mockFetchOrdersCount(params);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
console.log('[订单服务] 使用真实API获取统计(暂未实现)');
|
|||
|
|
return new Promise((resolve) => {
|
|||
|
|
resolve('real api');
|
|||
|
|
});
|
|||
|
|
}
|