// pages/applyRefund/applyRefund.js var http = require('../../utils/http.js'); var big = require('../../utils/big.min.js'); Page({ /** * 页面的初始数据 */ data: { refundType: 2, // 退款类型 1整单 2单个物品 // 货物状态 goodsStateArray: ['未收到货', '已收到货'], isReceiver: 0, //货物状态(1:已收到货 0:未收到货) // 退款原因(已收到货) refundProdReasonArray: ['请选择', '拍错/多拍/不喜欢', '协商一致退款', '商品破损/少件', '商品与描述不符', '卖家发错货', '质量问题', '其他'], // 退款原因(未收到货) refundPriReasonArray: ['请选择', '协商一致退款', '拍错/多拍/不喜欢', '商家一直未发货/快递一直未送达', '其他'], buyerReason: 0, //退款原因 refundItem: {}, //订单项数据 orderItemId: '', //订单项ID(单个物品退款时使用) orderNumber: '', //订单编号 applyType: 1, //退款方式(1:仅退款 2退款退货) goodsNum: 1, //退货数量(0或不传值则为全部数量) // quantity: 1, //退货数量 refundAmount: 0, //实际退款金额 maxRefundAmount: 0, //最大退款金额 buyerMobile: '', //手机号码(默认当前订单手机号码) buyerDesc: '', //备注说明 photoFiles: [], //凭证图片列表 actualTotal: 0, //总额 isLastProd: false, //是否最后一样商品 prodPrice: 0, //商品单价 addTransfee: false, //是否可以加运费(仅一件商品) orderScore: 0, // 整单使用积分 showNumAndCont: '', // 金额、积分、运费的展示(最多可退) showPriAndScore: '', // 金额、积分、运费的展示(金额+积分) }, /** * 金额、积分、运费的展示 * * refundType: 退款单类型(1:整单退款,2:单个退款) * applyType: 退款方式(1:仅退款 2退款退货) * refundAmount: 实际退款金额 * actualTotal: 总额 * orderScore: 使用积分 * refundItem.status == 2 待发货 * refundItem.transfee 运费 * isLastProd:是否最后一个订单项item */ showNumber: function() { var refundItem = this.data.refundItem var refundAmount = this.data.refundAmount var refundType = this.data.refundType var actualTotal = this.data.actualTotal var orderScore = this.data.orderScore var isLastProd = this.isLastProd var showNumAndCont = '' var showPriAndScore = '' // 待发货 if(refundItem.status == 2) { // 有金额,无运费,无积分 if(refundAmount > 0 && (!refundItem.transfee || refundItem.transfee == 0) && (!orderScore || orderScore == 0)){ // 单个退 || 整单退 if(refundType == 2 || refundType == 1) { showNumAndCont = '¥' + refundAmount showPriAndScore = '¥' + refundAmount } } // 有金额,有运费,无积分 if(actualTotal > 0 && (refundItem.transfee && refundItem.transfee > 0) && (!orderScore || orderScore == 0)) { if(isLastProd && refundType == 2) { // 单个退 && 最后一个订单项 showNumAndCont = '¥' + actualTotal + '+运费' + '¥' + refundItem.transfee // 最多可退 showPriAndScore = '¥' + refundAmount // 显示金额+积分 }else { // (单个退 && 不是最后一个订单项) || 整单退 showNumAndCont = '¥' + refundAmount // 最多可退 showPriAndScore = '¥' + refundAmount // 显示金额+积分 } } //有金额,有运费,有积分 if(actualTotal > 0 && (refundItem.transfee && refundItem.transfee > 0) && (orderScore || orderScore > 0)) { if(isLastProd && refundType == 2) { // 单个退 && 最后一个订单项 showNumAndCont = '¥' + actualTotal + '+运费' + '¥' + refundItem.transfee + '+' + orderScore + '积分' // 最多可退 showPriAndScore = '¥' + refundAmount + '+' + orderScore + '积分' // 显示金额+积分 }else { // (单个退 && 不是最后一个订单项) || 整单退 showNumAndCont = '¥' + refundAmount + '+' + orderScore + '积分' // 最多可退 showPriAndScore = '¥' + refundAmount + '+' + orderScore + '积分' // 显示金额+积分 } } //无金额,无运费,有积分 if((!refundAmount || refundAmount == 0) && (!refundItem.transfee || refundItem.transfee == 0) && (orderScore && orderScore > 0)) { // 单个退 || 整单退 if(refundType == 2 || refundType == 1){ showNumAndCont = orderScore + '积分' showPriAndScore = orderScore + '积分' } } //无金额,有运费,有积分 if((!refundAmount || refundAmount == 0)&& (refundItem.transfee && refundItem.transfee > 0) && (orderScore && orderScore > 0)) { // 单个退 || 整单退 if(refundType == 2 || refundType == 1){ showNumAndCont = '运费' + '¥' + refundItem.transfee + '+' + orderScore + '积分' showPriAndScore = '¥' + refundItem.transfee + '+' + orderScore + '积分' } } console.log('待发货(最多可退):',showNumAndCont) console.log('待发货(金额+积分):',showPriAndScore) }; // 非待发货(已发货 || 已完成)任何情况都不退运费 if(refundItem.status != 2) { // 有金额,无运费,无积分 if(refundAmount > 0 && (!refundItem.transfee || refundItem.transfee == 0) && (!orderScore || orderScore == 0)){ // 单个退 || 整单退 if(refundType == 2 || refundType == 1) { showNumAndCont= '¥' + refundAmount showPriAndScore = '¥' + refundAmount } } // 有金额,有运费,无积分 if(refundAmount > 0 && (refundItem.transfee && refundItem.transfee > 0) && (!orderScore || orderScore == 0)) { // 单个退 || 整单退 if(refundType == 2 || refundType == 1) { showNumAndCont = '¥' + refundAmount showPriAndScore = '¥' + refundAmount } } //有金额,有运费,有积分 if(refundAmount > 0 && (refundItem.transfee && refundItem.transfee > 0) && (orderScore || orderScore > 0)) { // 单个退 || 整单退 if(refundType == 2 || refundType == 1){ showNumAndCont = '¥' + refundAmount + '+' + orderScore + '积分' showPriAndScore = '¥' + refundAmount + '+' + orderScore + '积分' // 显示金额+积分 } } //无金额,无运费,有积分 if((!refundAmount || refundAmount == 0) && (!refundItem.transfee || refundItem.transfee == 0) && (orderScore && orderScore > 0)) { // 单个退 || 整单退 if(refundType == 2 || refundType == 1){ showNumAndCont = orderScore + '积分' showPriAndScore = orderScore + '积分' // 显示金额+积分 } } //无金额,有运费,有积分 if((!refundAmount || refundAmount == 0)&& (refundItem.transfee && refundItem.transfee > 0) && (orderScore && orderScore > 0)) { // 单个退 || 整单退 if(refundType == 2 || refundType == 1){ showNumAndCont = orderScore + '积分' showPriAndScore = orderScore + '积分' // 显示金额+积分 } } console.log('已发货(最多可退):',showNumAndCont) console.log('已发货(金额+积分):',showPriAndScore) } this.setData({ showNumAndCont, showPriAndScore }) console.log('最多可退showNumAndCont:',this.data.showNumAndCont) console.log('金额+积分showPriAndScore:',this.data.showPriAndScore) }, /** * 退款原因选择 * refundType: 退款类型 1整单 2单个物品 * refundItem.status: 2待发货 * isReceiver: 货物状态(1:已收到货 0:未收到货) * applyType: 1仅退款 2退货退款 */ returnReasonList: function() { if(this.data.applyType == 2) { this.setData({ isReceiver: 1 // 已收到货 }) }else { this.setData({ isReceiver: 0 // 已收到货 }) } console.log('isReceiver货物状态(1:已收到货 0:未收到货)',this.data.isReceiver) }, /** * 货物状态picker选择 */ goodsStateArray: function(e) { console.log('货物状态', e.detail.value) this.setData({ isReceiver: e.detail.value, buyerReason: 0 }) }, /** * 退款原因picker选择 */ refundReasonChange: function(e) { console.log('退款原因', e.detail.value) this.setData({ buyerReason: e.detail.value }) }, /** * 生命周期函数--监听页面加载 */ onLoad: function(options) { console.log(options,'----参数'); // 拿到上一页的参数type(判断退款方式) // console.log('type:',options.type) if (options.type) { this.setData({ applyType: options.type // 1仅退款 2退货退款 }) // console.log(this.data.type) } // console.log('refundType:',options.refundType) this.setData({ refundType: options.refundType // 退款类型 1整单 2单个物品 }) console.log('refundType(退款类型 1整单 2单个物品)',this.data.refundType) this.getRefundProdInfo() //获取退款商品信息 }, /** * 获取退款商品信息 */ getRefundProdInfo: function() { let refundType = this.data.refundType // 退款类型 1整单 2单个物品 //拿到缓存里的订单项数据 var refundItem = wx.getStorageSync("refundItem"); console.log('拿到缓存里的订单项数据refundItem:',refundItem) this.setData({ refundItem: refundItem, orderNumber: refundItem.orderNumber, goodsNum: refundItem.prodCount, actualTotal: refundItem.actualTotal, //总额 isLastProd: refundItem.isLastProd, //是否最后一样商品 addTransfee: refundItem.addTransfee, //只有一件商品可以退运费 orderScore: refundItem.useScore // 单个退积分 }) console.log('单个退orderScore:',this.data.orderScore) // console.log('platformShareReduce:',this.data.refundItem.platformShareReduce) // console.log(refundItem.isLastProd) if(refundType == 1) { //整单退款 this.setData({ orderItemDtos: refundItem.orderItemDtos, //商品列表 orderScore: refundItem.orderScore, //整单积分 }); console.log('整单退orderScore:',this.data.orderScore) } let actualTotal = this.data.actualTotal //商品总额(不含运费) let prodCount = refundItem.prodCount //商品总数 // console.log('商品总数prodCount',prodCount) // console.log('商品总额(不含运费)actualTotal',actualTotal) if(refundType == 2) { //单个退 // 计算商品单价 if(prodCount > 0) { var x = new big(actualTotal) var y = new big(prodCount) // 保留两位小数 big.DP = 2 // 向下取整 big.RM = 1 let prodPrice = x.div(y).valueOf() //商品单价 this.setData({ prodPrice }) // console.log(this.prodPrice) } } this.returnReasonList() // 退款原因选择列表展示 this.refundAmount() //退款金额计算 }, /** * 退款金额计算 */ refundAmount: function() { let actualTotal = this.data.actualTotal // console.log('总额this.data.actualTotal:',this.data.actualTotal) let refundItem = this.data.refundItem // console.log('商品item,this.data.refundItem:',this.data.refundItem) let refundType = this.data.refundType // 退款类型 1整单 2单个物品 // console.log('refundType退款类型 1整单 2单个物品:',this.data.refundType) // console.log('addTransfee是否可加运费:',this.addTransfee) if (refundItem.status == 2) { //待发货状态 if(refundType == 2) { //单个退, if(refundItem.isLastProd) { //如果是最后一个可退运费(actualTotal总额不包含运费) this.setData({ refundAmount: actualTotal + refundItem.transfee, }); // console.log('运费:',refundItem.transfee,'+总额:',actualTotal) // console.log('待发货单个退(最后一个)金额:',this.data.refundAmount) }else { //否则不退 this.setData({ refundAmount: actualTotal, }); if(this.addTransfee) { // 如果是只有一个商品,可退运费 this.setData({ refundAmount: actualTotal + refundItem.transfee, }); // console.log('单个退加运费可退总额:',this.refundAmount) } // console.log('运费:',refundItem.transfee,'+总额:',actualTotal) // console.log('待发货单个退(不是最后一个)金额:',this.data.refundAmount) } } else if(refundType == 1) { //整单退,退实际金额(actualTotal总额包含运费) this.setData({ refundAmount: actualTotal, }); // console.log('运费:',refundItem.transfee) // console.log('待发货整单退金额:',this.data.refundAmount) } } else if (refundItem.status != 2) { // 已发货订单(整单退运费(总额包含运费);单个不退运费(总额不包含运费)) this.setData({ refundAmount: actualTotal, }); // console.log('运费:',refundItem.transfee) // console.log('已发货整单退金额:',this.data.refundAmount) } this.showNumber() // 金额、积分、运费的显示 }, /** * 改变商品数量重新计算价格(数量加减) */ changePordNum(e) { var st = e.currentTarget.dataset.st; let actualTotal = this.data.actualTotal //商品总额(不含运费) var prodCount = this.data.refundItem.prodCount //商品总数 if(st == 0){ var goodsNum = this.data.goodsNum - 1 //展示的商品总数 }else if(st == 1) { var goodsNum = this.data.goodsNum + 1 //展示的商品总数 } if(goodsNum < 1) { wx.showToast({ title: '退货数量不能小于1!', icon: 'none', }) return } if(goodsNum > prodCount) { wx.showToast({ title: '退货数量不能大于订单商品数量!', icon: 'none', }) return } big.DP = 2 // big.RM = 0 this.setData({ goodsNum, refundAmount: new big(actualTotal).times(goodsNum).div(prodCount).valueOf() }) }, /** * 上传图片 */ getUploadImg: function(e) { var idx = e.target.dataset.idx // console.log(idx); var ths = this; wx.chooseMedia({ count: 1, // 默认9 mediaType: ['image'], sourceType: ['album', 'camera'], maxDuration: 30, success: function(res) { // 图片的本地临时文件路径列表 var tempFilePaths = res.tempFiles[0].tempFilePath; wx.showLoading({ mask: true }) var params = { url: "/p/file/upload", filePath: tempFilePaths, name: 'file', callBack: function(res2) { wx.hideLoading(); var img = {}; img.path = JSON.parse(res2).filePath; img.url = JSON.parse(res2).resourcesUrl + JSON.parse(res2).filePath; var photoFiles = ths.data.photoFiles; photoFiles.push(img); ths.setData({ photoFiles: photoFiles }) } }; http.upload(params); } }) }, /** * 删除图片 */ removeImage: function(e) { var idx = e.currentTarget.dataset.idx; var photoFiles = this.data.photoFiles; photoFiles.splice(idx, 1) this.setData({ photoFiles: photoFiles }); console.log('删除图片') }, /** * 申请退款 */ applyRefund: function () { var myreg = /^1(3|4|5|6|7|8|9)\d{9}$/; var pics = ''; this.data.photoFiles.forEach(function (item) { pics += item.path + ','; }); if (pics != '') { pics = pics.substring(0, pics.length - 1) } // 检查数据完整性 if (this.data.buyerReason == 0) { wx.showToast({ icon: 'none', title: '请选择退款原因', }) } else if (this.data.actualTotal < 0){ wx.showToast({ icon: 'none', title: '请填写正确的退款金额', }) } else if (this.data.buyerMobile.length !== 11 || !myreg.test(this.data.buyerMobile)) { // console.log(this.data.buyerMobile) wx.showToast({ icon: 'none', title: '请填写正确的手机号码', }) } else if (this.data.buyerDesc.length == 0) { wx.showToast({ icon: 'none', title: '请填写退款说明', }) }else{ console.log('status:',this.data.refundItem.status) console.log('isLastProd:',this.data.isLastProd) var refundReasonArray; var refundReasonArray; if(this.data.isReceiver == 0) { // 未收货 refundReasonArray = this.data.refundPriReasonArray }else if(this.data.isReceiver == 1) { // 已收货 refundReasonArray = this.data.refundProdReasonArray } if(this.data.refundItem.status == 2 && this.data.isLastProd ) { //待发货(包含运费)并且是最后一件 console.log('待发货并且是最后一件') console.log(this.data.isLastProd) wx.showModal({ title: '提示', content: '本次申请的退款商品是本单最后一件商品,退款金额中包含本单运费,一旦提交申请,本单所有商品的退款申请均不可撤销,是否确认提交', success: res => { if (res.confirm) { console.log('用户点击确定') wx.showLoading(); var params = { url: "/p/orderRefund/apply", method: "POST", data: { orderNumber: this.data.orderNumber, //订单编号 applyType: this.data.applyType, //退款方式(1:仅退款 2退款退货) isReceiver: Number(this.data.isReceiver), //货物状态(1:已收到货 0:未收到货) buyerReason: refundReasonArray[this.data.buyerReason], //退款原因 goodsNum: this.data.goodsNum, //退款数量(0或不传值则为全部数量) refundAmount: this.data.refundAmount, //退款金额 buyerMobile: this.data.buyerMobile, //手机号码(默认当前订单手机号码) buyerDesc: this.data.buyerDesc, //备注说明 photoFiles: pics, //凭证图片列表 refundType: this.data.refundType, //退款单类型(1:整单退款,2:单个物品退款) orderItemId: this.data.refundItem.orderItemId }, callBack: (res) => { wx.hideLoading(); // 去到我的退款订单页面 wx.redirectTo({ url: '/pages/afterSales/afterSales', }) } }; http.request(params); } else if (res.cancel) { console.log('用户点击取消') } } }) } else { console.log('非待发货(包含运费)或者非是最后一件') console.log(this.data.isLastProd) wx.showLoading(); var params = { url: "/p/orderRefund/apply", method: "POST", data: { orderNumber: this.data.orderNumber, //订单编号 applyType: this.data.applyType, //退款方式(1:仅退款 2退款退货) isReceiver: Number(this.data.isReceiver), //货物状态(1:已收到货 0:未收到货) buyerReason: refundReasonArray[this.data.buyerReason], //退款原因 goodsNum: this.data.goodsNum, //退款数量(0或不传值则为全部数量) refundAmount: this.data.refundAmount, //退款金额 buyerMobile: this.data.buyerMobile, //手机号码(默认当前订单手机号码) buyerDesc: this.data.buyerDesc, //备注说明 photoFiles: pics, //凭证图片列表 refundType: this.data.refundType, //退款单类型(1:整单退款,2:单个物品退款) orderItemId: this.data.refundItem.orderItemId }, callBack: (res) => { wx.hideLoading(); // 去到我的退款订单页面 wx.redirectTo({ url: '/pages/afterSales/afterSales', }) } }; http.request(params); } } }, /** * 修改退款申请 */ alterRefundApply: function(e) { }, /** * 将获取到的input内容放进数据里 */ onDescInput: function(e) { this.setData({ buyerDesc: e.detail.value }); }, onRefInput: function(e) { this.setData({ refundAmount: e.detail.value }) }, onMobileInput: function(e) { this.setData({ buyerMobile: e.detail.value }) }, /** * 退款图片预览 */ refundPicPreView(e) { var idx = e.currentTarget.dataset.idx var urls = [] this.data.photoFiles.forEach(el => { urls.push(el.url) }) wx.previewImage({ current: urls[idx], urls: urls }) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function() { }, /** * 生命周期函数--监听页面显示 */ onShow: function() { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function() { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function() { }, /** * 用户点击右上角分享 */ onShareAppMessage: function() { } })