export default { data() { return { isIphoneX: false, orderCreateData: { is_balance: 0, is_point: 1, buyer_message: '', // 发票 is_invoice: 0, // 是否需要发票 0 无发票 1 有发票 invoice_type: 1, // 发票类型 1 纸质 2 电子 invoice_title_type: 1, // 抬头类型 1 个人 2 企业 is_tax_invoice: 0, // 是否需要增值税专用发票 0 不需要 1 需要 invoice_title: '', // 发票抬头 taxpayer_number: '', // 纳税人识别号 invoice_content: '', // 发票内容 invoice_full_address: '', // 发票邮寄地址 invoice_email: '', //发票邮箱 member_address: { mobile: '' }, is_open_card: 0, member_card_unit: '' }, orderPaymentData: { shop_goods_list: { site_name: '', express_type: [], coupon_list: [], invoice: { invoice_content_array: [] } }, member_account: { balance: 0, is_pay_password: 0 }, delivery: { delivery_type: '' }, member_address: { mobile: '' }, local_config: { info: { start_time: 0, end_time: 0, time_week: [] } }, delivery_store_info: { } }, isSub: false, tempData: null, manjian: [], // 门店信息 storeInfo: { storeList: [], //门店列表 currStore: {} //当前选择门店 }, // 自提地址 member_address: { mobile: '' }, // 当前时间 timeInfo: { week: 0, start_time: 0, end_time: 0, showTime: false, showTimeBar: false }, post_free : {}, canLocalDelicery: true, deliveryWeek: "", out_trade_no: null, menuButtonBounding: {} ,// 小程序胶囊属性 memberAddress: null, // 会员收货地址 localMemberAddress: null // 会员本地配送收货地址 }; }, onLoad(){ if (!this.location) this.$util.getLocation(); // #ifdef MP this.menuButtonBounding = uni.getMenuButtonBoundingClientRect(); // #endif this.isIphoneX = this.$util.uniappIsIPhoneX(); if (uni.getStorageSync('addressBack')) { uni.removeStorageSync('addressBack'); } // 判断登录 if (!uni.getStorageSync('token')) { this.$refs.login.open('/pages_promotion/blindbox/fill_address'); } else { this.getOrderPaymentData(); } }, methods: { // 获取订单初始化数据 getOrderPaymentData() { if (this.out_trade_no) return; this.orderCreateData = uni.getStorageSync('blindOrderCreateData'); var pay_flag = uni.getStorageSync("pay_flag"); // 支付中标识,防止返回时,提示,跳转错误 if (!this.orderCreateData) { if (pay_flag == 1) { uni.removeStorageSync("pay_flag"); } else { this.$util.showToast({ title: '未获取到创建订单所需数据!' }); setTimeout(() => { this.$util.redirectTo('/pages/index/index'); }, 1500); } return; } // 获取经纬度 if (this.location) { this.orderCreateData.latitude = this.location.latitude; this.orderCreateData.longitude = this.location.longitude; } this.$api.sendRequest({ url: '/blindbox/api/order/payment', data: this.orderCreateData, success: res => { if (res.code >= 0) { this.orderPaymentData = res.data; this.handlePaymentData(); if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); } else { this.$util.showToast({ title: '未获取到创建订单所需数据!' }); setTimeout(() => { this.$util.redirectTo('/pages/index/index'); }, 1500); } }, fail: res => { if (this.$refs.loadingCover) this.$refs.loadingCover.hide(); } }) }, // 处理结算订单数据 handlePaymentData() { this.orderCreateData.delivery = {}; this.orderCreateData.coupon = {}; this.orderCreateData.is_balance = 0; this.orderCreateData.is_point = 0; this.orderCreateData.is_invoice = 0; // 是否需要发票 0 无发票 1 有发票 this.orderCreateData.invoice_type = 1; // 发票类型 1 纸质 2 电子 this.orderCreateData.invoice_title_type = 1; // 发票抬头类型 1 个人 2企业 this.orderCreateData.is_tax_invoice = 0; // 是否需要增值税专用发票 0 不需要 1 需要 this.orderCreateData.invoice_title = ''; var data = this.orderPaymentData; // 店铺配送方式 if (data.shop_goods_list.express_type != undefined && data.shop_goods_list.express_type[0] != undefined) { var express_type = data.shop_goods_list.express_type; this.orderCreateData.delivery.store_id = 0; // 获取选择配送方式缓存 var delivery_storage = uni.getStorageSync('delivery'); if (delivery_storage) { var delivery_type = delivery_storage.name; var delivery_type_name = delivery_storage.title; express_type.forEach(item => { if ((delivery_type == 'store' && item.name == delivery_type) || (delivery_type == 'local' && item.name == delivery_type)) { this.storeSelected(item); } }) // 如果配送方式缓存是门店配送模拟点击门店tab选项 if (delivery_type == 'store') { this.member_address = { mobile: data.member_account.mobile != '' ? data.member_account.mobile : '' }; } } else { var delivery_type = express_type[0].name; if(delivery_type == "store"){ this.member_address = { mobile: data.member_account.mobile != '' ? data.member_account.mobile : '' }; } var delivery_type_name = express_type[0].title; } this.orderCreateData.delivery.delivery_type = delivery_type; this.orderCreateData.delivery.delivery_type_name = delivery_type_name; // 如果默认配送方式是门店配送模拟点击门店tab选项 if (express_type[0].name == 'store' || express_type[0].name == 'local') { this.storeSelected(express_type[0]); } } if (data.is_virtual) this.member_address = { mobile: data.member_account.mobile != '' ? data.member_account.mobile : '' }; Object.assign(this.orderPaymentData, this.orderCreateData); }, // 显示弹出层 openPopup(ref) { this.$refs[ref].open(); }, // 关闭弹出层 closePopup(ref) { if (this.tempData) { Object.assign(this.orderCreateData, this.tempData); Object.assign(this.orderPaymentData, this.tempData); this.tempData = null; this.$forceUpdate(); } this.$refs[ref].close(); }, // 选择收货地址 selectAddress() { var params = { back: encodeURIComponent('/pages_promotion/blindbox/fill_address?blindbox_goods_id='+this.blindbox_goods_id+'&out_trade_no='+this.outTradeNo), local: 0, type: 1 } // 外卖配送需要定位地址 if (this.orderPaymentData.delivery.delivery_type == 'local') { params.local = 1; params.type = 2; } this.$util.redirectTo('/pages_tool/member/address', params); }, // 订单计算 orderCalculate() { var data = this.$util.deepClone(this.orderCreateData); data.delivery = JSON.stringify(data.delivery); this.$api.sendRequest({ url: '/blindbox/api/order/calculate', data, success: res => { if (res.code >= 0) { if (res.data.delivery) { if (res.data.delivery.delivery_type == 'express') this.memberAddress = res.data.member_address; if (res.data.delivery.delivery_type == 'local') this.localMemberAddress = res.data.member_address; } if (res.data.shop_goods_list.local_config) this.orderPaymentData.local_config = res.data.shop_goods_list.local_config; if (res.data.shop_goods_list.delivery_store_info) this.orderPaymentData.delivery_store_info = res.data.shop_goods_list.delivery_store_info; this.$forceUpdate(); } else { this.$util.showToast({ title: res.message }); } } }) }, /** * 订单创建 * @param {String} pay_password 支付密码 */ orderCreate() { if (this.verify()) { if (this.isSub) return; this.isSub = true; uni.showLoading({ title: '' }) var data = this.$util.deepClone(this.orderCreateData); data.delivery = JSON.stringify(data.delivery); if (this.orderCreateData.delivery.delivery_type == 'store') { data.member_address = JSON.stringify(this.member_address); } else { data.member_address = JSON.stringify(data.member_address); } this.$api.sendRequest({ url: '/blindbox/api/order/create', data, success: res => { uni.hideLoading(); if (res.code == 0) { this.$util.redirectTo('/pages_rush/order/list', {}, 'redirectTo'); } else { if(res.data == ""){ this.$util.showToast({ title: res.message }); } this.isSub = false; } }, fail: res => { uni.hideLoading(); this.isSub = false; } }) } }, // 订单验证 verify() { if (this.orderPaymentData.is_virtual == 0) { if (!this.orderCreateData.delivery || !this.orderCreateData.delivery.delivery_type) { this.$util.showToast({ title: '商家未设置配送方式' }); return false; } if (this.orderCreateData.delivery.delivery_type != 'store') { if (!this.orderPaymentData.member_address) { this.$util.showToast({ title: '请先选择您的收货地址' }); return false; } } if (this.orderCreateData.delivery.delivery_type != 'store') { if (!this.orderPaymentData.member_address) { this.$util.showToast({ title: '请先选择您的收货地址' }); return false; } } if (this.orderCreateData.delivery.delivery_type == 'store') { if (!this.orderCreateData.delivery.store_id) { this.$util.showToast({ title: '没有可提货的门店,请选择其他配送方式' }); return false; } if (!this.member_address.mobile) { this.$util.showToast({ title: '请输入预留手机' }); return false; } var reg = /^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$/; if (!reg.test(this.member_address.mobile)) { this.$util.showToast({ title: '请输入正确的预留手机' }); return false; } if(!this.orderCreateData.buyer_ask_delivery_time){ this.$util.showToast({ title: '请输入自提时间' }); return false; } } if (this.orderCreateData.delivery.delivery_type == 'local') { if (!this.orderCreateData.delivery.store_id) { this.$util.showToast({ title: '没有可配送的门店,请选择其他配送方式' }); return false; } if (this.orderPaymentData.local_config && this.orderPaymentData.local_config.info && this.orderPaymentData.local_config.info.time_is_open == 1 && !this.orderCreateData.buyer_ask_delivery_time) { this.$util.showToast({ title: '请选择配送时间' }); return false; } } } return true; }, // 选择配送方式 selectDeliveryType(data) { uni.setStorageSync('delivery', { title: data.title, name: data.name }); this.orderCreateData.delivery.delivery_type = data.name; this.orderCreateData.delivery.delivery_type_name = data.title; // 如果是门店配送 if (data.name == 'store') { this.storeSelected(data); if (!this.member_address.mobile) this.member_address.mobile = this.orderPaymentData.member_account.mobile != '' ? this.orderPaymentData.member_account.mobile : ''; } if (data.name == 'local') { this.storeSelected(data); } Object.assign(this.orderPaymentData, this.orderCreateData); this.orderCalculate(); this.$forceUpdate(); }, // 切换到门店 storeSelected(data) { // 门店列表 this.storeInfo.storeList = data.store_list; let store = data.store_list[0] ? data.store_list[0] : null; this.selectPickupPoint(store); }, /** * 选择自提点 */ selectPickupPoint(store_item) { if (store_item) { this.orderCreateData.delivery.store_id = store_item.store_id; this.storeInfo.currStore = store_item; // 存储所选门店 let delivery = uni.getStorageSync('delivery'); delivery.store_id = store_item.store_id; uni.setStorageSync('delivery', delivery) } else { this.orderCreateData.delivery.store_id = 0; this.storeInfo.currStore = {}; } this.orderCreateData.buyer_ask_delivery_time = ''; this.orderCreateData.buyer_ask_delivery_title = ''; Object.assign(this.orderPaymentData, this.orderCreateData); this.orderCalculate(); this.$forceUpdate(); this.$refs['deliveryPopup'].close(); }, popupConfirm(ref) { this.orderCalculate(); this.$forceUpdate(); this.tempData = null; this.$refs[ref].close(); }, imageError(goodsIndex) { this.orderPaymentData.shop_goods_list.goods_list[goodsIndex].sku_image = this.$util.getDefaultImage().goods; this.$forceUpdate(); }, navigateTo(sku_id) { this.$util.redirectTo('/pages/goods/detail', { sku_id }); }, /** * 同城配送数据处理 */ localtime(type = ''){ let data = this.$util.deepClone(this.orderPaymentData.local_config.info); if (data.delivery_time) { data.end_time = data.delivery_time[ (data.delivery_time.length - 1) ].end_time; } let obj = { delivery: this.orderCreateData.delivery, dataTime: data } this.$refs.timePopup.open(obj,type); }, /** * 门店自提数据处理 */ storetime(type = ''){ if(this.orderPaymentData.delivery_store_info){ let data = this.$util.deepClone(this.storeInfo.currStore); if (data.delivery_time) { data.delivery_time = JSON.parse(data.delivery_time); data.end_time = data.delivery_time[ (data.delivery_time.length - 1) ].end_time; } else { data.delivery_time = [ {start_time: data.start_time, end_time: data.end_time} ] } let obj = { delivery:this.orderCreateData.delivery, dataTime:data } this.$refs.timePopup.open(obj,type); this.$forceUpdate(); } }, /** * 弹窗返回数据 */ selectPickupTime(data){ if(data.data && data.data.month){ let nowDate = new Date(); let Year = nowDate.getFullYear(); let timeData = data.data.month.split('月'); let month = timeData[0]; let date = timeData[1].split('日')[0] this.orderCreateData.buyer_ask_delivery_time = Year + '-' + month + '-' + date + ' ' + data.data.time + ':00' if(data.data.title == '今天' || data.data.title == '明天'){ this.orderCreateData.buyer_ask_delivery_title = data.data.title + '(' + data.data.time + ')' }else{ this.orderCreateData.buyer_ask_delivery_title = data.data.month + '(' + data.data.time + ')' } this.$forceUpdate(); } }, /** * 保存留言 */ saveBuyerMessage(){ this.$refs.buyerMessagePopup.close(); }, /** * 微信订阅消息 */ subscribeMessage() { let keywords = 'ORDER_PAY,ORDER_DELIVERY,ORDER_TAKE_DELIVERY'; if(this.orderCreateData.delivery && this.orderCreateData.delivery.delivery_type == 'store'){ keywords = 'ORDER_PAY,ORDER_TAKE_DELIVERY'; } this.$api.sendRequest({ url: '/weapp/api/weapp/messagetmplids', data: { keywords: keywords }, success: res => { if (res.data.length) { uni.requestSubscribeMessage({ tmplIds: res.data, success: (res) => {}, fail: (res) => { console.log('fail', res) } }) } } }) } }, computed: { goodsData(){ if (this.orderPaymentData.shop_goods_list.goods_list) { this.orderPaymentData.shop_goods_list.goods_list.forEach(item => { if (item.sku_spec_format) item.sku_spec_format = JSON.parse(item.sku_spec_format); }) return this.orderPaymentData.shop_goods_list; } }, storeToken: function(nVal, oVal) { this.getOrderPaymentData(); } }, watch: { location: function(nVal){ if (nVal) { this.getOrderPaymentData(); } } }, filters: { // 金额格式化输出 moneyFormat(money) { return parseFloat(money).toFixed(2); } } }