import { orderConfirm, getCouponsOrderPrice, orderCreate, postOrderComputed } from '../../api/order.js'; import { getAddressDefault, getAddressDetail } from '../../api/user.js'; import { openPaySubscribe } from '../../utils/SubscribeMessage.js'; import { storeListApi } from '../../api/store.js'; import { CACHE_LONGITUDE, CACHE_LATITUDE } from '../../config.js'; const app = getApp(); Page({ /** * 页面的初始数据 */ data: { textareaStatus: true, parameter: { 'navbar': '1', 'return': '1', 'title': '提交订单', 'color': true, 'class': '0' }, //支付方式 cartArr: [{ "name": "微信支付", "icon": "icon-weixin2", value: 'weixin', title: '微信快捷支付' }, { "name": "余额支付", "icon": "icon-icon-test", value: 'yue', title: '可用余额:' }, { "name": "线下支付", "icon": "icon-yinhangqia", value: 'offline', title: '线下支付' }, ], payType: 'weixin', //支付方式 openType: 1, //优惠券打开方式 1=使用 active: 0, //支付方式切换 coupon: { coupon: false, list: [], statusTile: '立即使用' }, //优惠券组件 address: { address: false }, //地址组件 addressInfo: {}, //地址信息 pinkId: 0, //拼团id addressId: 0, //地址id couponId: 0, //优惠券id cartId: '', //购物车id userInfo: {}, //用户信息 mark: '', //备注信息 couponTitle: '请选择', //优惠券 coupon_price: 0, //优惠券抵扣金额 useIntegral: false, //是否使用积分 integral_price: 0, //积分抵扣金额 ChangePrice: 0, //使用积分抵扣变动后的金额 formIds: [], //收集formid status: 0, is_address: false, isClose: false, toPay: false, //修复进入支付时页面隐藏从新刷新页面 shippingType: 0, system_store: {}, storePostage: 0, contacts: '', contactsTel: '', mydata: {}, storeList: [] }, /** * 授权回调事件 */ onLoadFun: function () { this.getaddressInfo(); this.getConfirm(); //调用子页面方法授权后执行获取地址列表 this.selectComponent('#address-window').getAddressList(); }, /** * 生命周期函数--监听页面显示 */ onShow: function () { this.setData({ textareaStatus: true }); if (app.globalData.isLog && this.data.isClose && this.data.toPay == false) { this.getaddressInfo(); this.selectComponent('#address-window').getAddressList(); } let pages = getCurrentPages(); let currPage = pages[pages.length - 1]; //当前页面 if (currPage.data.storeItem) { let json = currPage.data.storeItem; this.setData({ system_store: json, }); } }, /** * 获取门店列表数据 */ getList: function () { let longitude = wx.getStorageSync(CACHE_LONGITUDE); //经度 let latitude = wx.getStorageSync(CACHE_LATITUDE); //纬度 let data = { latitude: latitude, //纬度 longitude: longitude, //经度 page: 1, limit: 10 } storeListApi(data).then(res => { let list = res.data.list || []; this.setData({ storeList: list, system_store: list[0], }); }).catch(err => { }) }, /* * 跳转门店列表 */ showStoreList: function () { wx.navigateTo({ url: '/pages/goods_details_store/index?go=order' }) }, computedPrice: function () { let shippingType = this.data.shippingType; postOrderComputed(this.data.orderKey, { addressId: this.data.addressId, useIntegral: this.data.useIntegral ? 1 : 0, couponId: this.data.couponId, shipping_type: parseInt(shippingType) + 1, payType: this.data.payType }).then(res => { let result = res.data.result; if (result) { this.setData({ totalPrice: result.pay_price, integral_price: result.deduction_price, coupon_price: result.coupon_price, integral: this.data.useIntegral ? result.SurplusIntegral : this.data.userInfo.integral, 'priceGroup.storePostage': shippingType == 1 ? 0 : result.pay_postage, }); } }) }, addressType: function (e) { let index = e.currentTarget.dataset.index; if (this.data.storeList.length > 0) { this.setData({ shippingType: parseInt(index) }); } else { if (index == 1) { return app.Tips({ title: '暂无门店信息,你无法选择到店自提' }); } } this.computedPrice(); }, bindPickerChange: function (e) { let value = e.detail.value; this.setData({ shippingType: value }) this.computedPrice(); }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { this.setData({ isClose: true }); }, ChangCouponsClone: function () { this.setData({ 'coupon.coupon': false }); }, changeTextareaStatus: function () { for (var i = 0, len = this.data.coupon.list.length; i < len; i++) { this.data.coupon.list[i].use_title = ''; this.data.coupon.list[i].is_use = 0; } this.setData({ textareaStatus: true, status: 0, "coupon.list": this.data.coupon.list }); }, /** * 处理点击优惠券后的事件 */ ChangCoupons: function (e) { var index = e.detail, list = this.data.coupon.list, couponTitle = '请选择', couponId = 0; for (var i = 0, len = list.length; i < len; i++) { if (i != index) { list[i].use_title = ''; list[i].is_use = 0; } } if (list[index].is_use) { //不使用优惠券 list[index].use_title = ''; list[index].is_use = 0; } else { //使用优惠券 list[index].use_title = '不使用'; list[index].is_use = 1; couponTitle = list[index].coupon_title; couponId = list[index].id; } this.setData({ couponTitle: couponTitle, couponId: couponId, 'coupon.coupon': false, "coupon.list": list, }); this.computedPrice(); }, /** * 使用积分抵扣 */ ChangeIntegral: function () { this.setData({ useIntegral: !this.data.useIntegral }); this.computedPrice(); }, /** * 选择地址后改变事件 * @param object e */ OnChangeAddress: function (e) { this.setData({ textareaStatus: true, addressId: e.detail, 'address.address': false }); this.getaddressInfo(); this.computedPrice(); }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { if (!options.cartId) return app.Tips({ title: '请选择要购买的商品' }, { tab: 3, url: 1 }); // if (options.shippingType) this.setData({ shippingType: options.shippingType, storeIndex: options.storeIndex }); this.setData({ couponId: options.couponId || 0, pinkId: options.pinkId ? parseInt(options.pinkId) : 0, addressId: options.addressId || 0, cartId: options.cartId, is_address: options.is_address ? true : false }); }, bindHideKeyboard: function (e) { this.setData({ mark: e.detail.value }); }, /** * 获取当前订单详细信息 */ getConfirm: function () { var that = this; orderConfirm(this.data.cartId).then(res => { that.setData({ userInfo: res.data.userInfo, integral: res.data.userInfo.integral, cartInfo: res.data.cartInfo, integralRatio: res.data.integralRatio, offlinePostage: res.data.offlinePostage, orderKey: res.data.orderKey, priceGroup: res.data.priceGroup, totalPrice: app.help().Add(parseFloat(res.data.priceGroup.totalPrice), parseFloat(res.data.priceGroup.storePostage)), seckillId: parseInt(res.data.seckill_id), usableCoupon: res.data.usableCoupon, // system_store: res.data.system_store, store_self_mention: res.data.store_self_mention }); that.data.cartArr[1].title = '可用余额:' + res.data.userInfo.now_money; if (res.data.offline_pay_status == 2) that.data.cartArr.pop(); that.setData({ cartArr: that.data.cartArr, ChangePrice: that.data.totalPrice }); that.getBargainId(); that.getCouponList(); that.getList(); }).catch(err => { return app.Tips({ title: err }, { tab: 3, url: 1 }); }); }, /* * 提取砍价和拼团id */ getBargainId: function () { var that = this; var cartINfo = that.data.cartInfo; var BargainId = 0; var combinationId = 0; cartINfo.forEach(function (value, index, cartINfo) { BargainId = cartINfo[index].bargain_id, combinationId = cartINfo[index].combination_id }) that.setData({ BargainId: parseInt(BargainId), combinationId: parseInt(combinationId) }); if (that.data.cartArr.length == 3 && (BargainId || combinationId || that.data.seckillId)) { that.data.cartArr.pop(); that.setData({ cartArr: that.data.cartArr }); } }, /** * 获取当前金额可用优惠券 */ getCouponList: function () { var that = this; let data = { cartId: this.data.cartId } getCouponsOrderPrice(this.data.totalPrice, data).then(res => { that.setData({ 'coupon.list': res.data, openType: 1 }); }); }, /* * 获取默认收货地址或者获取某条地址信息 */ getaddressInfo: function () { var that = this; if (that.data.addressId) { getAddressDetail(that.data.addressId).then(res => { res.data.is_default = parseInt(res.data.is_default); that.setData({ addressInfo: res.data || {}, addressId: res.data.id || 0, 'address.addressId': res.data.id || 0 }); }) } else { getAddressDefault().then(res => { res.data.is_default = parseInt(res.data.is_default); that.setData({ addressInfo: res.data || {}, addressId: res.data.id || 0, 'address.addressId': res.data.id || 0 }); }) } }, payItem: function (e) { var that = this; var active = e.currentTarget.dataset.index; that.setData({ active: active, animated: true, payType: that.data.cartArr[active].value, }); that.computedPrice(); setTimeout(function () { that.car(); }, 500); }, coupon: function () { this.setData({ 'coupon.coupon': true }) }, car: function () { var that = this; that.setData({ animated: false }); }, onAddress: function () { this.setData({ textareaStatus: false, 'address.address': true, pagesUrl: '/pages/user_address_list/index?cartId=' + this.data.cartId + '&pinkId=' + this.data.pinkId + '&couponId=' + this.data.couponId }); }, realName: function (e) { this.setData({ contacts: e.detail.value }) }, phone: function (e) { this.setData({ contactsTel: e.detail.value }) }, SubOrder: function (e) { var that = this, data = {}; if (!this.data.payType) return app.Tips({ title: '请选择支付方式' }); if (!this.data.addressId && !this.data.shippingType) return app.Tips({ title: '请选择收货地址' }); if (this.data.shippingType == 1) { if (this.data.contacts == "" || this.data.contactsTel == "") return app.Tips({ title: '请填写联系人或联系人电话' }); if (!/^1(3|4|5|7|8|9|6)\d{9}$/.test(this.data.contactsTel)) { return app.Tips({ title: '请填写正确的手机号' }); } if (!/^[\u4e00-\u9fa5\w]{2,16}$/.test(this.data.contacts)) { return app.Tips({ title: '请填写您的真实姓名' }); } } data = { real_name: that.data.contacts, phone: that.data.contactsTel, addressId: that.data.addressId, formId: '', couponId: that.data.couponId, payType: that.data.payType, useIntegral: that.data.useIntegral, bargainId: that.data.BargainId, combinationId: that.data.combinationId, pinkId: that.data.pinkId, seckill_id: that.data.seckillId, mark: that.data.mark, store_id: that.data.system_store ? that.data.system_store.id : 0, 'from': 'routine', shipping_type: app.help().Add(that.data.shippingType, 1) }; if (data.payType == 'yue' && parseFloat(that.data.userInfo.now_money) < parseFloat(that.data.totalPrice)) return app.Tips({ title: '余额不足!' }); wx.showLoading({ title: '订单支付中' }); openPaySubscribe().then(() => { orderCreate(this.data.orderKey, data).then(res => { var status = res.data.status, orderId = res.data.result.orderId, jsConfig = res.data.result.jsConfig, goPages = '/pages/order_pay_status/index?order_id=' + orderId + '&msg=' + res.msg; switch (status) { case 'ORDER_EXIST': case 'EXTEND_ORDER': case 'PAY_ERROR': wx.hideLoading(); return app.Tips({ title: res.msg }, { tab: 5, url: goPages }); break; case 'SUCCESS': wx.hideLoading(); if (that.data.BargainId || that.data.combinationId || that.data.pinkId || that.data.seckillId) return app.Tips({ title: res.msg, icon: 'success' }, { tab: 4, url: goPages }); return app.Tips({ title: res.msg, icon: 'success' }, { tab: 5, url: goPages }); break; case 'WECHAT_PAY': that.setData({ toPay: true }); wx.requestPayment({ timeStamp: jsConfig.timestamp, nonceStr: jsConfig.nonceStr, package: jsConfig.package, signType: jsConfig.signType, paySign: jsConfig.paySign, success: function (res) { wx.hideLoading(); if (that.data.BargainId || that.data.combinationId || that.data.pinkId || that.data.seckillId) return app.Tips({ title: '支付成功', icon: 'success' }, { tab: 4, url: goPages }); return app.Tips({ title: '支付成功', icon: 'success' }, { tab: 5, url: goPages }); }, fail: function (e) { wx.hideLoading(); return app.Tips({ title: '取消支付' }, { tab: 5, url: goPages + '&status=2' }); }, complete: function (e) { wx.hideLoading(); //关闭当前页面跳转至订单状态 if (res.errMsg == 'requestPayment:cancel') return app.Tips({ title: '取消支付' }, { tab: 5, url: goPages + '&status=2' }); }, }) break; case 'PAY_DEFICIENCY': wx.hideLoading(); //余额不足 return app.Tips({ title: res.msg }, { tab: 5, url: goPages + '&status=1' }); break; } }).catch(err => { wx.hideLoading(); return app.Tips({ title: err }); }); }); } })