206 lines
6.4 KiB
JavaScript
206 lines
6.4 KiB
JavaScript
import Toast from 'tdesign-miniprogram/toast/index';
|
|
import { ServiceType, ServiceTypeDesc, ServiceStatus } from '../config';
|
|
import { formatTime, getRightsDetail } from './api';
|
|
|
|
const TitleConfig = {
|
|
[ServiceType.ORDER_CANCEL]: '退款详情',
|
|
[ServiceType.ONLY_REFUND]: '退款详情',
|
|
[ServiceType.RETURN_GOODS]: '退货退款详情',
|
|
};
|
|
|
|
Page({
|
|
data: {
|
|
pageLoading: true,
|
|
serviceRaw: {},
|
|
service: {},
|
|
deliveryButton: {},
|
|
gallery: {
|
|
current: 0,
|
|
show: false,
|
|
proofs: [],
|
|
},
|
|
showProofs: false,
|
|
backRefresh: false,
|
|
},
|
|
|
|
onLoad(query) {
|
|
this.rightsNo = query.rightsNo;
|
|
this.inputDialog = this.selectComponent('#input-dialog');
|
|
this.init();
|
|
},
|
|
|
|
onShow() {
|
|
// 当从其他页面返回,并且 backRefresh 被置为 true 时,刷新数据
|
|
if (!this.data.backRefresh) return;
|
|
this.init();
|
|
this.setData({ backRefresh: false });
|
|
},
|
|
|
|
// 页面刷新,展示下拉刷新
|
|
onPullDownRefresh_(e) {
|
|
const { callback } = e.detail;
|
|
return this.getService().then(() => callback && callback());
|
|
},
|
|
|
|
init() {
|
|
this.setData({ pageLoading: true });
|
|
this.getService().then(() => {
|
|
this.setData({ pageLoading: false });
|
|
});
|
|
},
|
|
|
|
getService() {
|
|
const params = { rightsNo: this.rightsNo };
|
|
return getRightsDetail(params).then((res) => {
|
|
const serviceRaw = res.data[0];
|
|
// 滤掉填写运单号、修改运单号按钮,这两个按钮特殊处理,不在底部按钮栏展示
|
|
if (!serviceRaw.buttonVOs) serviceRaw.buttonVOs = [];
|
|
const deliveryButton = {};
|
|
const service = {
|
|
id: serviceRaw.rights.rightsNo,
|
|
serviceNo: serviceRaw.rights.rightsNo,
|
|
storeName: serviceRaw.rights.storeName,
|
|
type: serviceRaw.rights.rightsType,
|
|
typeDesc: ServiceTypeDesc[serviceRaw.rights.rightsType],
|
|
status: serviceRaw.rights.rightsStatus,
|
|
statusIcon: this.genStatusIcon(serviceRaw.rights),
|
|
statusName: serviceRaw.rights.userRightsStatusName,
|
|
statusDesc: serviceRaw.rights.userRightsStatusDesc,
|
|
amount: serviceRaw.rights.refundRequestAmount,
|
|
goodsList: (serviceRaw.rightsItem || []).map((item, i) => ({
|
|
id: i,
|
|
thumb: item.goodsPictureUrl,
|
|
title: item.goodsName,
|
|
specs: (item.specInfo || []).map((s) => s.specValues || ''),
|
|
itemRefundAmount: item.itemRefundAmount,
|
|
rightsQuantity: item.rightsQuantity,
|
|
})),
|
|
orderNo: serviceRaw.rights.orderNo, // 订单编号
|
|
rightsNo: serviceRaw.rights.rightsNo, // 售后服务单号
|
|
rightsReasonDesc: serviceRaw.rights.rightsReasonDesc, // 申请售后原因
|
|
isRefunded: serviceRaw.rights.userRightsStatus === ServiceStatus.REFUNDED, // 是否已退款
|
|
refundMethodList: (serviceRaw.refundMethodList || []).map((m) => ({
|
|
name: m.refundMethodName,
|
|
amount: m.refundMethodAmount,
|
|
})), // 退款明细
|
|
refundRequestAmount: serviceRaw.rights.refundRequestAmount, // 申请退款金额
|
|
payTraceNo: serviceRaw.rightsRefund.traceNo, // 交易流水号
|
|
createTime: formatTime(parseFloat(`${serviceRaw.rights.createTime}`), 'YYYY-MM-DD HH:mm'), // 申请时间
|
|
logisticsNo: serviceRaw.logisticsVO.logisticsNo, // 退货物流单号
|
|
logisticsCompanyName: serviceRaw.logisticsVO.logisticsCompanyName, // 退货物流公司
|
|
logisticsCompanyCode: serviceRaw.logisticsVO.logisticsCompanyCode, // 退货物流公司
|
|
remark: serviceRaw.logisticsVO.remark, // 退货备注
|
|
receiverName: serviceRaw.logisticsVO.receiverName, // 收货人
|
|
receiverPhone: serviceRaw.logisticsVO.receiverPhone, // 收货人电话
|
|
receiverAddress: this.composeAddress(serviceRaw), // 收货人地址
|
|
applyRemark: serviceRaw.rightsRefund.refundDesc, // 申请退款时的填写的说明
|
|
buttons: serviceRaw.buttonVOs || [],
|
|
logistics: serviceRaw.logisticsVO,
|
|
};
|
|
const proofs = serviceRaw.rights.rightsImageUrls || [];
|
|
this.setData({
|
|
serviceRaw,
|
|
service,
|
|
deliveryButton,
|
|
'gallery.proofs': proofs,
|
|
showProofs:
|
|
serviceRaw.rights.userRightsStatus === ServiceStatus.PENDING_VERIFY &&
|
|
(service.applyRemark || proofs.length > 0),
|
|
});
|
|
wx.setNavigationBarTitle({
|
|
title: TitleConfig[service.type],
|
|
});
|
|
});
|
|
},
|
|
|
|
composeAddress(service) {
|
|
return [
|
|
service.logisticsVO.receiverProvince,
|
|
service.logisticsVO.receiverCity,
|
|
service.logisticsVO.receiverCountry,
|
|
service.logisticsVO.receiverArea,
|
|
service.logisticsVO.receiverAddress,
|
|
]
|
|
.filter((item) => !!item)
|
|
.join(' ');
|
|
},
|
|
|
|
onRefresh() {
|
|
this.init();
|
|
},
|
|
|
|
editLogistices() {
|
|
this.setData({
|
|
inputDialogVisible: true,
|
|
});
|
|
this.inputDialog.setData({
|
|
cancelBtn: '取消',
|
|
confirmBtn: '确定',
|
|
});
|
|
this.inputDialog._onConfirm = () => {
|
|
Toast({
|
|
message: '确定填写物流单号',
|
|
});
|
|
};
|
|
},
|
|
|
|
onProofTap(e) {
|
|
if (this.data.gallery.show) {
|
|
this.setData({
|
|
'gallery.show': false,
|
|
});
|
|
return;
|
|
}
|
|
const { index } = e.currentTarget.dataset;
|
|
this.setData({
|
|
'gallery.show': true,
|
|
'gallery.current': index,
|
|
});
|
|
},
|
|
|
|
onGoodsCardTap(e) {
|
|
const { index } = e.currentTarget.dataset;
|
|
const goods = this.data.serviceRaw.rightsItem[index];
|
|
wx.navigateTo({ url: `/pages/goods/details/index?skuId=${goods.skuId}` });
|
|
},
|
|
|
|
onServiceNoCopy() {
|
|
wx.setClipboardData({
|
|
data: this.data.service.serviceNo,
|
|
});
|
|
},
|
|
|
|
onAddressCopy() {
|
|
wx.setClipboardData({
|
|
data: `${this.data.service.receiverName} ${this.data.service.receiverPhone}\n${this.data.service.receiverAddress}`,
|
|
});
|
|
},
|
|
|
|
/** 获取状态ICON */
|
|
genStatusIcon(item) {
|
|
const { userRightsStatus, afterSaleRequireType } = item;
|
|
switch (userRightsStatus) {
|
|
// 退款成功
|
|
case ServiceStatus.REFUNDED: {
|
|
return 'succeed';
|
|
}
|
|
// 已取消、已关闭
|
|
case ServiceStatus.CLOSED: {
|
|
return 'indent_close';
|
|
}
|
|
default: {
|
|
switch (afterSaleRequireType) {
|
|
case 'REFUND_MONEY': {
|
|
return 'goods_refund';
|
|
}
|
|
case 'REFUND_GOODS_MONEY':
|
|
return 'goods_return';
|
|
default: {
|
|
return 'goods_return';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
});
|