223 lines
5.5 KiB
JavaScript
223 lines
5.5 KiB
JavaScript
|
|
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();
|
||
|
|
}
|
||
|
|
},
|
||
|
|
});
|