ReturnSales.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <view class="Return" :class="['qn-page-' + theme]" v-if="goods_data.id">
  3. <view class="header">
  4. <view style="margin-left: 30rpx; font-weight: 600;">退款商品</view>
  5. <view class="content">
  6. <image :src="goods_data.images[0]" mode="aspectFill"></image>
  7. <view class="texts">
  8. <text class="ellipsis goods-name">{{ goods_data.goodsName }}</text>
  9. <view class="details">
  10. <text v-if="goods_data.isEq === 5">{{ goods_data.u_1 }};</text>
  11. <text v-else>{{ goods_data.unitName }};</text>
  12. <block v-for="(ip, indexSP) in goods_data.specGroup" :key="indexSP">
  13. <text>{{ ip.specValueName }};</text>
  14. </block>
  15. </view>
  16. <view class="primary-color goods-price">
  17. <text v-if="goods_data.isEq === 5">{{ goods_data.originPrice }};</text>
  18. <text v-else>¥{{ goods_data.price }}</text>
  19. </view>
  20. </view>
  21. </view>
  22. </view>
  23. <view class="ReturnMessage">
  24. <view class="title">退款信息</view>
  25. <view class="money number-box">
  26. <view>
  27. 退款数量
  28. <text class="unit" v-if="goods_data.isEq === 5">/{{ goods_data.u_1 }}</text>
  29. <text class="unit" v-else>/{{ goods_data.unitName }}</text>
  30. </view>
  31. <block v-if="goods_data.returnStatus === 0">
  32. <u-number-box :positive-integer="false" :max="goods_data.outNumCopy" :min="0" v-model="goods_data.outNum"></u-number-box>
  33. </block>
  34. <block v-else>{{ goods_data.outNum }}</block>
  35. </view>
  36. <!-- <view class="money number-box">
  37. <view>
  38. 退款金额
  39. <text class="unit">/元</text>
  40. </view>
  41. <block v-if="order_detail.returnStatus !== 2">
  42. <u-number-box :positive-integer="false" :max="goods_data.returnPriceCopy" :min="0" v-model="goods_data.returnPrice"></u-number-box>
  43. </block>
  44. <block v-else>{{ goods_data.returnPrice }}</block>
  45. </view>
  46. <view v-if="order_detail.returnStatus !== 2">
  47. <text class="Remarks">可修改,最多退款金额¥{{ goods_data.returnPriceCopy }}, 退款数量{{ goods_data.outNumCopy }}{{ goods_data.unitName }}</text>
  48. </view> -->
  49. </view>
  50. <view class="description">
  51. <view class="title">退款原因</view>
  52. <view class="news">
  53. <u-input v-if="goods_data.returnStatus === 0" v-model="add_form.remark" type="textarea" placeholder="请输入描述,有助于商家更好的处理" />
  54. <u-input v-else disabled v-model="add_form.remark" type="textarea" placeholder="退款原因" />
  55. </view>
  56. </view>
  57. <button v-if="goods_data.returnStatus === 0" class="primary-btn" @click="submit">提交</button>
  58. </view>
  59. </template>
  60. <script>
  61. export default {
  62. data() {
  63. return {
  64. add_form: {},
  65. order_id: 0,
  66. goods_id: 0,
  67. skuId: 0,
  68. order_detail: {},
  69. goods_data: {}
  70. };
  71. },
  72. onLoad(options) {
  73. console.log(options);
  74. this.order_id = options.orderId;
  75. this.goods_id = options.goodsId;
  76. this.skuId = options.skuId;
  77. this.getOrderInfoById();
  78. },
  79. methods: {
  80. outNumBlur(val) {
  81. if (this.goods_data.outNum > this.goods_data.outNumCopy) {
  82. this.goods_data.outNum = this.goods_data.outNumCopy;
  83. }
  84. },
  85. priceBlur(val) {
  86. if (this.goods_data.returnPrice > this.goods_data.returnPriceCopy) {
  87. this.goods_data.returnPrice = this.goods_data.returnPriceCopy;
  88. }
  89. },
  90. // 获取订单详情
  91. getOrderInfoById() {
  92. this.$u.api.getOrderInfoById(this.order_id).then(({ data }) => {
  93. this.order_detail = data;
  94. const goods = data.goodsData.find(item => {
  95. return item.goodsId === parseInt(this.goods_id) && item.skuId === parseInt(this.skuId);
  96. });
  97. const outNum = goods.isEq === 5 ? Number(goods.u_1_buy) : Number(goods.outNum) || Number(goods.buyNum);
  98. this.goods_data = {
  99. ...goods,
  100. originNum: goods.outNum,
  101. outNum: outNum,
  102. // returnPrice: goods.totalMoney,
  103. returnPriceCopy: Number(goods.totalMoney),
  104. outNumCopy: outNum
  105. };
  106. this.add_form = {
  107. originId: data.id,
  108. originNo: data.no,
  109. shopId: goods.shopId,
  110. shopName: goods.shopName,
  111. operatorName: data.operatorName,
  112. operatorId: data.operatorId,
  113. userCenterId: data.userCenterId,
  114. remark: '',
  115. customerId: data.customerId,
  116. customerName: data.customerName
  117. };
  118. });
  119. },
  120. submit() {
  121. if (!this.goods_data.outNum) {
  122. this.$u.toast('退货数量需大于0');
  123. return;
  124. }
  125. if (!this.goods_data.returnPrice) {
  126. this.$u.toast('退货金额需大于0');
  127. return;
  128. }
  129. const skuName = this.goods_data.specGroup
  130. .map(itemM => {
  131. return itemM.specValueName;
  132. })
  133. .join('_');
  134. let num = '';
  135. if (this.goods_data.isEq === 5) {
  136. if (this.goods_data.outNum === this.goods_data.u_1_buy) {
  137. num = this.goods_data.originNum;
  138. } else {
  139. num = this.$NP.times(this.goods_data.outNum, this.goods_data.conversion);
  140. }
  141. } else {
  142. num = this.goods_data.outNum;
  143. }
  144. let details = [
  145. {
  146. goodsBasicId: this.goods_data.goodsBasicId,
  147. goodsCode: this.goods_data.goodsCode,
  148. goodsId: this.goods_data.goodsId,
  149. goodsName: this.goods_data.goodsName,
  150. id: this.goods_data.id,
  151. num: num,
  152. returnTotalPrice: this.$NP.times(num, this.goods_data.returnPrice),
  153. returnUnitPrice: this.goods_data.returnPrice,
  154. saleNum: this.goods_data.buyNum,
  155. saleTotalPrice: this.goods_data.totalMoney,
  156. saleUnitPrice: this.goods_data.price,
  157. skuId: this.goods_data.skuId,
  158. skuName: skuName,
  159. unitName: this.goods_data.unitName
  160. }
  161. ];
  162. this.$u.api
  163. .addOrderReturn({
  164. ...this.add_form,
  165. details: details
  166. })
  167. .then(res => {
  168. this.$u.toast('提交成功');
  169. setTimeout(res => {
  170. uni.navigateBack();
  171. }, 2000);
  172. });
  173. }
  174. }
  175. };
  176. </script>
  177. <style scoped lang="scss">
  178. .Return {
  179. padding: 15rpx;
  180. .header {
  181. width: 710rpx;
  182. padding-top: 16rpx;
  183. background-color: #ffffff;
  184. width: 100%;
  185. height: 250rpx;
  186. border-radius: 20rpx;
  187. .content {
  188. height: 200rpx;
  189. display: flex;
  190. justify-content: space-between;
  191. padding-top: 30rpx;
  192. image {
  193. margin-left: 40rpx;
  194. width: 140rpx;
  195. height: 140rpx;
  196. border-radius: 10px;
  197. }
  198. .texts {
  199. padding: 10rpx;
  200. width: 500rpx;
  201. height: 140rpx;
  202. // border: 1rpx solid blue;
  203. margin-right: 30rpx;
  204. font-weight: 500rpx;
  205. .details {
  206. padding-top: 10rpx;
  207. font-size: 24rpx;
  208. color: #999999;
  209. }
  210. .goods-price {
  211. padding-top: 10rpx;
  212. }
  213. }
  214. }
  215. }
  216. .ReturnMessage {
  217. width: 710rpx;
  218. margin: 20rpx 0;
  219. width: 100%;
  220. border-radius: 16rpx;
  221. background-color: #ffffff;
  222. padding: 30rpx;
  223. .title {
  224. padding-bottom: 10rpx;
  225. font-weight: bold;
  226. }
  227. .money {
  228. line-height: 80rpx;
  229. display: flex;
  230. justify-content: space-between;
  231. .unit {
  232. font-size: 24rpx;
  233. color: #6c6c6c;
  234. }
  235. }
  236. .Remarks {
  237. font-size: 22rpx;
  238. color: #999999;
  239. }
  240. }
  241. .description {
  242. width: 710rpx;
  243. background-color: #ffffff;
  244. width: 100%;
  245. border-radius: 16rpx;
  246. padding: 30rpx;
  247. .title {
  248. padding-bottom: 10rpx;
  249. font-weight: bold;
  250. }
  251. .news {
  252. font-size: 20rpx;
  253. margin-top: 10rpx;
  254. background-color: #f5f9fc;
  255. height: 150rpx;
  256. border-radius: 15rpx;
  257. padding: 15rpx;
  258. }
  259. }
  260. .primary-btn {
  261. width: 710rpx;
  262. position: fixed;
  263. height: 80rpx;
  264. bottom: 10rpx;
  265. font-size: 28rpx;
  266. line-height: 80rpx;
  267. }
  268. }
  269. </style>