From 573f8800bb46dedd4ee9098c371c30d367da28c1 Mon Sep 17 00:00:00 2001 From: "AERWEN\\26795" <123456789a> Date: Wed, 25 Oct 2023 00:43:30 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=B7=BB=E5=8A=A0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/order/after-service-detail/index.js | 2 +- pages/order/after-service-detail/index.wxml | 6 +- pages/order/apply-service/index.js | 364 +++++++++++++----- pages/order/apply-service/index.wxml | 37 +- .../after-service-button-bar/index.js | 2 +- .../components/order-button-bar/index.js | 44 +-- .../selectCoupons/selectCoupons.wxml | 2 +- pages/order/order-list/index.wxml | 2 +- services/order/addOrderRefund.js | 21 + services/order/getRefundReason.js | 22 ++ 10 files changed, 372 insertions(+), 130 deletions(-) create mode 100644 services/order/addOrderRefund.js create mode 100644 services/order/getRefundReason.js diff --git a/pages/order/after-service-detail/index.js b/pages/order/after-service-detail/index.js index 619d9da..b50626f 100644 --- a/pages/order/after-service-detail/index.js +++ b/pages/order/after-service-detail/index.js @@ -87,7 +87,7 @@ Page({ // name: m.refundMethodName, // amount: m.refundMethodAmount, // })), // 退款明细 - refundRequestAmount: serviceRaw.refundRequestAmount, // 申请退款金额 + refundRequestAmount: serviceRaw.refundMoney, // 申请退款金额 // payTraceNo: serviceRaw.rightsRefund.traceNo, // 交易流水号 createTime: serviceRaw.createTime, // 申请时间 logisticsNo: serviceRaw.trajectoryVos?.logisticsCompanyCode, // 退货物流单号 diff --git a/pages/order/after-service-detail/index.wxml b/pages/order/after-service-detail/index.wxml index 8e9c217..c2e7ab7 100644 --- a/pages/order/after-service-detail/index.wxml +++ b/pages/order/after-service-detail/index.wxml @@ -20,7 +20,7 @@ title="{{service.isRefunded ? '退款金额' : '预计退款金额'}}" bordered="{{false}}" > - + - + - + { - wx.redirectTo({ url: 'pages/order/order-list/index' }); + wx.redirectTo({ + url: 'pages/order/order-list/index' + }); }); return false; } @@ -133,33 +181,40 @@ Page({ }, async refresh() { - wx.showLoading({ title: 'loading' }); + wx.showLoading({ + title: 'loading' + }); try { - const res = await this.getRightsPreview(); + // const res = await this.getRightsPreview(); + const { + orderNo, + orderAmt, + goodsList, + freightFee + } = this.query; wx.hideLoading(); - const goodsInfo = { - id: res.data.skuId, - thumb: res.data.goodsInfo && res.data.goodsInfo.skuImage, - title: res.data.goodsInfo && res.data.goodsInfo.goodsName, - spuId: res.data.spuId, - skuId: res.data.skuId, - specs: ((res.data.goodsInfo && res.data.goodsInfo.specInfo) || []).map((s) => s.specValue), - paidAmountEach: res.data.paidAmountEach, - boughtQuantity: res.data.boughtQuantity, - }; + // const goodsInfo = { + // id: res.data.skuId, + // thumb: res.data.goodsInfo && res.data.goodsInfo.skuImage, + // title: res.data.goodsInfo && res.data.goodsInfo.goodsName, + // spuId: res.data.spuId, + // skuId: res.data.skuId, + // specs: ((res.data.goodsInfo && res.data.goodsInfo.specInfo) || []).map((s) => s.specValue), + // paidAmountEach: res.data.paidAmountEach, + // boughtQuantity: res.data.boughtQuantity, + // }; this.setData({ - goodsInfo, + // goodsInfo, + goodsList: JSON.parse(goodsList), 'serviceFrom.amount': { - max: res.data.refundableAmount, - current: res.data.refundableAmount, + max: orderAmt, + current: orderAmt, }, - 'serviceFrom.returnNum': res.data.numOfSku, - amountTip: `最多可申请退款¥ ${priceFormat(res.data.refundableAmount, 2)},含发货运费¥ ${priceFormat( - res.data.shippingFeeIncluded, - 2, - )}`, - maxApplyNum: res.data.numOfSkuAvailable, + // 'serviceFrom.returnNum': res.data.numOfSku, + amountTip: `最多可申请退款¥ ${orderAmt},含发货运费¥ ${freightFee}`, + // maxApplyNum: res.data.numOfSkuAvailable, }); + console.log(this.data, 'asdasdasdasdasd'); } catch (err) { wx.hideLoading(); throw err; @@ -167,7 +222,11 @@ Page({ }, async getRightsPreview() { - const { orderNo, skuId, spuId } = this.query; + const { + orderNo, + skuId, + spuId + } = this.query; const params = { orderNo, skuId, @@ -179,14 +238,23 @@ Page({ }, onApplyOnlyRefund() { - wx.setNavigationBarTitle({ title: '申请退款' }); - this.setData({ serviceRequireType: 'REFUND_MONEY' }); + wx.setNavigationBarTitle({ + title: '申请退款' + }); + this.setData({ + serviceRequireType: 'REFUND_MONEY', + serviceType: ServiceType.ONLY_REFUND + }); this.switchReceiptStatus(0); }, onApplyReturnGoods() { - wx.setNavigationBarTitle({ title: '申请退货退款' }); - this.setData({ serviceRequireType: 'REFUND_GOODS' }); + wx.setNavigationBarTitle({ + title: '申请退货退款' + }); + this.setData({ + serviceRequireType: 'REFUND_GOODS' + }); const orderStatus = parseInt(this.query.orderStatus); Promise.resolve() .then(() => { @@ -208,7 +276,9 @@ Page({ return; }) .then(() => { - this.setData({ serviceType: ServiceType.RETURN_GOODS }); + this.setData({ + serviceType: ServiceType.RETURN_GOODS + }); this.switchReceiptStatus(1); }); }, @@ -231,7 +301,9 @@ Page({ }, onChangeReturnNum(e) { - const { value } = e.detail; + const { + value + } = e.detail; this.setData({ 'serviceFrom.returnNum': value, }); @@ -259,34 +331,48 @@ Page({ if (!statusItem) { this.setData({ showReceiptStatusDialog: false, - 'serviceFrom.receiptStatus': { desc: '请选择', status: null }, - 'serviceFrom.applyReason': { desc: '请选择', type: null }, // 收货状态改变时,初始化申请原因 + 'serviceFrom.receiptStatus': { + desc: '请选择', + status: null + }, + 'serviceFrom.applyReason': { + desc: '请选择', + type: null + }, // 收货状态改变时,初始化申请原因 applyReasons: [], }); return; } // 仅选中项与当前项不一致时,才切换申请原因列表applyReasons if (!statusItem || statusItem.status === this.data.serviceFrom.receiptStatus.status) { - this.setData({ showReceiptStatusDialog: false }); + this.setData({ + showReceiptStatusDialog: false + }); return; } this.getApplyReasons(statusItem.status).then((reasons) => { this.setData({ showReceiptStatusDialog: false, 'serviceFrom.receiptStatus': statusItem, - 'serviceFrom.applyReason': { desc: '请选择', type: null }, // 收货状态改变时,重置申请原因 + 'serviceFrom.applyReason': { + desc: '请选择', + type: null + }, // 收货状态改变时,重置申请原因 applyReasons: reasons, }); }); }, + // 获取退款原因列表 getApplyReasons(receiptStatus) { - const params = { rightsReasonType: receiptStatus }; - return fetchApplyReasonList(params) + const params = { + rightsReasonType: receiptStatus + }; + return getRefundReason(params) .then((res) => { - return res.data.rightsReasonList.map((reason) => ({ - type: reason.id, - desc: reason.desc, + return res.data.map((reason) => ({ + type: reason.dictValue, + desc: reason.dictLabel, })); }) .catch(() => { @@ -295,13 +381,15 @@ Page({ }, onReceiptStatusDialogConfirm(e) { - const { index } = e.currentTarget.dataset; + const { + index + } = e.currentTarget.dataset; this.switchReceiptStatus(index); }, onAmountTap() { this.setData({ - 'serviceFrom.amount.temp': priceFormat(this.data.serviceFrom.amount.current), + 'serviceFrom.amount.temp': this.data.serviceFrom.amount.current, 'serviceFrom.amount.focus': true, inputDialogVisible: true, }); @@ -319,15 +407,21 @@ Page({ // 对输入的值进行过滤 onAmountInput(e) { - let { value } = e.detail; + let { + value + } = e.detail; const regRes = value.match(/\d+(\.?\d*)?/); // 输入中,允许末尾为小数点 value = regRes ? regRes[0] : ''; - this.setData({ 'serviceFrom.amount.temp': value }); + this.setData({ + 'serviceFrom.amount.temp': value + }); }, // 失去焦点时,更严格的过滤并转化为float onAmountBlur(e) { - let { value } = e.detail; + let { + value + } = e.detail; const regRes = value.match(/\d+(\.?\d+)?/); // 失去焦点时,不允许末尾为小数点 value = regRes ? regRes[0] : '0'; value = parseFloat(value) * 100; @@ -341,61 +435,72 @@ Page({ }, onAmountFocus() { - this.setData({ 'serviceFrom.amount.focus': true }); + this.setData({ + 'serviceFrom.amount.focus': true + }); }, onRemarkChange(e) { - const { value } = e.detail; + const { + value + } = e.detail; this.setData({ 'serviceFrom.remark': value, }); }, - // 发起申请售后请求 + // 发起申请售后请求 提交 onSubmit() { this.submitCheck().then(() => { const params = { - rights: { - orderNo: this.query.orderNo, - refundRequestAmount: this.data.serviceFrom.amount.current, - rightsImageUrls: this.data.serviceFrom.rightsImageUrls, - rightsReasonDesc: this.data.serviceFrom.applyReason.desc, - rightsReasonType: this.data.serviceFrom.receiptStatus.status, - rightsType: this.data.serviceType, - }, - rightsItem: [ - { - itemTotalAmount: this.data.goodsInfo.price * this.data.serviceFrom.returnNum, - rightsQuantity: this.data.serviceFrom.returnNum, - skuId: this.query.skuId, - spuId: this.query.spuId, - }, - ], - refundMemo: this.data.serviceFrom.remark.current, + orderGuid: this.query.orderGuid, + refundType: this.data.serviceType, + goodsReceiveStatus: this.data.serviceFrom.receiptStatus.status, + RefundReason: this.data.serviceFrom.applyReason.type, + CustomerRefundDesc: this.data.serviceFrom.remark, + RefundMoney: this.data.serviceFrom.amount.current, + CustomerRefundImg: "", }; - this.setData({ submitting: true }); + if(this.data.sessionFrom.rightsImageUrls){ + if(this.data.sessionFrom.rightsImageUrls.length != 0){ + params.CustomerRefundImg = this.data.sessionFrom.rightsImageUrls.map(item => item.url).join(',') + } + } + console.log(params); + this.setData({ + submitting: true + }); // 发起申请售后请求 - dispatchApplyService(params) + addOrderRefund(params) .then((res) => { - Toast({ - context: this, - selector: '#t-toast', - message: '申请成功', - icon: '', - }); - - wx.redirectTo({ - url: `/pages/order/after-service-detail/index?rightsNo=${res.data.rightsNo}`, - }); + if(res.code === 200){ + Toast({ + context: this, + selector: '#t-toast', + message: '申请成功', + icon: '', + }); + + wx.redirectTo({ + url: `/pages/order/after-service-list/index`, + }); + } }) - .then(() => this.setData({ submitting: false })) - .catch(() => this.setData({ submitting: false })); + .then(() => this.setData({ + submitting: false + })) + .catch(() => this.setData({ + submitting: false + })); }); }, submitCheck() { return new Promise((resolve) => { - const { msg, valid } = this.data.validateRes; + const { + msg, + valid + } = this.data.validateRes; if (!valid) { Toast({ context: this, @@ -410,16 +515,22 @@ Page({ }, handleSuccess(e) { - const { files } = e.detail; + const { + files + } = e.detail; this.setData({ 'sessionFrom.rightsImageUrls': files, }); }, handleRemove(e) { - const { index } = e.detail; const { - sessionFrom: { rightsImageUrls }, + index + } = e.detail; + const { + sessionFrom: { + rightsImageUrls + }, } = this.data; rightsImageUrls.splice(index, 1); this.setData({ @@ -438,4 +549,73 @@ Page({ uploading: true, }); }, -}); + + + // 上传图片 + handleAddPic(e) { + const { + files + } = e.detail; + + // 每次选择图片都上传,展示每次上传图片的进度 + files.forEach(file => this.onUploadPic(file)) + }, + + // 移除Pic + handleRemovePic(e) { + const { + index + } = e.detail; + const { + sessionFrom: { + rightsImageUrls + }, + } = this.data; + rightsImageUrls.splice(index, 1); + this.setData({ + 'sessionFrom.rightsImageUrls': rightsImageUrls, + }); + }, + + // 上传图片方法 + onUploadPic(file) { + const { + sessionFrom: { + rightsImageUrls + }, + } = this.data; + + this.setData({ + 'sessionFrom.rightsImageUrls' : [...rightsImageUrls, { + ...file, + status: 'loading' + }], + }); + const { + length + } = rightsImageUrls; + + const task = wx.uploadFile({ + url: ServerBasePath + 'Common/UploadFile', // 仅为示例,非真实的接口地址 + filePath: file.url, + name: 'file', + formData: { + fileDir: 'Shops' + }, + success: (res) => { + this.setData({ + [`sessionFrom.rightsImageUrls[${length}].url`]: JSON.parse(res.data).data.url, + [`sessionFrom.rightsImageUrls[${length}].status`]: 'done', + }); + // this.triggerEventToParent() + }, + }); + task.onProgressUpdate((res) => { + this.setData({ + [`sessionFrom.rightsImageUrls[${length}].percent`]: res.progress, + }); + }); + }, + + +}); \ No newline at end of file diff --git a/pages/order/apply-service/index.wxml b/pages/order/apply-service/index.wxml index b6471ea..1fc7bbb 100644 --- a/pages/order/apply-service/index.wxml +++ b/pages/order/apply-service/index.wxml @@ -1,17 +1,24 @@ - - + + + - x {{goodsInfo.boughtQuantity}} + + + + @@ -89,20 +96,22 @@ title="退款金额" t-class-description="refund-money__description" description="{{amountTip}}" - bind:tap="onAmountTap" > + + - + @@ -119,8 +128,18 @@ bind:change="onRemarkChange" /> + - + + + + 上传凭证 + (最多3张) + + + + { if(res.code === 200){ - bindrefresh() + this.triggerEvent('refresh') Toast({ context: this, selector: '#t-toast', diff --git a/pages/order/components/order-button-bar/index.js b/pages/order/components/order-button-bar/index.js index 3156392..4116cb4 100644 --- a/pages/order/components/order-button-bar/index.js +++ b/pages/order/components/order-button-bar/index.js @@ -31,16 +31,16 @@ Component({ type: Object, observer(order) { // 判定有传goodsIndex ,则认为是商品button bar, 仅显示申请售后按钮 - if (this.properties?.goodsIndex !== null) { - const goods = order.goodsList[Number(this.properties.goodsIndex)]; - this.setData({ - buttons: { - left: [], - right: (goods.buttons || []).filter((b) => b.type == OrderButtonTypes.APPLY_REFUND), - }, - }); - return; - } + // if (this.properties?.goodsIndex !== null) { + // const goods = order.goodsList[Number(this.properties.goodsIndex)]; + // this.setData({ + // buttons: { + // left: [], + // right: (goods.buttons || []).filter((b) => b.type == OrderButtonTypes.APPLY_REFUND), + // }, + // }); + // return; + // } // 订单的button bar 不显示申请售后按钮 const buttonsRight = (order.buttons || []) // .filter((b) => b.type !== OrderButtonTypes.APPLY_REFUND) @@ -233,19 +233,15 @@ Component({ // 重新调起支付 onPay(order) { - Toast({ - context: this, - selector: '#t-toast', - message: '你点击了去支付', - icon: 'check-circle', - }); let data = { orderNo: order.orderNo, openId: wx.getStorageSync('openId') } wxRepay(data).then((res) => { - console.log(res, '重新调起支付的参数'); + this.handlePay(res.data,order).then((res) => { + console.log(res); + }) }) }, @@ -260,19 +256,24 @@ Component({ // 申请售后 onApplyRefund(order) { - console.log(order,'这里的参数'); + console.log(order, '这里的参数'); const goods = order.goodsList[this.properties.goodsIndex]; const params = { orderGuid: order.Guid, orderNo: order.orderNo, + goodsList: JSON.stringify(order.goodsList), skuId: goods?.skuId, spuId: goods?.id, + thumb: goods?.thumb, + title: goods?.title, + spec: goods?.spec, orderStatus: order.status, logisticsNo: order.logisticsNo, price: goods?.price, num: goods?.num, createTime: order.createTime, orderAmt: order.totalAmount, + freightFee: order.freightFee, payAmt: order.amount, canApplyReturn: true, }; @@ -295,7 +296,6 @@ Component({ /** 添加订单评论 */ onAddComment(order) { - console.log(order?.goodsList?.[0],'asdasdsa'); const imgUrl = order?.goodsList?.[0]?.thumb; const title = order?.goodsList?.[0]?.title; const specs = order?.goodsList?.[0]?.specs; @@ -307,7 +307,7 @@ Component({ }, // 处理支付 - handlePay(data) { + handlePay(data,order) { const { jsApiUiPackage, outTradeNo, @@ -317,8 +317,8 @@ Component({ const payOrderInfo = { payInfo: jsApiUiPackage, orderId: outTradeNo, - orderAmt: totalAmount, - payAmt: totalPayAmount, + orderAmt: order.totalAmount, + payAmt: order.totalAmount, interactId: interactId, tradeNo: outTradeNo, transactionId: transactionId, diff --git a/pages/order/components/selectCoupons/selectCoupons.wxml b/pages/order/components/selectCoupons/selectCoupons.wxml index 999e6f7..af5602c 100644 --- a/pages/order/components/selectCoupons/selectCoupons.wxml +++ b/pages/order/components/selectCoupons/selectCoupons.wxml @@ -9,7 +9,7 @@ 你有{{couponsList.length}}张可用优惠券 已选中{{selectedNum}}张推荐优惠券, 共抵扣 - + --> diff --git a/pages/order/order-list/index.wxml b/pages/order/order-list/index.wxml index d6ab902..7d5e278 100644 --- a/pages/order/order-list/index.wxml +++ b/pages/order/order-list/index.wxml @@ -64,7 +64,7 @@ - + diff --git a/services/order/addOrderRefund.js b/services/order/addOrderRefund.js new file mode 100644 index 0000000..a2554cc --- /dev/null +++ b/services/order/addOrderRefund.js @@ -0,0 +1,21 @@ +import { + request +} from '../_utils/request'; + +/** 申请售后 */ +export function addOrderRefund(data) { + return new Promise((resolve, reject) => { + request({ + url: `OrderRefundApi/addOrderRefund`, + method: 'POST', + data: data, + success: function (res) { + + resolve(res); + }, + fail: function (error) { + reject(error); + } + }); + }); +} \ No newline at end of file diff --git a/services/order/getRefundReason.js b/services/order/getRefundReason.js new file mode 100644 index 0000000..50aa01d --- /dev/null +++ b/services/order/getRefundReason.js @@ -0,0 +1,22 @@ +import { + request +} from '../_utils/request'; + + +/* 获取售后订单商品列表 */ +export async function getRefundReason(data) { + return new Promise((resolve, reject) => { + request({ + url: `OrderRefundApi/getRefundReason`, + method: 'Get', + data: data, + success: function (res) { + + resolve(res); + }, + fail: function (error) { + reject(error); + } + }); + }); +}