Files
ai_dianshang/miniprogram/pages/goods/comments/create/index.js

223 lines
5.5 KiB
JavaScript
Raw Normal View History

2025-11-17 13:32:54 +08:00
import { createComment } from '../../../../services/comments/createComment';
import Toast from 'tdesign-miniprogram/toast/index';
Page({
data: {
serviceRateValue: 5,
goodRateValue: 5,
conveyRateValue: 5,
isAnonymous: false,
uploadFiles: [],
images: [],
gridConfig: {
width: 218,
height: 218,
column: 3,
},
isAllowedSubmit: false,
submitting: false,
imgUrl: '',
title: '',
goodsDetail: '',
orderNo: '',
goodsId: '',
maxImages: 9,
imageProps: {
mode: 'aspectFit',
},
},
onLoad(options) {
console.log('评价页面加载参数:', options);
this.setData({
imgUrl: options.imgUrl ? decodeURIComponent(options.imgUrl) : '',
title: options.title ? decodeURIComponent(options.title) : '',
goodsDetail: options.specs ? decodeURIComponent(options.specs) : '',
orderNo: options.orderNo || '',
goodsId: options.goodsId || '',
});
this.updateButtonStatus();
},
onRateChange(e) {
const { value } = e?.detail;
const item = e?.currentTarget?.dataset?.item;
this.setData({ [item]: value }, () => {
this.updateButtonStatus();
});
},
onAnonymousChange(e) {
const status = !!e?.detail?.checked;
this.setData({ isAnonymous: status });
},
handleSuccess(e) {
// 兼容原有的上传组件
const { files } = e.detail;
const images = files.map(file => file.url);
this.setData({
uploadFiles: files,
images
});
},
handleRemove(e) {
const { index } = e.detail;
const { uploadFiles, images } = this.data;
uploadFiles.splice(index, 1);
images.splice(index, 1);
this.setData({
uploadFiles,
images
});
},
// 上传图片到服务器
async uploadImages(images) {
if (!images || images.length === 0) return [];
const uploadPromises = images.map(imagePath => {
return new Promise((resolve, reject) => {
const uploadUrl = `${getApp().globalData.config.apiBaseUrl}/upload/image`;
const token = wx.getStorageSync('token');
console.log('上传URL:', uploadUrl);
console.log('Token:', token);
wx.uploadFile({
url: uploadUrl,
filePath: imagePath,
name: 'file',
header: {
'Authorization': `Bearer ${token}`
},
success: (res) => {
try {
const data = JSON.parse(res.data);
if (data.code === 200) {
resolve(data.data.url);
} else {
reject(new Error(data.message || '上传失败'));
}
} catch (e) {
reject(new Error('解析上传结果失败'));
}
},
fail: reject
});
});
});
return Promise.all(uploadPromises);
},
onTextAreaChange(e) {
const value = e?.detail?.value;
this.textAreaValue = value;
this.updateButtonStatus();
},
updateButtonStatus() {
const { serviceRateValue, goodRateValue, conveyRateValue, submitting } = this.data;
const { textAreaValue } = this;
const temp = serviceRateValue && goodRateValue && conveyRateValue && textAreaValue && !submitting;
this.setData({ isAllowedSubmit: temp });
},
async onSubmitBtnClick() {
const {
isAllowedSubmit,
submitting,
serviceRateValue,
goodRateValue,
conveyRateValue,
isAnonymous,
images,
orderNo,
goodsId
} = this.data;
if (!isAllowedSubmit || submitting) return;
const content = this.textAreaValue;
if (!content || !content.trim()) {
Toast({
context: this,
selector: '#t-toast',
message: '请输入评价内容',
icon: 'error-circle',
});
return;
}
this.setData({ submitting: true });
this.updateButtonStatus();
try {
// 上传图片
let uploadedImages = [];
if (images.length > 0) {
Toast({
context: this,
selector: '#t-toast',
message: '正在上传图片...',
icon: 'loading',
});
uploadedImages = await this.uploadImages(images);
}
// 计算综合评分(取三个评分的平均值)
const averageRating = Math.round((serviceRateValue + goodRateValue + conveyRateValue) / 3);
// 提交评论
const commentData = {
orderNo: orderNo,
productId: goodsId,
rating: averageRating,
content: content.trim(),
images: uploadedImages,
isAnonymous: isAnonymous
};
console.log('提交评论数据:', commentData);
await createComment(commentData);
Toast({
context: this,
selector: '#t-toast',
message: '评价提交成功',
icon: 'check-circle',
});
// 设置上一页刷新标志
const pages = getCurrentPages();
const prevPage = pages[pages.length - 2]; // 上一页(订单详情页)
if (prevPage) {
prevPage.setData({ backRefresh: true });
}
// 延迟返回上一页
setTimeout(() => {
wx.navigateBack({
delta: 1
});
}, 1500);
} catch (error) {
console.error('提交评价失败:', error);
Toast({
context: this,
selector: '#t-toast',
message: error.message || '提交失败,请重试',
icon: 'error-circle',
});
} finally {
this.setData({ submitting: false });
this.updateButtonStatus();
}
},
});