123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. import Taro from "@tarojs/taro";
  2. import { Button, Textarea, View } from "@tarojs/components";
  3. import formatPrice from "@/utils/formatPrice";
  4. import { useState, useEffect } from "react";
  5. import OrderCard from '@/components/CompoentsOrder/OrderCard'
  6. import withLayout from "@/layouts";
  7. import { getOrderSub, refund } from "@/services/payOrder";
  8. import CustomNav from "@/components/CustomNav";
  9. import BlackSpot from "@/assets/icons/GuideCheck/BlackSpot.png";
  10. import "./style.less";
  11. const options = [
  12. {
  13. title: "计划有变,没时间消费",
  14. key: 1,
  15. },
  16. {
  17. title: "误认为是外卖",
  18. key: 2,
  19. },
  20. {
  21. title: "没看清楚使用规则,要用时才发现限制很多",
  22. key: 3,
  23. },
  24. {
  25. title: "预约不上",
  26. key: 4,
  27. },
  28. {
  29. title: "店里更优惠",
  30. key: 5,
  31. },
  32. {
  33. title: "网友/朋友评价不好",
  34. key: 6,
  35. },
  36. ];
  37. export default withLayout((props) => {
  38. const { router, person } = props;
  39. const { id } = props.router.params;
  40. // 说明
  41. const [explain, setExplain] = useState();
  42. const [list, setList] = useState([]);
  43. // 总价 totalPrice
  44. const [totalPrice, setTotalPrice] = useState({});
  45. const [checkeds, setCheckeds] = useState([1]);
  46. const getData = (orderId) => {
  47. Taro.showLoading();
  48. getOrderSub({
  49. pageNum: 1,
  50. pageSize: 50,
  51. orderId: orderId,
  52. }).then((res) => {
  53. setList(res.records);
  54. Taro.hideLoading();
  55. });
  56. };
  57. useEffect(() => {
  58. getData(id);
  59. }, []);
  60. const viewOK = (e) => {
  61. if (checkeds.indexOf(e.key) > -1) {
  62. setCheckeds(checkeds.filter((x) => x != e.key));
  63. } else {
  64. let arr = checkeds;
  65. arr.push(e.key);
  66. setCheckeds([...arr]);
  67. }
  68. };
  69. const onRefund = () => {
  70. Taro.showLoading({
  71. title: '退款中',
  72. })
  73. refund(id, {
  74. refundDecription: checkeds?.map(x => options.filter(y => y.key == x)[0]?.title).join(';'),
  75. refundReason: explain,
  76. }).then((res) => {
  77. Taro.hideLoading();
  78. Taro.navigateTo({ url: '/pages/MineUserAll/AllOrder/index?tabJump=0' })
  79. Taro.showToast({
  80. title: "退款成功",
  81. icon: "none",
  82. duration: 3000,
  83. });
  84. });
  85. };
  86. useEffect(() => {
  87. let total = {
  88. cashback: 0, //已获返现
  89. charges: 0, //实付金额
  90. refundPrice: 0, //退款金额
  91. };
  92. list.map((x) => {
  93. total.cashback += x.cashback;
  94. total.charges += x.charges;
  95. total.refundPrice += x.charges - x.cashback;
  96. });
  97. setTotalPrice(total);
  98. }, [list]);
  99. return (
  100. <view className='page-index'>
  101. <view className='index-navbar'>
  102. <CustomNav title='售后退款' />
  103. </view>
  104. <View className='index-container'>
  105. <View className='box-content'>
  106. <scroll-view scroll-y style='height: 100%;' >
  107. <view className='Refund-Content-box'>
  108. <view className='title-image'>
  109. <image
  110. mode='scaleToFill'
  111. className='title-image-cup'
  112. src={BlackSpot}
  113. />
  114. <text className='title-title-boss'>商品信息</text>
  115. </view>
  116. </view>
  117. {/* 商品信息结束 */}
  118. <view>
  119. {(list || []).map((item) => {
  120. return (
  121. <OrderCard item={item} key={item.orderId} kkp='1' />
  122. );
  123. })}
  124. </view>
  125. {/* 卡片结束 */}
  126. <view className='Refund-Content-box'>
  127. <view className='title-image'>
  128. <image
  129. mode='scaleToFill'
  130. className='title-image-cup'
  131. src={BlackSpot}
  132. />
  133. <text className='title-title-boss'>退款原因</text>
  134. </view>
  135. {/* 退款结束 */}
  136. </view>
  137. <view className='Refund-content'>
  138. {options.map((x) => {
  139. return (
  140. <text
  141. className={`Refund-star-view1 ${checkeds.indexOf(x.key) > -1
  142. ? "bg2"
  143. : `Refund-star-view2`
  144. }`}
  145. key={x.key}
  146. onClick={() => viewOK(x)}
  147. >
  148. {x.title}
  149. </text>
  150. );
  151. })}
  152. </view>
  153. <view className='Refund-Content-box'>
  154. <view className='title-image'>
  155. <image
  156. mode='scaleToFill'
  157. className='title-image-cup'
  158. src={BlackSpot}
  159. />
  160. <text className='title-title-boss'>退款说明</text>
  161. </view>
  162. </view>
  163. <view class='section'>
  164. <Textarea
  165. placeholder='请补充退款说明(选填)!'
  166. onInput={(e) => setExplain(e.detail.value)}
  167. confirm-type='done'
  168. />
  169. </view>
  170. <view className='money-title'>
  171. 实付金额:{" "}
  172. <text className='money-name'>{formatPrice(totalPrice.charges)}元</text>
  173. </view>
  174. <view className='money-title'>
  175. 已获返现:{" "}
  176. <text className='money-name'>{formatPrice(totalPrice.cashback)}元</text>
  177. </view>
  178. <view className='money-title'>
  179. 退款金额:{" "}
  180. <text className='money-name'>{formatPrice(totalPrice.refundPrice)}元</text>
  181. </view>
  182. <view className='ul-li-text'>
  183. <view className='ul-li-view'></view>
  184. <text className='ul-li-textname'>退款金额不可修改</text>
  185. </view>
  186. <view className='ul-li-text'>
  187. <view className='ul-li-view'></view>
  188. <text className='ul-li-textname'>
  189. 下单获得返现金额,会在退款时被扣除;
  190. </text>
  191. </view>
  192. <view className='ul-li-text'>
  193. <view className='ul-li-view'></view>
  194. <text className='ul-li-textname'>退款将在七个工作日内原路退还。</text>
  195. </view>
  196. <view className='button-info' >
  197. <Button className='button-box' onClick={() => onRefund()}>
  198. 提交申请
  199. </Button>
  200. </view>
  201. </scroll-view>
  202. </View>
  203. </View>
  204. </view >
  205. );
  206. });