index.jsx 7.5KB

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