ソースを参照

add virtual order pay

stanley-king 4 年 前
コミット
8ad9031579

+ 240 - 0
pages/confirmVOrder/confirmVOrder.js

@@ -0,0 +1,240 @@
+// pages/confirmVOrder.js
+const getReq = require('../../config.js').getReq
+import recordSource from '../../utils/recordSource';
+import Bundle from '../../utils/Bundle'
+
+let app = getApp();
+Page({
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    goods_id: '',
+    ifcart: '0',
+    num: '1',
+    datas: {},
+    goods_list: [],
+    firstLoad: true,
+    cart_id: '',
+    n_goods_list: [],
+    fromSource: '',
+    available_pred: 0,
+    room_bonus: 0,
+    full_discount: 0,
+    opgoods_discount: 0
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    // let goods_id = options.goods_id || ''
+    // let iscart = options.iscart || ''
+    // let num = options.num || ''
+    // let cart_id = options.cart_id || ''
+    let goods_id = '6217'
+    let iscart = '0'
+    let num = '1'
+    let cart_id = ''
+    
+    this.setData({
+      goods_id,
+      ifcart: iscart,
+      num,
+      cart_id
+    })
+    this.getDatas(goods_id, iscart, num, cart_id)
+  },
+  getDatas(goods_id, ifcart, num, cart_id) {
+    wx.showLoading({
+      title: '加载中',
+    })
+    var self = this
+    let goods_datas = '';
+    if (ifcart == 0) {
+      goods_datas = goods_id + '|' + num;
+    }
+    else {
+      goods_datas = cart_id;
+    }
+    let fromSource = recordSource(app, `act=member_buy&op=step_first&curpage=1&cart_id=${goods_datas}&ifcart=${ifcart}&client_type=mini`)
+    let params = {
+      act: 'member_buy',
+      op: 'step_first',
+      curpage: 1,
+      cart_id: goods_datas,
+      ifcart,
+      from: fromSource
+    }    
+    // this.setData({
+    //   fromSource: app.globalData.fromSource
+    // }),
+    getReq(params, function (res) {
+      wx.hideLoading()
+      if (res.code == 200) {
+        let datas = res.datas
+        console.log(res.datas.toString())
+        let { goods_list, summary, bundling, vpayinfo } = res.datas
+        let { goods_amount,consignee } = vpayinfo
+        let totalPrice = parseFloat(goods_amount + '0.0').toFixed(2)
+        let n_goods_list = self.getNewGoodsList(goods_list, summary, bundling)
+        self.setData({
+          datas,
+          n_goods_list,
+          totalPrice,
+          firstLoad: false,
+        })
+      }
+      else {
+        wx.showToast({
+          icon: 'none',
+          title: res.message,
+          duration: 2000
+        })
+        app.globalData.fcodeErr = res.message
+        wx.navigateBack()
+      }
+    })
+  },
+  toPay() {
+    let goods_id = this.data.goods_id
+    let goods_num = this.data.num
+    let iscart = this.data.ifcart
+    let cart_id = this.data.cart_id
+
+    let ifcart = cart_id ? 1 : 0
+    let cartids = cart_id ? cart_id : (goods_id + '|' + goods_num)
+    let params = {
+      act: 'member_buy',
+      op: 'step_vsecond',
+      payment: 'minipay',
+      usebonus: 1,
+      ifcart,
+      cart_id: cartids,
+      invoice_id: 0
+    }
+    params = Object.assign({}, params);
+    getReq(params, function (res) {
+      wx.hideLoading()
+      if (res.code == 200) {
+        let param = res.datas.param.data
+        let pay_sn = res.datas.pay_sn
+        wx.requestPayment({
+          timeStamp: param.timeStamp, //时间戳,自1970年以来的秒数
+          nonceStr: param.nonceStr, //随机串
+          package: param.package,
+          signType: param.signType, //微信签名方式:
+          paySign: param.paySign, //微信签名
+          success: function (res) {
+            wx.reLaunch({
+              url: "/pages/index/index"
+            })
+          },
+          fail: function (res) {
+            wx.redirectTo({
+              url: `/pages/orderPaySn/orderPaySn?pay_sn=${pay_sn}`
+            })
+          }
+        });
+      }
+      else {
+        wx.showToast({
+          icon: 'none',
+          title: res.message,
+          duration: 2000
+        })
+        app.globalData.fcodeErr = res.message
+        setTimeout(() => {
+          wx.navigateBack()
+        }, 2000);
+      }
+    })
+  },
+  getNewGoodsList(goods_list, summary, bundling) {
+    let summaryMap = new Map()
+    let bundlingMap = new Map()
+    summary.map(item => {
+      summaryMap.set(item['goods_id'], item)
+    })
+    if (bundling.length) {
+      bundling.map(item => {
+        bundlingMap.set(item['bl_id'], item)
+      })
+    }
+    let n_goods_list = new Bundle(goods_list, summaryMap, bundlingMap).createOrders()
+    return n_goods_list
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+    // if (!this.data.firstLoad) {
+    //   app.setFromSource(this.data.fromSource)
+    //   let self = this
+    //   let defaultAddress = app.globalData.defaultAddress
+    //   if (!defaultAddress) return
+    //   let { city_id, area_id } = defaultAddress
+    //   let { freight_hash } = self.data
+    //   let params = {
+    //     act: 'member_buy',
+    //     op: 'change_addrex',
+    //     city_id,
+    //     area_id,
+    //     freight_hash
+    //   }
+    //   getReq(params, function(res) {
+    //     if (res.code == 200) {
+    //        let { freight } = res.datas
+    //        let prev_freight = self.data.freight
+    //        let totalPrice = parseFloat((self.data.totalPrice - prev_freight + freight).toFixed(2))
+    //        self.setData({
+    //         totalPrice
+    //       })
+    //     }
+    //   })    
+    // }
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})

