index.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. import Toast from 'tdesign-miniprogram/toast/index';
  2. import { ServiceType, ServiceTypeDesc, ServiceStatus } from '../config';
  3. import { formatTime, getRightsDetail } from './api';
  4. const TitleConfig = {
  5. [ServiceType.ORDER_CANCEL]: '退款详情',
  6. [ServiceType.ONLY_REFUND]: '退款详情',
  7. [ServiceType.RETURN_GOODS]: '退货退款详情',
  8. };
  9. Page({
  10. data: {
  11. pageLoading: true,
  12. serviceRaw: {},
  13. service: {},
  14. deliveryButton: {},
  15. gallery: {
  16. current: 0,
  17. show: false,
  18. proofs: [],
  19. },
  20. showProofs: false,
  21. backRefresh: false,
  22. },
  23. onLoad(query) {
  24. this.rightsNo = query.rightsNo;
  25. this.inputDialog = this.selectComponent('#input-dialog');
  26. this.init();
  27. },
  28. onShow() {
  29. // 当从其他页面返回,并且 backRefresh 被置为 true 时,刷新数据
  30. if (!this.data.backRefresh) return;
  31. this.init();
  32. this.setData({ backRefresh: false });
  33. },
  34. // 页面刷新,展示下拉刷新
  35. onPullDownRefresh_(e) {
  36. const { callback } = e.detail;
  37. return this.getService().then(() => callback && callback());
  38. },
  39. init() {
  40. this.setData({ pageLoading: true });
  41. this.getService().then(() => {
  42. this.setData({ pageLoading: false });
  43. });
  44. },
  45. getService() {
  46. const params = { rightsNo: this.rightsNo };
  47. return getRightsDetail(params).then((res) => {
  48. const serviceRaw = res.data[0];
  49. // 滤掉填写运单号、修改运单号按钮,这两个按钮特殊处理,不在底部按钮栏展示
  50. if (!serviceRaw.buttonVOs) serviceRaw.buttonVOs = [];
  51. const deliveryButton = {};
  52. const service = {
  53. id: serviceRaw.rights.rightsNo,
  54. serviceNo: serviceRaw.rights.rightsNo,
  55. storeName: serviceRaw.rights.storeName,
  56. type: serviceRaw.rights.rightsType,
  57. typeDesc: ServiceTypeDesc[serviceRaw.rights.rightsType],
  58. status: serviceRaw.rights.rightsStatus,
  59. statusIcon: this.genStatusIcon(serviceRaw.rights),
  60. statusName: serviceRaw.rights.userRightsStatusName,
  61. statusDesc: serviceRaw.rights.userRightsStatusDesc,
  62. amount: serviceRaw.rights.refundRequestAmount,
  63. goodsList: (serviceRaw.rightsItem || []).map((item, i) => ({
  64. id: i,
  65. thumb: item.goodsPictureUrl,
  66. title: item.goodsName,
  67. specs: (item.specInfo || []).map((s) => s.specValues || ''),
  68. itemRefundAmount: item.itemRefundAmount,
  69. rightsQuantity: item.rightsQuantity,
  70. })),
  71. orderNo: serviceRaw.rights.orderNo, // 订单编号
  72. rightsNo: serviceRaw.rights.rightsNo, // 售后服务单号
  73. rightsReasonDesc: serviceRaw.rights.rightsReasonDesc, // 申请售后原因
  74. isRefunded: serviceRaw.rights.userRightsStatus === ServiceStatus.REFUNDED, // 是否已退款
  75. refundMethodList: (serviceRaw.refundMethodList || []).map((m) => ({
  76. name: m.refundMethodName,
  77. amount: m.refundMethodAmount,
  78. })), // 退款明细
  79. refundRequestAmount: serviceRaw.rights.refundRequestAmount, // 申请退款金额
  80. payTraceNo: serviceRaw.rightsRefund.traceNo, // 交易流水号
  81. createTime: formatTime(parseFloat(`${serviceRaw.rights.createTime}`), 'YYYY-MM-DD HH:mm'), // 申请时间
  82. logisticsNo: serviceRaw.logisticsVO.logisticsNo, // 退货物流单号
  83. logisticsCompanyName: serviceRaw.logisticsVO.logisticsCompanyName, // 退货物流公司
  84. logisticsCompanyCode: serviceRaw.logisticsVO.logisticsCompanyCode, // 退货物流公司
  85. remark: serviceRaw.logisticsVO.remark, // 退货备注
  86. receiverName: serviceRaw.logisticsVO.receiverName, // 收货人
  87. receiverPhone: serviceRaw.logisticsVO.receiverPhone, // 收货人电话
  88. receiverAddress: this.composeAddress(serviceRaw), // 收货人地址
  89. applyRemark: serviceRaw.rightsRefund.refundDesc, // 申请退款时的填写的说明
  90. buttons: serviceRaw.buttonVOs || [],
  91. logistics: serviceRaw.logisticsVO,
  92. };
  93. const proofs = serviceRaw.rights.rightsImageUrls || [];
  94. this.setData({
  95. serviceRaw,
  96. service,
  97. deliveryButton,
  98. 'gallery.proofs': proofs,
  99. showProofs:
  100. serviceRaw.rights.userRightsStatus === ServiceStatus.PENDING_VERIFY &&
  101. (service.applyRemark || proofs.length > 0),
  102. });
  103. wx.setNavigationBarTitle({
  104. title: TitleConfig[service.type],
  105. });
  106. });
  107. },
  108. composeAddress(service) {
  109. return [
  110. service.logisticsVO.receiverProvince,
  111. service.logisticsVO.receiverCity,
  112. service.logisticsVO.receiverCountry,
  113. service.logisticsVO.receiverArea,
  114. service.logisticsVO.receiverAddress,
  115. ]
  116. .filter((item) => !!item)
  117. .join(' ');
  118. },
  119. onRefresh() {
  120. this.init();
  121. },
  122. editLogistices() {
  123. this.setData({
  124. inputDialogVisible: true,
  125. });
  126. this.inputDialog.setData({
  127. cancelBtn: '取消',
  128. confirmBtn: '确定',
  129. });
  130. this.inputDialog._onConfirm = () => {
  131. Toast({
  132. message: '确定填写物流单号',
  133. });
  134. };
  135. },
  136. onProofTap(e) {
  137. if (this.data.gallery.show) {
  138. this.setData({
  139. 'gallery.show': false,
  140. });
  141. return;
  142. }
  143. const { index } = e.currentTarget.dataset;
  144. this.setData({
  145. 'gallery.show': true,
  146. 'gallery.current': index,
  147. });
  148. },
  149. onGoodsCardTap(e) {
  150. const { index } = e.currentTarget.dataset;
  151. const goods = this.data.serviceRaw.rightsItem[index];
  152. wx.navigateTo({ url: `/pages/goods/details/index?skuId=${goods.skuId}` });
  153. },
  154. onServiceNoCopy() {
  155. wx.setClipboardData({
  156. data: this.data.service.serviceNo,
  157. });
  158. },
  159. onAddressCopy() {
  160. wx.setClipboardData({
  161. data: `${this.data.service.receiverName} ${this.data.service.receiverPhone}\n${this.data.service.receiverAddress}`,
  162. });
  163. },
  164. /** 获取状态ICON */
  165. genStatusIcon(item) {
  166. const { userRightsStatus, afterSaleRequireType } = item;
  167. switch (userRightsStatus) {
  168. // 退款成功
  169. case ServiceStatus.REFUNDED: {
  170. return 'succeed';
  171. }
  172. // 已取消、已关闭
  173. case ServiceStatus.CLOSED: {
  174. return 'indent_close';
  175. }
  176. default: {
  177. switch (afterSaleRequireType) {
  178. case 'REFUND_MONEY': {
  179. return 'goods_refund';
  180. }
  181. case 'REFUND_GOODS_MONEY':
  182. return 'goods_return';
  183. default: {
  184. return 'goods_return';
  185. }
  186. }
  187. }
  188. }
  189. },
  190. });