index.jsx 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  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 { useState, useEffect } from "react";
  6. import withLayout from "@/layouts";
  7. import { getOrderSub, refund } from "@/services/payOrder";
  8. import image from "@/assets/icons/ProCard/8kb.jpg";
  9. import food from "@/assets/icons/ProCard/food.png";
  10. import ProCard_hot from "@/assets/icons/ProCard/ProCard_hot.png";
  11. import CustomNav from "@/components/CustomNav";
  12. import "./style.less";
  13. import formatTime from "@/utils/formatTime";
  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. const [view, setView] = useState(true);
  44. const [view2, setView2] = useState(false);
  45. const [view3, setView3] = useState(false);
  46. const [view4, setView4] = useState(false);
  47. const [view5, setView5] = useState(false);
  48. const [view6, setView6] = useState(false);
  49. // 说明
  50. const [explain, setExplain] = useState();
  51. const [list, setList] = useState([]);
  52. // 总价 totalPrice
  53. const [totalPrice, setTotalPrice] = useState({});
  54. const [checkeds, setCheckeds] = useState([1]);
  55. const getData = (orderId) => {
  56. Taro.showLoading();
  57. getOrderSub({
  58. pageNum: 1,
  59. pageSize: 50,
  60. orderId: orderId,
  61. }).then((res) => {
  62. setList(res.records);
  63. Taro.hideLoading();
  64. });
  65. };
  66. useEffect(() => {
  67. getData(id);
  68. }, []);
  69. const viewOK = (e) => {
  70. if (checkeds.indexOf(e.key) > -1) {
  71. setCheckeds(checkeds.filter((x) => x != e.key));
  72. } else {
  73. let arr = checkeds;
  74. arr.push(e.key);
  75. setCheckeds([...arr]);
  76. }
  77. };
  78. const onRefund = () => {
  79. // console.log(explain, checkeds, "----onRefund----");
  80. refund(id, {
  81. refundDecription: checkeds?.map(x => options.filter(y => y.key == x)[0]?.title).join(';'),
  82. refundReason: explain,
  83. }).then((res) => {
  84. Taro.showToast({
  85. title: "退款成功",
  86. icon: "none",
  87. duration: 2000,
  88. });
  89. Taro.navigateBack({ delta: 1 })
  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="box-content">
  107. <CustomNav title="售后退款" />
  108. <view className="Refund-Content-box">
  109. <view className="title-image">
  110. <image
  111. mode="scaleToFill"
  112. className="title-image-cup"
  113. src={BlackSpot}
  114. />
  115. <text className="title-title-boss">商品信息</text>
  116. </view>
  117. </view>
  118. {/* 商品信息结束 */}
  119. <view>
  120. {(list || []).map((item) => {
  121. return (
  122. <view class="wrapper" key={item.orderId}>
  123. <view class="left-complete-one">
  124. <image className="left-image-1" src={ProCard_hot}></image>
  125. <view className="left-viewText">
  126. 返现¥{formatPrice(item.cashback)}
  127. </view>
  128. <view className="title-image">
  129. <image
  130. className="image-1"
  131. mode="scaleToFill"
  132. src={item.poster}
  133. ></image>
  134. <image className="image-2" src={food}></image>
  135. </view>
  136. <view className="title-content">
  137. <view className="Pro-title">
  138. <view className="title-text">
  139. {item.packageDescription}
  140. <text className="title-money-2">
  141. 数量:{item.amount}张
  142. </text>
  143. </view>
  144. </view>
  145. <text className="title-money">
  146. ¥{formatPrice(item.unitPrice)}元
  147. <text className="title-money-2">
  148. 门市价{formatPrice(item.standardPrice)}元
  149. </text>
  150. </text>
  151. <view className="title-time">
  152. 有效期:{formatTime(item?.startTime, "yyyy/MM/dd")}-
  153. {formatTime(item.endTime, "yyyy/MM/dd")}
  154. </view>
  155. </view>
  156. </view>
  157. <view class="right-complete-two">
  158. <view className="right-content"></view>
  159. </view>
  160. </view>
  161. );
  162. })}
  163. </view>
  164. {/* 卡片结束 */}
  165. <view className="Refund-Content-box">
  166. <view className="title-image">
  167. <image
  168. mode="scaleToFill"
  169. className="title-image-cup"
  170. src={BlackSpot}
  171. />
  172. <text className="title-title-boss">退款原因</text>
  173. </view>
  174. {/* 退款结束 */}
  175. </view>
  176. <view className="Refund-content">
  177. {options.map((x) => {
  178. return (
  179. <text
  180. className={`Refund-star-view${x.key} ${checkeds.indexOf(x.key) > -1
  181. ? "bg2"
  182. : `Refund-star-view${x.key}`
  183. }`}
  184. key={x.key}
  185. onClick={() => viewOK(x)}
  186. >
  187. {x.title}
  188. </text>
  189. );
  190. })}
  191. </view>
  192. <view className="Refund-Content-box">
  193. <view className="title-image">
  194. <image
  195. mode="scaleToFill"
  196. className="title-image-cup"
  197. src={BlackSpot}
  198. />
  199. <text className="title-title-boss">退款说明</text>
  200. </view>
  201. </view>
  202. <view class="section">
  203. <Textarea
  204. placeholder="请补充退款说明(选填)!"
  205. onInput={(e) => setExplain(e.detail.value)}
  206. confirm-type="done"
  207. />
  208. </view>
  209. <view className="money-title">
  210. 实付金额:{" "}
  211. <text className="money-name">{formatPrice(totalPrice.charges)}元</text>
  212. </view>
  213. <view className="money-title">
  214. 已获返现:{" "}
  215. <text className="money-name">{formatPrice(totalPrice.cashback)}元</text>
  216. </view>
  217. <view className="money-title">
  218. 退款金额:{" "}
  219. <text className="money-name">{formatPrice(totalPrice.refundPrice)}元</text>
  220. </view>
  221. <view className="ul-li-text">
  222. <view className="ul-li-view"></view>
  223. <text className="ul-li-textname">退款金额不可修改</text>
  224. </view>
  225. <view className="ul-li-text">
  226. <view className="ul-li-view"></view>
  227. <text className="ul-li-textname">
  228. 下单获得返现金额,会在退款时被扣除;
  229. </text>
  230. </view>
  231. <view className="ul-li-text">
  232. <view className="ul-li-view"></view>
  233. <text className="ul-li-textname">退款将在七个工作日内原路退还。</text>
  234. </view>
  235. <view className="button-info">
  236. <Button className="button-box" onClick={() => onRefund()}>
  237. 提交申请
  238. </Button>
  239. </view>
  240. </view>
  241. );
  242. });