confirmOrder.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <template>
  2. <view class="pages confirmOrder">
  3. <view class="order-list">
  4. <custom-nodata v-if="cartList.length === 0"></custom-nodata>
  5. <view class="order-list-item" v-for="(item,index) in cartList" :key="index">
  6. <view class="image-content">
  7. <image :src="$onlineImg + item.goodsImages | firstImg" mode="aspectFill"></image>
  8. </view>
  9. <view class="text-content">
  10. <view class="title">{{item.goodsName}} </view>
  11. <!-- <view class="oId">产品编号: {{ item.oId }}</view> -->
  12. <view class="price">
  13. <view class="price-total"><text>¥</text>{{item.totalPrice | keepTwoNum}}</view>
  14. <view class="price-unit">{{item.price}}元 / KG</view>
  15. </view>
  16. <view class="totalcarbon">累计碳汇量{{item.carbonVal}}kg</view>
  17. <!-- <view class="total"><text>¥</text>{{item.totalPrice | keepTwoNum}}</view> -->
  18. <view class="nums">
  19. <view class="countNum">
  20. <view class="countNum-action reduce" @click="calcValue('reduce',item)">-</view>
  21. <view class="countNum-input">
  22. <input class="uni-input" v-model="item.carbonVal" type="number" @blur="onInput(item)"/>
  23. </view>
  24. <view class="countNum-action add" @click="calcValue('add',item)">+</view>
  25. </view>
  26. </view>
  27. <!-- {{cartListTmp}} -->
  28. </view>
  29. </view>
  30. </view>
  31. <!-- <uni-list class="pay-way">
  32. <uni-list-item title="支付方式" rightText="微信支付"></uni-list-item>
  33. </uni-list> -->
  34. <view class="pay-wrap" @click="submitOrder">
  35. <view class="pay-con">
  36. <text class="pay-con-til">立即支付</text>
  37. <view class="num">
  38. <text>¥</text>
  39. {{totalPrice | keepTwoNum}}
  40. </view>
  41. </view>
  42. </view>
  43. </view>
  44. </template>
  45. <script>
  46. import { mapMutations } from 'vuex';
  47. // import uniList from "@/components/uni-list/uni-list.vue"
  48. // import uniListItem from "@/components/uni-list-item/uni-list-item.vue"
  49. import customNodata from '@/components/custom-nodata/custom-nodata.vue'
  50. import { debounce } from '@/utils/util.js'
  51. export default{
  52. components:{
  53. // uniList,
  54. // uniListItem,
  55. customNodata
  56. },
  57. onLoad(options) {
  58. let self = this;
  59. let arr = this.$store.state.cartListTmp
  60. // console.log('options',JSON.parse(JSON.stringify(options)));
  61. console.log('this.$store.state.cartListTmp',JSON.parse(JSON.stringify(this.$store.state.cartListTmp)));
  62. for(let i = 0; i < arr.length; i++){
  63. this.cartList.push({
  64. goodsName:arr[i].goodsName,
  65. goodsImages:arr[i].goodsImages,
  66. goodsId:arr[i].guid,
  67. price:arr[i].price,
  68. carbonVal:arr[i].carbonSkin,
  69. // total:arr[i].carbonSkin,
  70. totalPrice:arr[i].carbonSkin * arr[i].price,
  71. // totalcarbon:arr[i].carbonSkin
  72. })
  73. };
  74. uni.getStorage({
  75. key:'accessToken',
  76. success: function (res) {
  77. self.token = res.data.accessToken;
  78. // console.log('token',res.data.accessToken);
  79. }
  80. });
  81. },
  82. onUnload() {
  83. //页面卸载购物清单
  84. this.clearCart()
  85. },
  86. data(){
  87. return{
  88. token:'',
  89. requested:true,//是否请求中
  90. min:1,
  91. cartList:[],
  92. orderid:'',
  93. }
  94. },
  95. methods:{
  96. ...mapMutations(['clearCart']),
  97. onInput(item){
  98. console.log(item.carbonVal)
  99. if(!(/(^[1-9]\d*$)/.test(item.carbonVal))){
  100. item.carbonVal = 1
  101. if(item.carbonVal < this.min){
  102. item.carbonVal = 1
  103. }
  104. }
  105. item.totalPrice = item.price * item.carbonVal
  106. },
  107. //数量计算
  108. calcValue(type,item){
  109. if (type === "reduce") {
  110. item.total--
  111. if (item.carbonVal < this.min) {
  112. item.carbonVal = 1
  113. }
  114. item.totalPrice = item.price * item.carbonVal;
  115. // item.totalcarbon = item.carbonVal*10;
  116. } else if (type === "add") {
  117. // console.log('this.$store.state.cartListTmp',JSON.parse(JSON.stringify(this.$store.state.cartListTmp)));
  118. // console.log('this.$store.state.cartListTmp.canSold',this.$store.state.cartListTmp[0].canSold);
  119. item.carbonVal++
  120. item.totalPrice = item.price * item.carbonVal
  121. console.log('this.cartList',this.cartList);
  122. // item.totalcarbon = item.carbonVal*10;
  123. }
  124. },
  125. //提交校验
  126. submitOrder(){
  127. if(this.requested){
  128. this.requested = false;
  129. uni.showLoading({
  130. title: '订单生成中。'
  131. });
  132. if(this.cartList.length == 0){
  133. this.$api.msg("请先选择产品!")
  134. return;
  135. }else{
  136. let userInfo = uni.getStorageSync("userInfo");
  137. // console.log( uni.getStorageSync("linkType") );
  138. let params = {
  139. // customerId:userInfo.guid,
  140. goods:this.cartList,
  141. // linkType: uni.getStorageSync("linkType") || '',
  142. // activityId:uni.getStorageSync("togetherId") || ''
  143. }
  144. this.syncData(params);
  145. }
  146. }else{
  147. this.$api.msg('请求中,请稍等!', 2500);
  148. return
  149. };
  150. },
  151. //订单提交,拿到订单id
  152. syncData(data){
  153. console.log('data',data);
  154. // return
  155. this.$api.http.post(this.config.apiBaseurl + "/carbon-h5/wap/order/createOrder",data,{
  156. header: {
  157. Accept:'application/json',
  158. Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
  159. },
  160. }).then(res=>{
  161. console.log('res',res);
  162. this.requested = true;
  163. if(res.data.retHead.errCode == 0){
  164. this.pullWeichatPay(res.data.retBody)
  165. }else{
  166. this.$api.msg(res.data.retHead.errMsg)
  167. }
  168. uni.hideLoading()
  169. }).catch( err =>{
  170. this.requested = true;
  171. console.log('createOrder err',err)
  172. })
  173. },
  174. //拉起微信支付
  175. pullWeichatPay(item){
  176. this.orderid = item.guid;
  177. let self = this;
  178. console.log('pay item',item);
  179. let userInfo = uni.getStorageSync("userInfo");
  180. console.log('userInfo',userInfo);
  181. // return
  182. let params = {
  183. orderId:item.guid,
  184. // payType:item.payType,
  185. openid:userInfo.wxId,
  186. "tradeType":"test"
  187. };
  188. this.$api.http.post(this.config.apiBaseurl + "/carbon-h5/wechat/pay",params,{
  189. header: {
  190. Accept:'application/json',
  191. Authorization: 'Bearer '+ this.token, //注意Bearer后面有一空格
  192. },
  193. }).then(res=>{
  194. uni.requestPayment({
  195. provider: 'wxpay',
  196. timeStamp:res.data.retBody.timeStamp,
  197. nonceStr: res.data.retBody.nonceStr,
  198. package: res.data.retBody.packageValue,
  199. signType: 'MD5',
  200. paySign: res.data.retBody.paySign,
  201. success: function (res) {
  202. // self.$api.href('/pages/usercenter/orderList/orderList')
  203. // self.$api.href('/pages/usercenter/certificateList/certificate/certificate?orderid=' + self.orderid);
  204. self.$api.href('/pages/buySuccess/buySuccess?orderid=' + self.orderid)
  205. console.log('success:' + JSON.stringify(res));
  206. },
  207. fail: function (err) {
  208. console.log('fail:' + JSON.stringify(err));
  209. }
  210. });
  211. }).catch( err =>{
  212. console.log('pay err',err)
  213. })
  214. }
  215. },
  216. computed:{
  217. //订单总价计算
  218. totalPrice:function(){
  219. let totalPrice = 0
  220. let len = this.cartList.length
  221. for(let i = 0; i < len;i++){
  222. totalPrice += this.cartList[i].totalPrice
  223. }
  224. return totalPrice
  225. }
  226. }
  227. }
  228. </script>
  229. <style>
  230. @import url("confirmOrder.css");
  231. </style>