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