186 lines
5.2 KiB
JavaScript
186 lines
5.2 KiB
JavaScript
|
|
const { fetchComments } = require('../../services/comments/fetchComments');
|
|||
|
|
const { fetchCommentsCount } = require('../../services/comments/fetchCommentsCount');
|
|||
|
|
|
|||
|
|
Page({
|
|||
|
|
data: {
|
|||
|
|
spuId: 1,
|
|||
|
|
commentsList: [],
|
|||
|
|
commentsStatistics: {
|
|||
|
|
badCount: 0,
|
|||
|
|
commentCount: 0,
|
|||
|
|
goodCount: 0,
|
|||
|
|
goodRate: 0,
|
|||
|
|
hasImageCount: 0,
|
|||
|
|
middleCount: 0,
|
|||
|
|
},
|
|||
|
|
isLoading: false,
|
|||
|
|
debugInfo: {
|
|||
|
|
apiCalled: false,
|
|||
|
|
dataReceived: false,
|
|||
|
|
errorMessage: '',
|
|||
|
|
rawData: null,
|
|||
|
|
processedData: null
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
onLoad() {
|
|||
|
|
console.log('评论显示测试页面加载');
|
|||
|
|
this.loadCommentData();
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
async loadCommentData() {
|
|||
|
|
this.setData({
|
|||
|
|
isLoading: true,
|
|||
|
|
'debugInfo.apiCalled': false,
|
|||
|
|
'debugInfo.dataReceived': false,
|
|||
|
|
'debugInfo.errorMessage': '',
|
|||
|
|
'debugInfo.rawData': null,
|
|||
|
|
'debugInfo.processedData': null
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
// 获取评论统计
|
|||
|
|
await this.getCommentsStatistics(this.data.spuId);
|
|||
|
|
// 获取评论列表
|
|||
|
|
await this.getCommentsList(this.data.spuId);
|
|||
|
|
|
|||
|
|
this.setData({
|
|||
|
|
isLoading: false,
|
|||
|
|
'debugInfo.dataReceived': true
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('加载评论数据失败:', error);
|
|||
|
|
this.setData({
|
|||
|
|
isLoading: false,
|
|||
|
|
'debugInfo.errorMessage': error.message || '未知错误'
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 获取评论统计数据 - 复制商品详情页面的逻辑
|
|||
|
|
async getCommentsStatistics(spuId) {
|
|||
|
|
try {
|
|||
|
|
this.setData({ 'debugInfo.apiCalled': true });
|
|||
|
|
console.log('调用 fetchCommentsCount,spuId:', spuId);
|
|||
|
|
|
|||
|
|
const res = await fetchCommentsCount(spuId);
|
|||
|
|
console.log('fetchCommentsCount 返回结果:', res);
|
|||
|
|
|
|||
|
|
this.setData({ 'debugInfo.rawData': res });
|
|||
|
|
|
|||
|
|
if (res) {
|
|||
|
|
const goodRate = res.total_count > 0 ? Math.round((res.good_count / res.total_count) * 100) : 0;
|
|||
|
|
|
|||
|
|
const commentsStatistics = {
|
|||
|
|
commentCount: res.total_count || 0,
|
|||
|
|
goodCount: res.good_count || 0,
|
|||
|
|
middleCount: res.medium_count || 0,
|
|||
|
|
badCount: res.bad_count || 0,
|
|||
|
|
goodRate: goodRate,
|
|||
|
|
hasImageCount: res.image_count || 0,
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
console.log('处理后的统计数据:', commentsStatistics);
|
|||
|
|
console.log('显示条件 (commentCount > 0):', commentsStatistics.commentCount > 0);
|
|||
|
|
|
|||
|
|
this.setData({
|
|||
|
|
commentsStatistics: commentsStatistics,
|
|||
|
|
'debugInfo.processedData': commentsStatistics
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('获取评论统计失败:', error);
|
|||
|
|
this.setData({
|
|||
|
|
'debugInfo.errorMessage': error.message || '获取评论统计失败',
|
|||
|
|
commentsStatistics: {
|
|||
|
|
commentCount: 0,
|
|||
|
|
goodCount: 0,
|
|||
|
|
middleCount: 0,
|
|||
|
|
badCount: 0,
|
|||
|
|
goodRate: 0,
|
|||
|
|
hasImageCount: 0,
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 获取评论列表数据 - 复制商品详情页面的逻辑
|
|||
|
|
async getCommentsList(spuId) {
|
|||
|
|
try {
|
|||
|
|
console.log('调用 fetchComments,参数:', { productId: spuId, page: 1, pageSize: 3 });
|
|||
|
|
|
|||
|
|
const res = await fetchComments({ productId: spuId, page: 1, pageSize: 3 });
|
|||
|
|
console.log('fetchComments 返回结果:', res);
|
|||
|
|
|
|||
|
|
if (res && res.comments) {
|
|||
|
|
// 转换评论数据格式
|
|||
|
|
const commentsList = res.comments.map(comment => ({
|
|||
|
|
id: comment.id,
|
|||
|
|
userName: comment.is_anonymous ? '匿名用户' : (comment.user_name || '用户'),
|
|||
|
|
userHeadUrl: comment.user_avatar || 'https://tdesign.gtimg.com/miniprogram/template/retail/avatar/avatar1.png',
|
|||
|
|
commentScore: comment.rating || 5,
|
|||
|
|
commentContent: comment.content || '',
|
|||
|
|
commentTime: comment.created_at ? this.formatTime(comment.created_at) : '',
|
|||
|
|
specInfo: comment.product_spec || '',
|
|||
|
|
commentResources: (comment.images || []).map(imageUrl => ({
|
|||
|
|
src: imageUrl,
|
|||
|
|
type: 'image'
|
|||
|
|
})),
|
|||
|
|
isAnonymity: comment.is_anonymous || false,
|
|||
|
|
sellerReply: comment.reply_content || '',
|
|||
|
|
goodsDetailInfo: ''
|
|||
|
|
}));
|
|||
|
|
|
|||
|
|
console.log('处理后的评论列表:', commentsList);
|
|||
|
|
|
|||
|
|
this.setData({
|
|||
|
|
commentsList: commentsList
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('获取评论列表失败:', error);
|
|||
|
|
this.setData({
|
|||
|
|
commentsList: []
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 格式化时间
|
|||
|
|
formatTime(dateString) {
|
|||
|
|
if (!dateString) return '';
|
|||
|
|
try {
|
|||
|
|
const date = new Date(dateString);
|
|||
|
|
return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
|
|||
|
|
} catch (error) {
|
|||
|
|
return dateString;
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 重新加载数据
|
|||
|
|
reloadData() {
|
|||
|
|
this.loadCommentData();
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
// 清除数据
|
|||
|
|
clearData() {
|
|||
|
|
this.setData({
|
|||
|
|
commentsList: [],
|
|||
|
|
commentsStatistics: {
|
|||
|
|
badCount: 0,
|
|||
|
|
commentCount: 0,
|
|||
|
|
goodCount: 0,
|
|||
|
|
goodRate: 0,
|
|||
|
|
hasImageCount: 0,
|
|||
|
|
middleCount: 0,
|
|||
|
|
},
|
|||
|
|
debugInfo: {
|
|||
|
|
apiCalled: false,
|
|||
|
|
dataReceived: false,
|
|||
|
|
errorMessage: '',
|
|||
|
|
rawData: null,
|
|||
|
|
processedData: null
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
});
|