+ 4 - 0
pages/confirmVOrder/confirmVOrder.json

@@ -0,0 +1,4 @@
+{
+  "usingComponents": {},
+  "navigationBarTitleText": "虚拟确认订单"
+}

+ 115 - 0
pages/confirmVOrder/confirmVOrder.wxml

@@ -0,0 +1,115 @@
+<!--pages/confirmVOrder/confirmVOrder.wxml-->
+<view class="check_order">
+  <navigator url="/pages/address/address">
+    <view class="address_wrap" wx:if="{{defaultAddress}}">
+      <image class="adress-icon" src="../../image/address-icon.png"></image>
+      <view style="word-wrap:break-word;max-width: 80%;">
+        <view>
+          <text>{{defaultAddress.true_name}}</text>
+          <text class="ml8">{{defaultAddress.mob_phone}}</text>
+        </view>
+        <view class="mt10">{{defaultAddress.area_info}}</view>
+        <view class="mt10">{{defaultAddress.address}}</view>
+      </view>
+      <image class="see_ensure_desc" src="../../image/back.png"></image>
+    </view>
+    <view wx:else class="address_none">
+      <icon type="warn" size="23" color="#333" />
+      <text decode="{{true}}">&nbsp;&nbsp;请填写收货人信息</text>
+    </view>
+  </navigator>
+
+
+  <view class="mt20 mb20">
+    <view class="payment_method payment-1px-b">
+      <image class="bonus_pay_icon mr20" src="../../image/bonus_pay.png"></image>
+      <view class="mr20">红包支付</view>
+      <view class="f24 col666">可抵扣 ¥{{datas['payinfo']['user_bonus']}}</view>
+    </view>
+    <view class="payment_method">
+      <image class="wx_pay_icon mr16" src="../../image/wx_pay.png"></image>
+      <view>微信支付</view>
+    </view>
+  </view>
+
+  <view class="bacfff" wx:for="{{n_goods_list}}" wx:for-item="item" wx:for-index="idx" wx:key="idx">
+    <block wx:if="{item['bl_id'] > 0}">
+      <view class="order_goods_content vux-1px-b" wx:for="{{item['goods']}}" wx:for-item="bl_item" wx:for-index="bl_index" wx:key="bl_index">
+        <!-- <view>{{bl_item}}</view> -->
+        <image class="order_content_img" src="{{bl_item['goods_summary']['goods_image_url']}}"></image>
+        <view class="order_content_middle over_hidden">
+          <view class="l_height42 one_line_hidden">{{bl_item['goods_summary']['goods_mobile_name']}}</view>
+          <view class="order_letter_pro one_line_hidden">{{bl_item['goods_summary']['goods_spec']}}</view>
+          <view>
+            <text class="f30 col333 ft_bold mr10"><text class="f24 mr6">¥</text>{{bl_item['bl_goods_price']}}</text>
+            <text decode="{{true}}" class="col999 line-through f24">天猫价{{bl_item['goods_summary']['goods_price']}}</text>
+          </view>
+        </view>
+        <view class="order_content_nums">x{{item['goods_num']}}</view>
+      </view>
+    </block>
+    <block wx:if="{{item['bl_id'] == 0}}">
+      <view class="order_goods_content vux-1px-b">
+        <image class="order_content_img" src="{{item['goods_summary']['goods_image_url']}}"></image>
+        <view class="order_content_middle over_hidden">
+          <view class="l_height42 one_line_hidden">{{item['goods_summary']['goods_mobile_name']}}</view>
+          <view class="order_letter_pro one_line_hidden">{{item['goods_summary']['goods_spec']}}</view>
+          <view>
+            <text class="f30 col333 ft_bold mr10" wx:if="{{item['goods_summary']['act_type'] == 0}}"><text class="f24 mr6">¥</text>{{item['goods_summary']['bonus_price']}}</text>
+            <text class="f30 col333 ft_bold mr10" wx:if="{{item['goods_summary']['act_type'] == 2}}"><text class="f24 mr6">¥</text>{{item['goods_summary']['goods_promotion_price']}}</text>
+            <text decode="{{true}}" class="col999 line-through f24">天猫价{{item['goods_summary']['goods_price']}}</text>
+          </view>
+        </view>
+        <view class="order_content_nums">x{{item.goods_num}}</view>
+      </view>
+    </block>
+  </view>
+    <!-- <view class="packet_price-tips bacfff" wx:if="{{datas.payinfo.gap_desc}}">{{datas.payinfo.gap_desc}}~</view> -->
+  <view class="order_entry mt20">
+    <view class="expenses_info">
+      <view class="col666">商品总价</view>
+      <view class="">¥ {{datas.payinfo['goods_amount']}}</view>
+    </view>
+
+    <view class="expenses_info" wx:if="{{full_discount}}">
+      <view class="col666">{{datas.payinfo['full_desc']}}</view>
+      <view class="">- ¥ {{full_discount}}</view>
+    </view>
+
+    <view class="expenses_info" wx:if="{{opgoods_discount}}">
+      <view class="col666">{{datas.payinfo['opgoods_desc']}}</view>
+      <view class="">- ¥ {{opgoods_discount}}</view>
+    </view>
+
+    <view class="expenses_info" wx:if="{{datas['payinfo']['user_bonus'] > 0}}">
+      <view>
+        <text class="col666">红包抵扣</text>
+      </view>
+      <view class="">- ¥ {{datas['payinfo']['user_bonus']}}</view>
+    </view>
+
+    <view class="expenses_info" wx:if="{{room_bonus}}">
+      <view class="col666">共享基金抵扣</view>
+      <view class="">- ¥ {{room_bonus}}</view>
+    </view>
+    <view class="expenses_info">
+      <view class="col666">运费</view>
+      <view class="">+ ¥ {{freight}}</view>
+    </view>
+
+    <view class="expenses_info" wx:if="{{datas.payinfo['discount_desc']}}">
+      <view class="col666">{{datas.payinfo['discount_desc']}}</view>
+    </view>
+
+  </view>
+
+  <view class="order_pay">
+    <view class="just_buy">
+      <view class="just_buy_left">
+        <text>应付: </text>
+        <text class="col333 ft_bold">¥ {{totalPrice}}</text>
+      </view>
+      <view class="just_buy_right" bindtap='toPay'>去付款</view>
+    </view>
+  </view>
+</view>

