Files
ai_dianshang/miniprogram/services/order/applyService.js
2025-11-17 14:11:46 +08:00

276 lines
8.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { config } from '../../config/index';
/** 获取售后单mock数据 */
function mockFetchRightsPreview(params) {
console.log('[订单操作服务] 使用Mock数据获取售后预览', {
params,
timestamp: new Date().toISOString()
});
const { delay } = require('../_utils/delay');
const { genRightsPreview } = require('../../model/order/applyService');
return delay().then(() => {
const result = genRightsPreview(params);
console.log('[订单操作服务] Mock售后预览数据生成完成', result);
return result;
});
}
/** 获取售后单数据 */
export function fetchRightsPreview(params) {
console.log('[订单操作服务] 开始获取售后预览', {
params,
useMock: config.useMock,
timestamp: new Date().toISOString()
});
if (config.useMock) {
console.log('[订单操作服务] 使用Mock模式获取售后预览');
return mockFetchRightsPreview(params);
}
console.log('[订单操作服务] 使用真实API获取售后预览暂未实现');
return new Promise((resolve) => {
resolve('real api');
});
}
/** 确认收货 */
export function dispatchConfirmReceived(orderNo) {
console.log('[订单操作服务] 开始确认收货', {
orderNo,
useMock: config.useMock,
timestamp: new Date().toISOString()
});
if (config.useMock) {
console.log('[订单操作服务] 使用Mock模式确认收货');
const { delay } = require('../_utils/delay');
return delay().then(() => {
console.log('[订单操作服务] Mock确认收货完成', { orderNo });
return { success: true, message: '确认收货成功' };
});
}
return new Promise((resolve, reject) => {
const token = wx.getStorageSync('token');
console.log('[订单操作服务] 检查登录状态', {
hasToken: !!token,
orderNo
});
if (!token) {
console.error('[订单操作服务] 用户未登录');
reject(new Error('未登录'));
return;
}
if (!orderNo) {
console.error('[订单操作服务] 缺少订单号');
reject(new Error('缺少订单号'));
return;
}
const requestUrl = `${config.apiBase}/orders/${orderNo}/confirm`;
console.log('[订单操作服务] 发送确认收货API请求', {
url: requestUrl,
orderNo
});
wx.request({
url: requestUrl,
method: 'POST',
header: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
success: (res) => {
console.log('[订单操作服务] 确认收货API响应', {
statusCode: res.statusCode,
dataCode: res.data?.code,
message: res.data?.message,
orderNo
});
if (res.statusCode === 200 && res.data.code === 200) {
console.log('[订单操作服务] 确认收货成功', { orderNo });
resolve({ success: true, message: '确认收货成功' });
} else {
const errorMsg = res.data?.message || '确认收货失败';
console.error('[订单操作服务] 确认收货失败', {
statusCode: res.statusCode,
dataCode: res.data?.code,
message: errorMsg,
orderNo
});
reject(new Error(errorMsg));
}
},
fail: (err) => {
console.error('[订单操作服务] 确认收货请求失败', {
error: err,
orderNo,
url: requestUrl,
timestamp: new Date().toISOString()
});
reject(new Error('网络请求失败'));
}
});
});
}
/** 获取可选的mock售后原因列表 */
function mockFetchApplyReasonList(params) {
console.log('[订单操作服务] 使用Mock数据获取售后原因列表', {
params,
timestamp: new Date().toISOString()
});
const { delay } = require('../_utils/delay');
const { genApplyReasonList } = require('../../model/order/applyService');
return delay().then(() => {
const result = genApplyReasonList(params);
console.log('[订单操作服务] Mock售后原因列表生成完成', {
reasonCount: result.data?.length || 0
});
return result;
});
}
/** 获取可选的售后原因列表 */
export function fetchApplyReasonList(params) {
console.log('[订单操作服务] 开始获取售后原因列表', {
params,
useMock: config.useMock,
timestamp: new Date().toISOString()
});
if (config.useMock) {
console.log('[订单操作服务] 使用Mock模式获取售后原因列表');
return mockFetchApplyReasonList(params);
}
console.log('[订单操作服务] 使用真实API获取售后原因列表暂未实现');
return new Promise((resolve) => {
resolve('real api');
});
}
/** 发起mock售后申请 */
function mockDispatchApplyService(params) {
console.log('[订单操作服务] 使用Mock数据发起售后申请', {
params,
timestamp: new Date().toISOString()
});
const { delay } = require('../_utils/delay');
const { applyService } = require('../../model/order/applyService');
return delay().then(() => {
const result = applyService(params);
console.log('[订单操作服务] Mock售后申请完成', {
success: result.success,
serviceId: result.data?.serviceId
});
return result;
});
}
/** 发起售后申请 */
export function dispatchApplyService(params) {
console.log('[订单操作服务] 开始发起售后申请', {
params,
useMock: config.useMock,
timestamp: new Date().toISOString()
});
if (config.useMock) {
console.log('[订单操作服务] 使用Mock模式发起售后申请');
return mockDispatchApplyService(params);
}
return new Promise((resolve, reject) => {
const token = wx.getStorageSync('token');
console.log('[订单操作服务] 检查登录状态', {
hasToken: !!token,
orderNo: params.orderNo
});
if (!token) {
console.error('[订单操作服务] 用户未登录');
reject(new Error('未登录'));
return;
}
if (!params.orderNo) {
console.error('[订单操作服务] 缺少订单号', { params });
reject(new Error('缺少订单号'));
return;
}
const requestUrl = `${config.apiBase}/orders/${params.orderNo}/service`;
console.log('[订单操作服务] 发送售后申请API请求', {
url: requestUrl,
orderNo: params.orderNo,
reason: params.reason,
description: params.description
});
wx.request({
url: requestUrl,
method: 'POST',
data: {
reason: params.reason,
description: params.description,
images: params.images || [],
type: params.type || 1 // 1-退款 2-退货退款
},
header: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
success: (res) => {
console.log('[订单操作服务] 售后申请API响应', {
statusCode: res.statusCode,
dataCode: res.data?.code,
message: res.data?.message,
serviceId: res.data?.data?.serviceId,
orderNo: params.orderNo
});
if (res.statusCode === 200 && res.data.code === 200) {
console.log('[订单操作服务] 售后申请成功', {
orderNo: params.orderNo,
serviceId: res.data.data?.serviceId
});
resolve({
success: true,
message: '售后申请提交成功',
data: res.data.data
});
} else {
const errorMsg = res.data?.message || '售后申请失败';
console.error('[订单操作服务] 售后申请失败', {
statusCode: res.statusCode,
dataCode: res.data?.code,
message: errorMsg,
orderNo: params.orderNo
});
reject(new Error(errorMsg));
}
},
fail: (err) => {
console.error('[订单操作服务] 售后申请请求失败', {
error: err,
orderNo: params.orderNo,
url: requestUrl,
timestamp: new Date().toISOString()
});
reject(new Error('网络请求失败'));
}
});
});
}