Files
ai_dianshang/miniprogram/services/comments/createComment.js
2025-11-17 13:32:54 +08:00

179 lines
5.5 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';
/** 创建商品评论 */
export function createComment(commentData) {
return new Promise((resolve, reject) => {
// 获取用户token
const token = wx.getStorageSync('token');
if (!token) {
reject(new Error('请先登录'));
return;
}
// 如果有orderItemId直接使用原有逻辑
if (commentData.orderItemId) {
wx.request({
url: `${config.apiBaseUrl}/comments`,
method: 'POST',
header: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
data: {
order_item_id: commentData.orderItemId,
rating: commentData.rating,
content: commentData.content,
images: commentData.images || [],
is_anonymous: commentData.isAnonymous || false
},
success: (res) => {
if (res.statusCode === 200 && res.data.code === 200) {
resolve(res.data.data);
} else {
reject(new Error(res.data.message || '评论提交失败'));
}
},
fail: (err) => {
reject(err);
}
});
return;
}
// 如果有orderNo和productId先查找对应的订单项
if (commentData.orderNo && commentData.productId) {
// 先获取订单详情,找到对应的订单项
wx.request({
url: `${config.apiBaseUrl}/orders/${commentData.orderNo}`,
method: 'GET',
header: {
'Authorization': `Bearer ${token}`
},
success: (orderRes) => {
if (orderRes.statusCode === 200 && orderRes.data.code === 200) {
const order = orderRes.data.data;
// 调试:打印关键信息
console.log('[createComment] 查找的产品ID:', commentData.productId, '类型:', typeof commentData.productId);
console.log('[createComment] 订单项数量:', order.orderItemVOs?.length);
// 查找匹配的订单项
const orderItem = order.orderItemVOs?.find(item => {
// 确保数据类型一致进行比较
const itemSpuId = String(item.spuId);
const searchProductId = String(commentData.productId);
console.log('[createComment] 比较:', itemSpuId, '===', searchProductId, '结果:', itemSpuId === searchProductId);
return itemSpuId === searchProductId;
});
console.log('[createComment] 找到的订单项:', orderItem ? `ID: ${orderItem.id}, 商品: ${orderItem.goodsName}` : '未找到');
if (!orderItem) {
reject(new Error('未找到对应的订单项'));
return;
}
// 使用找到的订单项ID创建评论
wx.request({
url: `${config.apiBaseUrl}/comments`,
method: 'POST',
header: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
data: {
order_item_id: parseInt(orderItem.id),
rating: commentData.rating,
content: commentData.content,
images: commentData.images || [],
is_anonymous: commentData.isAnonymous || false
},
success: (res) => {
if (res.statusCode === 200 && res.data.code === 200) {
resolve(res.data.data);
} else {
reject(new Error(res.data.message || '评论提交失败'));
}
},
fail: (err) => {
reject(err);
}
});
} else {
reject(new Error(orderRes.data.message || '获取订单信息失败'));
}
},
fail: (err) => {
reject(err);
}
});
return;
}
reject(new Error('缺少必要的参数'));
});
}
/** 获取用户评论列表 */
export function fetchUserComments(params = {}) {
return new Promise((resolve, reject) => {
const token = wx.getStorageSync('token');
if (!token) {
reject(new Error('请先登录'));
return;
}
const { page = 1, pageSize = 10 } = params;
wx.request({
url: `${config.apiBaseUrl}/comments/user`,
method: 'GET',
header: {
'Authorization': `Bearer ${token}`
},
data: {
page,
page_size: pageSize
},
success: (res) => {
if (res.statusCode === 200 && res.data.code === 200) {
resolve(res.data.data);
} else {
reject(new Error(res.data.message || '获取评论列表失败'));
}
},
fail: (err) => {
reject(err);
}
});
});
}
/** 获取未评论的订单项 */
export function fetchUncommentedOrderItems() {
return new Promise((resolve, reject) => {
const token = wx.getStorageSync('token');
if (!token) {
reject(new Error('请先登录'));
return;
}
wx.request({
url: `${config.apiBaseUrl}/user/uncommented-order-items`,
method: 'GET',
header: {
'Authorization': `Bearer ${token}`
},
success: (res) => {
if (res.statusCode === 200 && res.data.code === 200) {
resolve(res.data.data);
} else {
reject(new Error(res.data.message || '获取待评论订单失败'));
}
},
fail: (err) => {
reject(err);
}
});
});
}