395 lines
11 KiB
JavaScript
395 lines
11 KiB
JavaScript
import { fetchComments } from '../../../services/comments/fetchComments';
|
||
import { fetchCommentsCount } from '../../../services/comments/fetchCommentsCount';
|
||
import { fetchUserComments } from '../../../services/comments/createComment';
|
||
import dayjs from 'dayjs';
|
||
const layoutMap = {
|
||
0: 'vertical',
|
||
};
|
||
Page({
|
||
data: {
|
||
pageLoading: false,
|
||
commentList: [],
|
||
pageNum: 1,
|
||
myPageNum: 1,
|
||
pageSize: 10,
|
||
total: 0,
|
||
myTotal: 0,
|
||
hasLoaded: false,
|
||
layoutText: layoutMap[0],
|
||
loadMoreStatus: 0,
|
||
myLoadStatus: 0,
|
||
spuId: '1060004',
|
||
commentLevel: '',
|
||
hasImage: '',
|
||
commentType: '',
|
||
totalCount: 0,
|
||
countObj: {
|
||
badCount: '0',
|
||
commentCount: '0',
|
||
goodCount: '0',
|
||
middleCount: '0',
|
||
hasImageCount: '0',
|
||
uidCount: '0',
|
||
},
|
||
},
|
||
onLoad(options) {
|
||
console.log('[评论页面] onLoad 接收到的参数:', options);
|
||
const { productId, spuId } = options;
|
||
// 兼容新旧参数名
|
||
const id = productId || spuId;
|
||
console.log('[评论页面] 最终使用的spuId:', id);
|
||
|
||
if (id) {
|
||
this.setData({ spuId: id });
|
||
|
||
console.log('[评论页面] 开始获取评论统计...');
|
||
this.getCount({ spuId: id });
|
||
|
||
console.log('[评论页面] 开始获取评论列表...');
|
||
this.getComments({ spuId: id });
|
||
}
|
||
},
|
||
async getCount(options) {
|
||
const { spuId } = options;
|
||
console.log('[评论页面] getCount 开始,spuId:', spuId, '类型:', typeof spuId);
|
||
|
||
try {
|
||
// 直接传递spuId作为productId参数
|
||
const result = await fetchCommentsCount(spuId);
|
||
console.log('[评论页面] fetchCommentsCount 返回数据:', result);
|
||
|
||
// 尝试获取用户自己的评论数
|
||
try {
|
||
const token = wx.getStorageSync('token');
|
||
if (token) {
|
||
const userCommentsData = await fetchUserComments({
|
||
page: 1,
|
||
pageSize: 1
|
||
});
|
||
if (userCommentsData && userCommentsData.total !== undefined) {
|
||
result.uidCount = String(userCommentsData.total);
|
||
console.log('[评论页面] 获取到用户评论数:', userCommentsData.total);
|
||
}
|
||
}
|
||
} catch (userError) {
|
||
console.log('[评论页面] 获取用户评论数失败,使用默认值0:', userError.message);
|
||
// 保持默认值0,不影响主要功能
|
||
}
|
||
|
||
console.log('[评论页面] 设置评论统计数据:', result);
|
||
this.setData({
|
||
countObj: result,
|
||
});
|
||
// const { data, code = '' } = result;
|
||
// if (code.toUpperCase() === 'SUCCESS') {
|
||
// wx.setNavigationBarTitle({
|
||
// title: `全部评价(${data.commentCount})`,
|
||
// });
|
||
// this.setData({
|
||
// countObj: data,
|
||
// });
|
||
// } else {
|
||
// wx.showToast({
|
||
// title: '查询失败,请稍候重试',
|
||
// });
|
||
// }
|
||
} catch (error) {
|
||
console.error('[评论页面] 获取评论统计失败:', error);
|
||
wx.showToast({
|
||
title: '获取评论失败,请稍候重试',
|
||
icon: 'none'
|
||
});
|
||
this.setData({
|
||
loadMoreStatus: 0,
|
||
});
|
||
}
|
||
},
|
||
generalQueryData(reset) {
|
||
const { hasImage, pageNum, pageSize, spuId, commentLevel } = this.data;
|
||
const params = {
|
||
pageNum: 1,
|
||
pageSize: 30,
|
||
queryParameter: {
|
||
spuId,
|
||
},
|
||
};
|
||
if (
|
||
Number(commentLevel) === 3 ||
|
||
Number(commentLevel) === 2 ||
|
||
Number(commentLevel) === 1
|
||
) {
|
||
params.queryParameter.commentLevel = Number(commentLevel);
|
||
}
|
||
if (hasImage && hasImage === '1') {
|
||
params.queryParameter.hasImage = true;
|
||
} else {
|
||
delete params.queryParameter.hasImage;
|
||
}
|
||
// 重置请求
|
||
if (reset) return params;
|
||
|
||
return {
|
||
...params,
|
||
pageNum: pageNum + 1,
|
||
pageSize,
|
||
};
|
||
},
|
||
async init(reset = true) {
|
||
console.log('[评论页面] init 开始,reset:', reset);
|
||
const { loadMoreStatus, commentList = [], spuId, hasImage, commentLevel } = this.data;
|
||
console.log('[评论页面] 当前页面数据状态:', { loadMoreStatus, commentListLength: commentList.length, spuId, hasImage, commentLevel });
|
||
|
||
// 在加载中或者无更多数据,直接返回
|
||
if (loadMoreStatus !== 0) {
|
||
console.log('[评论页面] 跳过加载,loadMoreStatus:', loadMoreStatus);
|
||
return;
|
||
}
|
||
|
||
console.log('[评论页面] 设置加载状态为1');
|
||
this.setData({
|
||
loadMoreStatus: 1,
|
||
});
|
||
|
||
// 构造正确的API参数格式
|
||
const apiParams = {
|
||
productId: spuId,
|
||
page: reset ? 1 : this.data.pageNum + 1,
|
||
pageSize: this.data.pageSize,
|
||
};
|
||
|
||
// 添加评分筛选
|
||
if (commentLevel && (commentLevel === '1' || commentLevel === '2' || commentLevel === '3')) {
|
||
apiParams.rating = Number(commentLevel);
|
||
}
|
||
|
||
// 添加图片筛选
|
||
if (hasImage === '1') {
|
||
apiParams.hasImages = true;
|
||
}
|
||
|
||
console.log('[评论页面] API调用参数:', apiParams);
|
||
|
||
try {
|
||
console.log('[评论页面] 开始调用fetchComments API...');
|
||
const data = await fetchComments(apiParams);
|
||
console.log('[评论页面] fetchComments API返回数据:', data);
|
||
if (data && data.comments) {
|
||
const { comments, totalCount = 0 } = data;
|
||
|
||
// 转换数据格式以匹配页面期望的结构
|
||
const pageList = comments.map((item) => ({
|
||
...item,
|
||
commentTime: dayjs(item.created_at).format('YYYY/MM/DD HH:mm'),
|
||
userName: item.user_name,
|
||
userHeadUrl: item.user_avatar,
|
||
commentScore: item.rating,
|
||
commentContent: item.content,
|
||
commentImageList: item.images || [],
|
||
commentResources: (item.images || []).map(imageUrl => ({
|
||
src: imageUrl,
|
||
type: 'image'
|
||
})),
|
||
isAnonymous: item.is_anonymous,
|
||
replyContent: item.reply_content,
|
||
specValue: item.product_spec
|
||
}));
|
||
|
||
if (Number(totalCount) === 0 && reset) {
|
||
this.setData({
|
||
commentList: [],
|
||
hasLoaded: true,
|
||
total: totalCount,
|
||
loadMoreStatus: 2,
|
||
});
|
||
return;
|
||
}
|
||
const _commentList = reset ? pageList : commentList.concat(pageList);
|
||
const _loadMoreStatus =
|
||
_commentList.length >= Number(totalCount) ? 2 : 0;
|
||
this.setData({
|
||
commentList: _commentList,
|
||
pageNum: data.pageNum || 1,
|
||
totalCount: Number(totalCount),
|
||
loadMoreStatus: _loadMoreStatus,
|
||
});
|
||
} else {
|
||
wx.showToast({
|
||
title: '查询失败,请稍候重试',
|
||
});
|
||
}
|
||
} catch (error) {}
|
||
this.setData({
|
||
hasLoaded: true,
|
||
});
|
||
},
|
||
getScoreArray(score) {
|
||
var array = [];
|
||
for (let i = 0; i < 5; i++) {
|
||
if (i < score) {
|
||
array.push(2);
|
||
} else {
|
||
array.push(0);
|
||
}
|
||
}
|
||
return array;
|
||
},
|
||
getComments(options) {
|
||
console.log('[评论页面] getComments 开始,参数:', options);
|
||
|
||
const { commentLevel = -1, spuId, hasImage = '' } = options;
|
||
if (commentLevel !== -1) {
|
||
this.setData({
|
||
commentLevel: commentLevel,
|
||
});
|
||
}
|
||
|
||
const updateData = {
|
||
hasImage: hasImage,
|
||
commentType: hasImage ? '4' : '',
|
||
spuId: spuId,
|
||
};
|
||
|
||
console.log('[评论页面] 设置评论筛选条件:', updateData);
|
||
this.setData(updateData);
|
||
|
||
console.log('[评论页面] 开始初始化评论列表...');
|
||
this.init(true);
|
||
},
|
||
|
||
// 获取我的评论列表
|
||
async getMyCommentsList() {
|
||
console.log('[评论页面] getMyCommentsList 开始');
|
||
const { myLoadStatus, myPageNum, pageSize } = this.data;
|
||
|
||
// 在加载中,直接返回
|
||
if (myLoadStatus !== 0) {
|
||
console.log('[评论页面] 跳过加载,myLoadStatus:', myLoadStatus);
|
||
return;
|
||
}
|
||
|
||
console.log('[评论页面] 设置我的评论加载状态为1');
|
||
this.setData({
|
||
myLoadStatus: 1,
|
||
});
|
||
|
||
try {
|
||
console.log('[评论页面] 开始调用fetchUserComments API...');
|
||
const data = await fetchUserComments({
|
||
page: myPageNum,
|
||
pageSize: pageSize
|
||
});
|
||
console.log('[评论页面] fetchUserComments API返回数据:', data);
|
||
|
||
if (data && data.list) {
|
||
const { list, total = 0 } = data;
|
||
|
||
// 转换数据格式以匹配页面期望的结构
|
||
const pageList = list.map((item) => ({
|
||
...item,
|
||
commentTime: dayjs(item.created_at).format('YYYY/MM/DD HH:mm'),
|
||
userName: item.user_name || '我',
|
||
userHeadUrl: item.user_avatar || 'https://tdesign.gtimg.com/miniprogram/template/retail/avatar/avatar1.png',
|
||
commentScore: item.rating,
|
||
commentContent: item.content,
|
||
commentImageList: item.images || [],
|
||
commentResources: (item.images || []).map(imageUrl => ({
|
||
src: imageUrl,
|
||
type: 'image'
|
||
})),
|
||
isAnonymous: item.is_anonymous,
|
||
replyContent: item.reply_content,
|
||
specValue: item.product_spec
|
||
}));
|
||
|
||
if (Number(total) === 0) {
|
||
this.setData({
|
||
commentList: [],
|
||
myTotal: total,
|
||
myLoadStatus: 2,
|
||
});
|
||
return;
|
||
}
|
||
|
||
const _commentList = myPageNum === 1 ? pageList : this.data.commentList.concat(pageList);
|
||
const _myLoadStatus = _commentList.length >= Number(total) ? 2 : 0;
|
||
|
||
this.setData({
|
||
commentList: _commentList,
|
||
myPageNum: myPageNum + 1,
|
||
myTotal: Number(total),
|
||
myLoadStatus: _myLoadStatus,
|
||
});
|
||
} else {
|
||
console.log('[评论页面] fetchUserComments API返回空结果或无list字段');
|
||
this.setData({
|
||
commentList: [],
|
||
myLoadStatus: 2,
|
||
});
|
||
}
|
||
} catch (error) {
|
||
console.error('[评论页面] 获取我的评论列表失败:', error);
|
||
wx.showToast({
|
||
title: '获取我的评论失败',
|
||
icon: 'none'
|
||
});
|
||
this.setData({
|
||
myLoadStatus: 0,
|
||
});
|
||
}
|
||
},
|
||
|
||
changeTag(e) {
|
||
var { commenttype } = e.currentTarget.dataset;
|
||
var { commentType } = this.data;
|
||
if (commentType === commenttype) return;
|
||
this.setData({
|
||
loadMoreStatus: 0,
|
||
commentList: [],
|
||
total: 0,
|
||
myTotal: 0,
|
||
myPageNum: 1,
|
||
pageNum: 1,
|
||
});
|
||
if (commenttype === '' || commenttype === '5') {
|
||
this.setData({
|
||
hasImage: '',
|
||
commentLevel: '',
|
||
});
|
||
} else if (commenttype === '4') {
|
||
this.setData({
|
||
hasImage: '1',
|
||
commentLevel: '',
|
||
});
|
||
} else {
|
||
this.setData({
|
||
hasImage: '',
|
||
commentLevel: commenttype,
|
||
});
|
||
}
|
||
if (commenttype === '5') {
|
||
this.setData({
|
||
myLoadStatus: 1,
|
||
commentType: commenttype,
|
||
});
|
||
this.getMyCommentsList();
|
||
} else {
|
||
this.setData({
|
||
myLoadStatus: 0,
|
||
commentType: commenttype,
|
||
});
|
||
this.init(true);
|
||
}
|
||
},
|
||
onReachBottom() {
|
||
const { total = 0, commentList } = this.data;
|
||
if (commentList.length === total) {
|
||
this.setData({
|
||
loadMoreStatus: 2,
|
||
});
|
||
return;
|
||
}
|
||
|
||
this.init(false);
|
||
},
|
||
});
|