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 }) }) }) } })