+ 187 - 0
pages/confirmVOrder/confirmVOrder.wxss

@@ -0,0 +1,187 @@
+/* pages/confirmVOrder/confirmVOrder.wxss */
+.check_order {
+  padding-bottom: 134rpx;
+}
+.address_wrap {
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+  font-size: 24rpx;
+  color: #333;
+  background: #fff;
+  flex-wrap: wrap;
+  padding: 16rpx 100rpx 16rpx 0;
+  position: relative;
+}
+.address_none {
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  color:#333; 
+  padding: 50rpx 0;
+  background: #fff; 
+  font-size: 26rpx;
+}
+.adress-icon {
+  display: block;
+  width: 34rpx;
+  height: 42rpx;
+  margin: 0 20rpx 0 30rpx;
+}
+.see_ensure_desc {
+  width: 16rpx;
+  height: 30rpx;
+  position: absolute;
+  right: 30rpx;
+  top: 50%;
+  margin-top: -15rpx;
+}
+.payment_method {
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+  /* justify-content: space-between; */
+  font-size: 30rpx;
+  padding: 25rpx 30rpx;
+  background: #fff;
+}
+.bonus_pay_icon {
+  width: 34rpx;
+  height: 42rpx;
+}
+.wx_pay_icon {
+  width: 40rpx;
+  height: 40rpx;
+}
+.payment-1px-b {
+  position: relative;
+}
+
+.payment-1px-b::after {
+  content: " ";
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  height: 1px;
+  border-bottom: 1px solid #d9d9d9;
+  color: #d9d9d9;
+  -webkit-transform-origin: 0 100%;
+  transform-origin: 0 100%;
+  -webkit-transform: scaleY(0.5);
+  transform: scaleY(0.5);
+}
+
+.order_goods_content {
+  position: relative;
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+  padding: 30rpx;
+}
+
+.order_content_img {
+  display: block;
+  /* -webkit-flex: 0 0 33.3333%; */
+  /* flex: 0 0 33.3333%; */
+  width: 160rpx;
+  height: 160rpx;
+  flex-shrink: 0;
+}
+
+.order_content_middle {
+  /* -webkit-flex: 0 0 60%;
+  flex: 0 0 60%; */
+  flex: 1;
+  padding-left: 20rpx;
+  font-size: 30rpx;
+  color: #333;
+}
+
+.order_letter_pro {
+  margin: 6rpx 0 30rpx;
+  font-size: 24rpx;
+  color: #666;
+}
+
+.order_content_nums {
+  position: absolute;
+  right: 30rpx;
+  bottom: 36rpx;
+  font-weight: bold;
+  font-size: 24rpx;
+  color: #333333;
+}
+
+.packet_price-tips {
+  padding: 20rpx 0 20rpx 30rpx;
+  color: #a7a7a7;
+  font-size: 24rpx;
+}
+
+.order_entry {
+  padding: 30rpx;
+  background: #fff;
+  font-size: 24rpx;
+}
+
+.expenses_info {
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  height: 50rpx;
+}
+
+.bonus_bg {
+  background: #f2bb11;
+  padding: 5rpx;
+  margin-right: 5rpx;
+}
+
+.bonus_rate {
+  border: 1px dashed #fff;
+}
+
+.order_pay {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 99;
+}
+
+.default_address {
+  font-size: 18rpx;
+  background: #ffeab8;
+  color: #f2bc73;
+  height: 40rpx;
+  line-height: 40rpx;
+  padding-left: 30rpx;
+}
+
+.just_buy {
+  display: -webkit-flex;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  text-align: center;
+  line-height: 94rpx;
+  font-size: 30rpx;
+  background: #fff;
+}
+
+.just_buy_left {
+  -webkit-flex: 0 0 67%;
+  flex: 0 0 67%;
+  font-size: 30rpx;
+}
+
+.just_buy_right {
+  -webkit-flex: 0 0 33%;
+  flex: 0 0 33%;
+  font-size: 30rpx;
+  color: #fff;
+  background: #2b2b2b;
+}