From 4aeb7d04c40318b743101f7fefedb8f91e8ad4ae Mon Sep 17 00:00:00 2001 From: ZF sun <34314687@qq.com> Date: Thu, 4 Dec 2025 09:18:00 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0@dcloudio/uni-quicka?= =?UTF-8?q?pp-webview=E4=BE=9D=E8=B5=96=E5=8F=8A=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/common-payment/payment.js | 2159 +++++++++++----------- components/payment/payment.vue | 1376 +++++++------- manifest.json | 11 +- node_modules/jweixin-module/README.md | 4 +- node_modules/jweixin-module/out/index.js | 1 - node_modules/jweixin-module/package.json | 80 +- package-lock.json | 28 +- package.json | 1 + 8 files changed, 1866 insertions(+), 1794 deletions(-) delete mode 100644 node_modules/jweixin-module/out/index.js diff --git a/components/common-payment/payment.js b/components/common-payment/payment.js index eb91860..2fb1ef2 100644 --- a/components/common-payment/payment.js +++ b/components/common-payment/payment.js @@ -1,1078 +1,1083 @@ -import htmlParser from '@/common/js/html-parser'; - -export default { - options: { - styleIsolation: 'shared' - }, - data() { - return { - outTradeNo: '', - isIphoneX: false, - orderCreateData: { - is_balance: 0, - is_point: 1, - is_invoice: 0, // 是否需要发票 0 无发票 1 有发票 - invoice_type: 0, // 发票类型 1 纸质 2 电子 - invoice_title_type: 1, // 抬头类型 1 个人 2 企业 - is_tax_invoice: 0, // 是否需要增值税专用发票 0 不需要 1 需要 - /*coupon: { - coupon_id: 0 - },*/ - coupon: [], - delivery: {}, - member_goods_card: {}, // 会员次卡 - order_key: '', - buyer_message: '' - }, - paymentData: null, - calculateData: null, - tempData: null, - storeId: 0, - deliveryTime: '', // 提货时间 - memberAddress: null, // 会员收货地址 - localMemberAddress: null, // 会员本地配送收货地址 - isRepeat: false, - promotionInfo: null, - transactionAgreement: {}, // 购买须知 - tempFormData: null, - menuButtonBounding: {}, // 小程序胶囊属性 - storeConfig: null, - localConfig: null, - selectGoodsCard: { - skuId: 0, - itemId: 0, - cardList: {} - }, // 当前选择的次卡 - storeData: [], - latitude: '', - longitude: '', - coupon_list: [], - modules: [], - - //商户 - shop_goods_list:[], - merchCoupon: { - merch_id: 0, - data: [] - }, - selectCouponId:0 - } - }, - inject: ['promotion'], - created() { - // #ifdef MP - this.menuButtonBounding = uni.getMenuButtonBoundingClientRect(); - // #endif - this.isIphoneX = this.$util.uniappIsIPhoneX() - if (this.storeToken) { - Object.assign(this.orderCreateData, uni.getStorageSync(this.createDataKey)) - if (this.location) { - this.orderCreateData.latitude = this.location.latitude; - this.orderCreateData.longitude = this.location.longitude; - this.latitude = this.location.latitude; - this.longitude = this.location.longitude; - } - this.payment(); - } else { - this.$nextTick(() => { - this.$refs.loadingCover.hide(); - this.$refs.login.open(this.$util.getCurrentRoute().path) - }) - } - this.getTransactionAgreement(); - }, - computed: { - goodsData() { - if (this.paymentData) { - this.paymentData.goods_list.forEach(item => { - if (item.sku_spec_format) item.sku_spec_format = JSON.parse(item.sku_spec_format); - }) - return this.paymentData; - } - }, - calculateGoodsData() { - if (this.calculateData) { - this.calculateData.goods_list.forEach(item => { - if (item.sku_spec_format) item.sku_spec_format = JSON.parse(item.sku_spec_format); - }) - return this.calculateData; - } - }, - // 余额可抵扣金额 - balanceDeduct() { - if (this.calculateData) { - if (this.calculateData.member_account && this.calculateData.member_account.balance_total <= parseFloat(this.calculateData.order_money).toFixed(2)) { - return parseFloat(this.calculateData.member_account.balance_total).toFixed(2); - } else { - return parseFloat(this.calculateData.order_money).toFixed(2); - } - } - }, - // 门店列表 - storeList() { - return this.getStoreList(); - }, - // 门店信息 - storeInfo() { - let storeList = this.getStoreList(); - if (storeList && this.orderCreateData.delivery && this.orderCreateData.delivery.delivery_type != 'express' && this.storeId) { - return storeList[this.orderCreateData.delivery.store_id]; - } - return null; - }, - // 会员卡购买周期 - cardChargeType() { - if (this.paymentData && this.paymentData.recommend_member_card && Object.keys(this.paymentData.recommend_member_card).length > 0) { - let charge_rule_arr = []; - let charge_rule = this.paymentData.recommend_member_card.charge_rule; - Object.keys(charge_rule).forEach((key, index) => { - switch (key) { - case 'week': - charge_rule_arr.push({ - 'key': key, - 'value': charge_rule[key], - 'title': '周卡', - unit: '周' - }); - break; - case 'month': - charge_rule_arr.push({ - 'key': key, - 'value': charge_rule[key], - 'title': '月卡', - unit: '月' - }); - break; - case 'quarter': - charge_rule_arr.push({ - 'key': key, - 'value': charge_rule[key], - 'title': '季卡', - unit: '季' - }); - break; - case 'year': - charge_rule_arr.push({ - 'key': key, - 'value': charge_rule[key], - 'title': '年卡', - unit: '年' - }); - break; - } - }) - return charge_rule_arr; - } - } - }, - watch: { - storeToken: function (nVal, oVal) { - this.payment(); - }, - deliveryTime: function (nVal) { - if (!nVal) this.$refs.timePopup.refresh(); - }, - location: function (nVal) { - if (nVal) { - this.orderCreateData.latitude = nVal.latitude; - this.orderCreateData.longitude = nVal.longitude; - this.latitude = nVal.latitude; - this.longitude = nVal.longitude; - this.payment(); - } - }, - calculateGoodsData(nVal) { - if (nVal && nVal.local_config && nVal.local_config.info.time_is_open && !this.deliveryTime) this.localtime('no'); - } - }, - methods: { - //多商户商品分类 - goodsSpecFormat(goods_list){ - goods_list.forEach(item => { - if (item.sku_spec_format) item.sku_spec_format = JSON.parse(item.sku_spec_format); - }) - return goods_list - }, - /** - * 父级页面onShow调用 - */ - pageShow() { - if (uni.getStorageSync('addressBack')) { - uni.removeStorageSync('addressBack'); - this.payment(); - } - }, - /** - * 获取订单结算数据 - */ - payment() { - this.$api.sendRequest({ - url: this.api.payment, - data: this.handleCreateData(), - success: res => { - if (res.code == 0 && res.data) { - let data = res.data; - - // #ifdef MP-WEIXIN - var scene = uni.getStorageSync('is_test') ? 1175 : wx.getLaunchOptionsSync().scene; - if ([1175, 1176, 1177, 1191, 1195].indexOf(scene) != -1 && data.delivery.express_type) { - data.delivery.express_type = data.delivery.express_type.filter(item => item.name == 'express'); - } - // #endif - - if (data) { - // 配送方式 - if (data.delivery.express_type && data.delivery.express_type.length) { - let deliveryStorage = uni.getStorageSync('delivery'); - let delivery = data.delivery.express_type[0]; - data.delivery.express_type.forEach(item => { - if (deliveryStorage && item.name == deliveryStorage.delivery_type) { - delivery = item; - } - if (item.name == 'local') this.localConfig = item; - if (item.name == 'store') this.storeConfig = item; - }) - this.selectDeliveryType(delivery, false, data.member_account); - } - } - - // 地址、手机号 - if (data.is_virtual) { - this.orderCreateData.member_address = { - mobile: data.member_account.mobile ? data.member_account.mobile : '' - } - } - - //记录订单key - this.orderCreateData.order_key = data.order_key; - - this.modules = data.modules; - - //记录多商户优惠券 - this.orderCreateData.coupon = data.coupon - - //查询优惠券 - this.getCouponList(); - - // 处理表单数据 - data = this.handleGoodsFormData(data); - - // 该方法在父级组件中 - this.promotionInfo = this.promotion(data); - - this.paymentData = data; - - this.$forceUpdate(); - this.calculate(); - } else { - this.$util.showToast({ - title: res.message - }); - - setTimeout(() => { - this.$util.redirectTo('/pages/index/index'); - }, 1000) - } - } - }) - }, - //查询优惠券 - getCouponList() { - //查询优惠券 - if (this.modules.indexOf('coupon') != -1) { - this.$api.sendRequest({ - url: '/api/ordercreate/getcouponlist', - data: this.orderCreateData, - success: res => { - if (res.code == 0 && res.data) { - let data = res.data; - this.coupon_list = data; - this.$forceUpdate(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }); - - // this.orderCreateData.coupon.coupon_id = 0; - } - - }, - /** - * 处理商品表单数据 - * @param {Object} data - */ - handleGoodsFormData(data) { - let goodsFormData = uni.getStorageSync('goodFormData'); - data.goods_list.forEach(item => { - if (item.goods_form) { - let formData = {}; - if (item.form_data) { - item.form_data.map(formIem => { - formData[formIem.id] = formIem; - }) - } else if (goodsFormData && goodsFormData.goods_id == item.goods_id) { - goodsFormData.form_data.map(formIem => { - formData[formIem.id] = formIem; - }) - } - if (Object.keys(formData).length) { - item.goods_form.json_data.forEach(formIem => { - if (formData[formIem.id]) { - formIem.val = formData[formIem.id].val; - } - }) - } - } - }); - return data; - }, - /** - * 订单创建 - */ - calculate() { - this.$api.sendRequest({ - url: this.api.calculate, - data: this.handleCreateData(), - success: res => { - if (this.$refs.loadingCover && this.$refs.loadingCover.isShow) this.$refs.loadingCover.hide(); - if (res.code == 0 && res.data) { - - // 处理表单数据 - this.calculateData = this.handleGoodsFormData(res.data); - - //多商户商品 - this.shop_goods_list = res.data.shop_goods_list - //--------- - this.calculateData.coupon_list = this.coupon_list; - if (res.data.delivery) { - if (res.data.delivery.delivery_type == 'express') this.memberAddress = res.data.delivery.member_address; - if (res.data.delivery.delivery_type == 'local') { - this.localMemberAddress = res.data.delivery.member_address; - } - } - // 次卡 - res.data.goods_list.forEach(item => { - if (item.member_card_list) { - if (this.orderCreateData.member_goods_card[item.sku_id]) { - let itemId = this.orderCreateData.member_goods_card[item.sku_id]; - if (!item.member_card_list[itemId]) delete this.orderCreateData.member_goods_card[item.sku_id]; - } - } else if (this.orderCreateData.member_goods_card[item.sku_id]) { - delete this.orderCreateData.member_goods_card[item.sku_id]; - } - }); - //多商户 - this.orderCreateData.coupon = res.data.coupon - // if (!res.data.coupon_id) this.orderCreateData.coupon.coupon_id = 0; - // else this.orderCreateData.coupon.coupon_id = res.data.coupon_id; - - this.$forceUpdate(); - } else { - this.$util.showToast({ - title: res.message - }); - } - } - }) - }, - /** - * 提交订单 - */ - create() { - if (!this.verify() || this.isRepeat) return; - this.isRepeat = true; - uni.showLoading({ - title: '' - }); - this.$api.sendRequest({ - url: this.api.create, - data: this.handleCreateData(), - success: res => { - uni.hideLoading(); - if (res.code == 0) { - this.outTradeNo = res.data; - uni.removeStorageSync('deliveryTime'); - uni.removeStorageSync('goodFormData'); - uni.setStorageSync('paySource', ''); - if (this.calculateData.pay_money == 0) { - // #ifdef MP - if (this.paymentData.is_virtual || this.orderCreateData.delivery.delivery_type == 'store') { - this.$util.subscribeMessage('ORDER_VERIFY_OUT_TIME,VERIFY_CODE_EXPIRE,VERIFY'); - } - // #endif - this.$util.redirectTo('/pages_tool/pay/result', { - code: res.data - }, 'redirectTo'); - } else { - this.openChoosePayment(); - } - // 更新购物车数量 - this.$store.dispatch('getCartNumber'); - } else { - this.$util.showToast({ - title: res.message - }); - this.isRepeat = false; - } - } - }) - }, - /** - * 处理订单计算、创建传参 - */ - handleCreateData() { - let data = this.$util.deepClone(this.orderCreateData); - // 订单表单 - if (this.$refs.form) { - data.form_data = { - form_id: this.paymentData.system_form.id, - form_data: this.$util.deepClone(this.$refs.form.formData) - }; - } - // 商品表单 - if (this.$refs.goodsForm) { - if (!data.form_data) data.form_data = {}; - data.form_data.goods_form = {}; - this.$refs.goodsForm.forEach(item => { - data.form_data.goods_form[item._props.customAttr.sku_id] = { - form_id: item._props.customAttr.form_id, - form_data: this.$util.deepClone(item.formData) - } - }) - } - Object.keys(data).forEach((key) => { - let item = data[key]; - if (typeof item == 'object') data[key] = JSON.stringify(item); - }) - - if (this.paymentData && this.orderCreateData.is_virtual == 0) { - if (data.member_address && this.orderCreateData.delivery && this.orderCreateData.delivery.delivery_type != 'store') { - delete data.member_address; - } - } - - return data; - }, - /** - * 打开支付弹窗 - */ - openChoosePayment() { - // #ifdef MP - if (this.paymentData.is_virtual) { - this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY'); - } else { - switch (this.orderCreateData.delivery.delivery_type) { - case 'express': //物流配送 - this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY,ORDER_DELIVERY'); - break; - case 'store': //门店自提 - this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY'); - break; - case 'local': //同城配送 - this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY,ORDER_DELIVERY'); - break; - } - } - // #endif - - this.$refs.choosePaymentPopup.getPayInfo(this.outTradeNo); - }, - verify() { - if (this.paymentData.is_virtual == 1) { - if (!this.orderCreateData.member_address.mobile) { - this.$util.showToast({ - title: '请输入预留手机' - }); - return false; - } - if (!this.$util.verifyMobile(this.orderCreateData.member_address.mobile)) { - this.$util.showToast({ - title: '请输入正确的手机号' - }); - return false; - } - } else { - if (!this.orderCreateData.delivery || !this.orderCreateData.delivery.delivery_type) { - this.$util.showToast({ - title: '商家未设置配送方式' - }); - return false; - } - if ( - (this.orderCreateData.delivery.delivery_type == 'express' && !this.memberAddress) || - (this.orderCreateData.delivery.delivery_type == 'local' && !this.localMemberAddress) - ) { - 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.orderCreateData.member_address.mobile) { - this.$util.showToast({ - title: '请输入预留手机' - }); - return false; - } - if (!this.$util.verifyMobile(this.orderCreateData.member_address.mobile)) { - this.$util.showToast({ - title: '请输入正确的手机号' - }); - return false; - } - if (!this.deliveryTime) { - 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.calculateGoodsData.config.local.is_use && this.calculateGoodsData.delivery.local.info.time_is_open == 1 && !this.deliveryTime) { - this.$util.showToast({ - title: '请选择送达时间' - }); - return false; - } - } - } - - if (this.$refs.goodsForm) { - let formVerify = true; - for (let i = 0; i < this.$refs.goodsForm.length; i++) { - let item = this.$refs.goodsForm[i]; - formVerify = item.verify(); - if (!formVerify) { - break; - } - } - if (!formVerify) return false; - } - if (this.paymentData.system_form) { - let formVerify = this.$refs.form.verify(); - if (!formVerify) return false; - } - return true; - }, - /** - * 选择收货地址 - */ - selectAddress() { - var params = { - back: this.$util.getCurrentRoute().path, - local: 0, - type: 1 - } - // 外卖配送需要定位地址 - if (this.orderCreateData.delivery.delivery_type == 'local') { - params.local = 1; - params.type = 2; - } - this.$util.redirectTo('/pages_tool/member/address', params); - }, - /** - * 选择配送方式 - * @param data - * @param calculate - * @param member_account - */ - selectDeliveryType(data, calculate = true, member_account = null) { - if (this.orderCreateData.delivery && this.orderCreateData.delivery.delivery_type == data.name) return; - - this.orderCreateData.delivery.buyer_ask_delivery_time = { - start_date: '', - end_date: '' - }; - this.deliveryTime = ''; - - let delivery = { - delivery_type: data.name, - delivery_type_name: data.title - } - // 如果是门店配送 - if (data.name == 'store' || data.name == 'local') { - if (data.store_list[0]) { - delivery.store_id = data.store_list[0].store_id; - } - this.storeId = delivery.store_id ? delivery.store_id : 0; - - if (!this.orderCreateData.member_address) { - if (this.paymentData) { - this.orderCreateData.member_address = { - name: this.paymentData.member_account.nickname, - mobile: this.paymentData.member_account.mobile - }; - } else if (member_account) { - this.orderCreateData.member_address = { - name: member_account.nickname, - mobile: member_account.mobile - }; - - } - } - } - - this.$set(this.orderCreateData, 'delivery', delivery); - uni.setStorageSync('delivery', delivery); - - // 配送方式不为门店配送时 - if (this.orderCreateData.delivery.delivery_type != 'express' && !this.location) this.$util.getLocation(); - if (calculate) this.payment(); - - if (data.name == 'store') this.storetime('no'); - if (data.name == 'local') this.localtime('no'); - }, - /** - * 图片错误 - * @param {Object} index - */ - imageError(index) { - this.paymentData.goods_list[index].sku_image = this.$util.getDefaultImage().goods; - this.calculateData.goods_list[index].sku_image = this.$util.getDefaultImage().goods; - this.$forceUpdate(); - }, - /** - * 选择门店 - * @param {Object} data - */ - selectPickupPoint(data) { - if (data.store_id != this.storeId) { - this.storeId = data.store_id; - this.orderCreateData.delivery.store_id = data.store_id; - this.payment(); - this.resetDeliveryTime(); - // 存储所选门店 - let delivery = uni.getStorageSync('delivery'); - delivery.store_id = data.store_id; - uni.setStorageSync('delivery', delivery) - } - this.$refs.deliveryPopup.close(); - }, - /** - * 重置提货时间 - */ - resetDeliveryTime() { - this.orderCreateData.delivery.buyer_ask_delivery_time = { - start_date: '', - end_date: '' - }; - this.deliveryTime = ''; - uni.removeStorageSync('deliveryTime'); - }, - /** - * 门店 - */ - storetime(type = '') { - if (this.storeInfo) { - let data = this.$util.deepClone(this.storeInfo); - data.delivery_time = typeof data.delivery_time == 'string' && data.delivery_time ? JSON.parse(data.delivery_time) : data.delivery_time; - if (!data.delivery_time || data.delivery_time.length == undefined && !data.delivery_time.length) { - 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(); - } - }, - /** - * 选择自提时间 - * @param {Object} data - */ - selectPickupTime(data) { - this.deliveryTime = data.data.month + '(' + data.data.time + ')'; - - this.orderCreateData.delivery.buyer_ask_delivery_time = { - start_date:data.data.start_date, - end_date:data.data.end_date - }; - - //将时间缓存,避免切换地址时重置 - uni.setStorageSync('deliveryTime', { - 'deliveryTime': this.deliveryTime, - 'buyer_ask_delivery_time': this.orderCreateData.delivery.buyer_ask_delivery_time, - 'delivery_type': this.orderCreateData.delivery.delivery_type - }); - - }, - storeImgError() { - this.storeInfo.store_image = this.$util.getDefaultImage().store; - }, - openPopup(ref) { - if (ref == 'deliveryPopup' && (!this.storeList || Object.keys(this.storeList).length <= 1)) return; - this.tempData = this.$util.deepClone(this.orderCreateData); - this.$refs[ref].open(); - }, - closePopup(ref) { - this.orderCreateData = this.$util.deepClone(this.tempData); - this.$refs[ref].close(); - this.tempData = null; - }, - //优惠券单独多商户 - /** - * 显示店铺优惠券信息 - * @param {Object} siteId - * @param {Object} couponData - */ - openSiteCoupon(merch_id) { - - this.tempData = this.$util.deepClone(this.orderCreateData); - this.merchCoupon.merch_id = merch_id; - this.selectCouponId = this.orderCreateData.coupon[merch_id].coupon_id; - // this.selectCouponMoney = this.orderCreateData.coupon[siteId].coupon_money; - - this.merchCoupon.data = this.coupon_list[merch_id]; - this.$refs.couponPopup.open(); - this.$forceUpdate(); - }, - /**商户选择券*/ - selectCoupon(data,merch_id) { - - // if (this.orderCreateData.coupon[merch_id].coupon_id == data.coupon_id){ - // this.orderCreateData.coupon[merch_id].coupon_id = 0 - // }else{ - // this.orderCreateData.coupon[merch_id].coupon_id = data.coupon_id - // }; - if (this.selectCouponId != data.coupon_id) { - this.selectCouponId = data.coupon_id; - } else { - this.selectCouponId = 0; - } - this.$forceUpdate(); - // this.orderCreateData.coupon[merch_id].coupon_id = data.coupon_id - console.log(this.selectCouponId) - }, - //确定使用优惠券 - useCpopon() { - console.log(this.merchCoupon.merch_id) - this.orderCreateData.coupon[this.merchCoupon.merch_id].coupon_id = this.selectCouponId; - console.log(this.orderCreateData.coupon) - this.$refs.couponPopup.close(); - this.calculate(); - }, - - //------------------- - /** - * 选择优惠券 - * @param {Object} data - */ - /*selectCoupon(data) { - if (this.orderCreateData.coupon.coupon_id == data.coupon_id) this.orderCreateData.coupon = { - coupon_id: 0 - }; - else this.orderCreateData.coupon = { - coupon_id: data.coupon_id - }; - },*/ - /** - * 使用优惠券 - */ - // useCpopon() { - // this.$refs.couponPopup.close(); - // this.calculate(); - // }, - /** - * 切换发票开关 - */ - changeIsInvoice() { - if (this.orderCreateData.is_invoice == 0) { - this.orderCreateData.is_invoice = 1; - if (!this.orderCreateData.invoice_type) this.orderCreateData.invoice_type = this.goodsData.invoice.invoice_type.split(',')[0]; - } else { - this.orderCreateData.is_invoice = 0; - } - }, - /** - * 切换发票类型 - * @param {Object} invoice_type - */ - changeInvoiceType(invoice_type) { - this.orderCreateData.invoice_type = invoice_type; - }, - /** - * 切换发票个人还是企业 - * @param {Object} invoice_title_type - */ - changeInvoiceTitleType(invoice_title_type) { - this.orderCreateData.invoice_title_type = invoice_title_type; - }, - /** - * 切换增值税专用发票开关 - */ - changeIsTaxInvoice() { - if (this.orderCreateData.is_tax_invoice == 0) this.orderCreateData.is_tax_invoice = 1; - else this.orderCreateData.is_tax_invoice = 0; - this.$forceUpdate(); - }, - /** - * 选择发票内容 - * @param {Object} invoice_content - */ - changeInvoiceContent(invoice_content) { - this.orderCreateData.invoice_content = invoice_content; - this.$forceUpdate(); - }, - /** - * 验证发票内容 - */ - invoiceVerify() { - if (!this.orderCreateData.invoice_title) { - this.$util.showToast({ - title: '请填写发票抬头' - }); - return false; - } - if (!this.orderCreateData.taxpayer_number && this.orderCreateData.invoice_title_type == 2) { - this.$util.showToast({ - title: '请填写纳税人识别号' - }); - return false; - } - if (this.orderCreateData.invoice_type == 1 && !this.orderCreateData.invoice_full_address && this.paymentData.is_virtual == 1) { - this.$util.showToast({ - title: '请填写发票邮寄地址' - }); - return false; - } - if (this.orderCreateData.invoice_type == 2 && !this.orderCreateData.invoice_email) { - this.$util.showToast({ - title: '请填写邮箱' - }); - return false; - } - if (this.orderCreateData.invoice_type == 2) { - var reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/; - if (!reg.test(this.orderCreateData.invoice_email)) { - this.$util.showToast({ - title: '请填写正确的邮箱' - }); - return false; - } - } - if (!this.orderCreateData.invoice_content) { - this.$util.showToast({ - title: '请选择发票内容' - }); - return false; - } - return true; - }, - /** - * 保存发票设置 - */ - saveInvoice() { - if (this.orderCreateData.is_invoice == 1 && !this.invoiceVerify()) return; - this.calculate(); - this.$refs.invoicePopup.close(); - }, - /** - * 保存留言 - */ - saveBuyerMessage() { - this.$refs.buyerMessagePopup.close(); - }, - /** - * 选择会员卡 - */ - selectMemberCard() { - this.orderCreateData.is_open_card = this.orderCreateData.is_open_card ? 0 : 1; - if (!this.orderCreateData.member_card_unit) this.orderCreateData.member_card_unit = this.cardChargeType[0].key; - this.payment(); - }, - /** - * 选择会员卡充值类型 - * @param {Object} key - */ - selectMembercardUnit(key) { - this.orderCreateData.member_card_unit = key; - this.calculate(); - }, - /** - * 使用积分抵扣 - */ - usePoint() { - this.orderCreateData.is_point = this.orderCreateData.is_point ? 0 : 1; - this.calculate(); - }, - /** - * 支付弹窗关闭 - */ - payClose() { - // 更新购物车数量 - this.$store.dispatch('getCartNumber'); - this.$util.redirectTo('/pages/order/detail', { - order_id: this.$refs.choosePaymentPopup.payInfo.order_id - }, 'redirectTo'); - }, - - /** - * 同城配送送达时间 - */ - localtime(type = '') { - if (this.calculateGoodsData && this.calculateGoodsData.config.local) { - let data = this.$util.deepClone(this.calculateGoodsData.delivery.local.info); - if (Object.keys(data).length) { - 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); - } - - } - }, - /** - * 剩余起送价 - */ - surplusStartMoney() { - let money = 0; - if (this.calculateData && this.calculateData.delivery && this.calculateData.delivery.delivery_type == 'local') { - let startDeliveryMoney = this.calculateGoodsData.delivery.start_money ?? 0; - money = parseFloat(startDeliveryMoney) - parseFloat(this.calculateData.goods_money); - money = money < 0 ? 0 : money; - } - return money; - }, - /** - * 交易协议 - */ - getTransactionAgreement() { - this.$api.sendRequest({ - url: '/api/order/transactionagreement', - success: res => { - if (res.data) { - this.transactionAgreement = res.data; - if (this.transactionAgreement.content) this.transactionAgreement.content = htmlParser(this.transactionAgreement.content); - } - } - }) - }, - editForm(index) { - this.tempFormData = { - index: index, - json_data: this.$util.deepClone(this.goodsData.goods_list[index].goods_form.json_data) - }; - this.$refs.editFormPopup.open(); - }, - saveForm() { - if (this.$refs.tempForm.verify()) { - this.$set(this.paymentData.goods_list[this.tempFormData.index].goods_form, 'json_data', this.$refs.tempForm.formData); - this.$refs.editFormPopup.close(); - } - }, - /** - * 切换次卡 - * @param {Object} index - */ - selectMemberGoodsCard(index) { - let sku_id = this.goodsData.goods_list[index].sku_id; - this.selectGoodsCard = { - skuId: sku_id, - itemId: this.orderCreateData.member_goods_card[sku_id] ? this.orderCreateData.member_goods_card[sku_id] : 0, - cardList: this.$util.deepClone(this.calculateGoodsData.goods_list[index].member_card_list), - click: (item_id) => { - this.selectGoodsCard.itemId = this.selectGoodsCard.itemId == item_id ? 0 : item_id; - } - } - this.$refs.memberGoodsCardPopup.open(); - }, - /** - * 选择次卡 - */ - saveMemberGoodsCard() { - this.orderCreateData.member_goods_card[this.selectGoodsCard.skuId] = this.selectGoodsCard.itemId || 0; - this.$refs.memberGoodsCardPopup.close(); - this.payment(); - }, - back() { - uni.navigateBack({ - delta: 1 - }); - }, - getStoreList() { - let storeList = null; - if (this.orderCreateData.delivery) { - if (this.orderCreateData.delivery.delivery_type == 'local' && this.localConfig) { - storeList = this.localConfig.store_list; - storeList = storeList.reduce((res, item) => { - return { - ...res, - [item.store_id]: item - }; - }, {}); - - } - if (this.orderCreateData.delivery.delivery_type == 'store' && this.storeConfig) { - storeList = this.storeConfig.store_list; - storeList = storeList.reduce((res, item) => { - return { - ...res, - [item.store_id]: item - }; - }, {}); - } - } - return storeList; - }, - getStore(mescroll) { - this.$api.sendRequest({ - url: '/api/store/getStorePage', - data: { - page_size: mescroll.size, - page: mescroll.num, - latitude: this.latitude ?? '', - longitude: this.longitude ?? '', - type: this.orderCreateData.delivery.delivery_type - }, - success: res => { - let newArr = []; - let msg = res.message; - if (res.code == 0 && res.data) { - newArr = res.data.list; - } - mescroll.endSuccess(newArr.length); - //设置列表数据 - - if (mescroll.num == 1) this.storeData = []; //如果是第一页需手动制空列表 - this.storeData = this.storeData.concat(newArr); //追加新数据 - }, - fail: res => { - mescroll.endErr(); - } - }); - } - }, - filters: { - // 金额格式化输出 - moneyFormat(money) { - return parseFloat(money).toFixed(2); - } - } +import htmlParser from '@/common/js/html-parser'; + +export default { + options: { + styleIsolation: 'shared' + }, + data() { + return { + outTradeNo: '', + isIphoneX: false, + orderCreateData: { + is_balance: 0, + is_point: 1, + is_invoice: 0, // 是否需要发票 0 无发票 1 有发票 + invoice_type: 0, // 发票类型 1 纸质 2 电子 + invoice_title_type: 1, // 抬头类型 1 个人 2 企业 + is_tax_invoice: 0, // 是否需要增值税专用发票 0 不需要 1 需要 + /*coupon: { + coupon_id: 0 + },*/ + coupon: [], + delivery: {}, + member_goods_card: {}, // 会员次卡 + order_key: '', + buyer_message: '' + }, + paymentData: null, + calculateData: null, + tempData: null, + storeId: 0, + deliveryTime: '', // 提货时间 + memberAddress: null, // 会员收货地址 + localMemberAddress: null, // 会员本地配送收货地址 + isRepeat: false, + promotionInfo: null, + transactionAgreement: {}, // 购买须知 + tempFormData: null, + menuButtonBounding: {}, // 小程序胶囊属性 + storeConfig: null, + localConfig: null, + selectGoodsCard: { + skuId: 0, + itemId: 0, + cardList: {} + }, // 当前选择的次卡 + storeData: [], + latitude: '', + longitude: '', + coupon_list: [], + modules: [], + + //商户 + shop_goods_list:[], + merchCoupon: { + merch_id: 0, + data: [] + }, + selectCouponId:0 + } + }, + inject: ['promotion'], + created() { + // #ifdef MP + this.menuButtonBounding = uni.getMenuButtonBoundingClientRect(); + // #endif + this.isIphoneX = this.$util.uniappIsIPhoneX() + if (this.storeToken) { + Object.assign(this.orderCreateData, uni.getStorageSync(this.createDataKey)) + if (this.location) { + this.orderCreateData.latitude = this.location.latitude; + this.orderCreateData.longitude = this.location.longitude; + this.latitude = this.location.latitude; + this.longitude = this.location.longitude; + } + this.payment(); + } else { + this.$nextTick(() => { + this.$refs.loadingCover.hide(); + this.$refs.login.open(this.$util.getCurrentRoute().path) + }) + } + this.getTransactionAgreement(); + }, + computed: { + goodsData() { + if (this.paymentData) { + this.paymentData.goods_list.forEach(item => { + if (item.sku_spec_format) item.sku_spec_format = JSON.parse(item.sku_spec_format); + }) + return this.paymentData; + } + }, + calculateGoodsData() { + if (this.calculateData) { + this.calculateData.goods_list.forEach(item => { + if (item.sku_spec_format) item.sku_spec_format = JSON.parse(item.sku_spec_format); + }) + return this.calculateData; + } + }, + // 余额可抵扣金额 + balanceDeduct() { + if (this.calculateData) { + if (this.calculateData.member_account && this.calculateData.member_account.balance_total <= parseFloat(this.calculateData.order_money).toFixed(2)) { + return parseFloat(this.calculateData.member_account.balance_total).toFixed(2); + } else { + return parseFloat(this.calculateData.order_money).toFixed(2); + } + } + }, + // 门店列表 + storeList() { + return this.getStoreList(); + }, + // 门店信息 + storeInfo() { + let storeList = this.getStoreList(); + if (storeList && this.orderCreateData.delivery && this.orderCreateData.delivery.delivery_type != 'express' && this.storeId) { + return storeList[this.orderCreateData.delivery.store_id]; + } + return null; + }, + // 会员卡购买周期 + cardChargeType() { + if (this.paymentData && this.paymentData.recommend_member_card && Object.keys(this.paymentData.recommend_member_card).length > 0) { + let charge_rule_arr = []; + let charge_rule = this.paymentData.recommend_member_card.charge_rule; + Object.keys(charge_rule).forEach((key, index) => { + switch (key) { + case 'week': + charge_rule_arr.push({ + 'key': key, + 'value': charge_rule[key], + 'title': '周卡', + unit: '周' + }); + break; + case 'month': + charge_rule_arr.push({ + 'key': key, + 'value': charge_rule[key], + 'title': '月卡', + unit: '月' + }); + break; + case 'quarter': + charge_rule_arr.push({ + 'key': key, + 'value': charge_rule[key], + 'title': '季卡', + unit: '季' + }); + break; + case 'year': + charge_rule_arr.push({ + 'key': key, + 'value': charge_rule[key], + 'title': '年卡', + unit: '年' + }); + break; + } + }) + return charge_rule_arr; + } + } + }, + watch: { + storeToken: function (nVal, oVal) { + this.payment(); + }, + deliveryTime: function (nVal) { + if (!nVal) this.$refs.timePopup.refresh(); + }, + location: function (nVal) { + if (nVal) { + this.orderCreateData.latitude = nVal.latitude; + this.orderCreateData.longitude = nVal.longitude; + this.latitude = nVal.latitude; + this.longitude = nVal.longitude; + this.payment(); + } + }, + calculateGoodsData(nVal) { + if (nVal && nVal.local_config && nVal.local_config.info.time_is_open && !this.deliveryTime) this.localtime('no'); + } + }, + methods: { + //多商户商品分类 + goodsSpecFormat(goods_list){ + goods_list.forEach(item => { + if (item.sku_spec_format) item.sku_spec_format = JSON.parse(item.sku_spec_format); + }) + return goods_list + }, + /** + * 父级页面onShow调用 + */ + pageShow() { + if (uni.getStorageSync('addressBack')) { + uni.removeStorageSync('addressBack'); + this.payment(); + } + }, + /** + * 获取订单结算数据 + */ + payment() { + this.$api.sendRequest({ + url: this.api.payment, + data: this.handleCreateData(), + success: res => { + if (res.code == 0 && res.data) { + let data = res.data; + + // #ifdef MP-WEIXIN + var scene = uni.getStorageSync('is_test') ? 1175 : wx.getLaunchOptionsSync().scene; + if ([1175, 1176, 1177, 1191, 1195].indexOf(scene) != -1 && data.delivery.express_type) { + data.delivery.express_type = data.delivery.express_type.filter(item => item.name == 'express'); + } + // #endif + + if (data) { + // 配送方式 + if (data.delivery.express_type && data.delivery.express_type.length) { + let deliveryStorage = uni.getStorageSync('delivery'); + let delivery = data.delivery.express_type[0]; + data.delivery.express_type.forEach(item => { + if (deliveryStorage && item.name == deliveryStorage.delivery_type) { + delivery = item; + } + if (item.name == 'local') this.localConfig = item; + if (item.name == 'store') this.storeConfig = item; + }) + this.selectDeliveryType(delivery, false, data.member_account); + } + } + + // 地址、手机号 + if (data.is_virtual) { + this.orderCreateData.member_address = { + mobile: data.member_account.mobile ? data.member_account.mobile : '' + } + } + + //记录订单key + this.orderCreateData.order_key = data.order_key; + + this.modules = data.modules; + + //记录多商户优惠券 + this.orderCreateData.coupon = data.coupon + + //查询优惠券 + this.getCouponList(); + + // 处理表单数据 + data = this.handleGoodsFormData(data); + + // 该方法在父级组件中 + this.promotionInfo = this.promotion(data); + + this.paymentData = data; + + this.$forceUpdate(); + this.calculate(); + } else { + this.$util.showToast({ + title: res.message + }); + + setTimeout(() => { + this.$util.redirectTo('/pages/index/index'); + }, 1000) + } + } + }) + }, + //查询优惠券 + getCouponList() { + //查询优惠券 + if (this.modules.indexOf('coupon') != -1) { + this.$api.sendRequest({ + url: '/api/ordercreate/getcouponlist', + data: this.orderCreateData, + success: res => { + if (res.code == 0 && res.data) { + let data = res.data; + this.coupon_list = data; + this.$forceUpdate(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }); + + // this.orderCreateData.coupon.coupon_id = 0; + } + + }, + /** + * 处理商品表单数据 + * @param {Object} data + */ + handleGoodsFormData(data) { + let goodsFormData = uni.getStorageSync('goodFormData'); + data.goods_list.forEach(item => { + if (item.goods_form) { + let formData = {}; + if (item.form_data) { + item.form_data.map(formIem => { + formData[formIem.id] = formIem; + }) + } else if (goodsFormData && goodsFormData.goods_id == item.goods_id) { + goodsFormData.form_data.map(formIem => { + formData[formIem.id] = formIem; + }) + } + if (Object.keys(formData).length) { + item.goods_form.json_data.forEach(formIem => { + if (formData[formIem.id]) { + formIem.val = formData[formIem.id].val; + } + }) + } + } + }); + return data; + }, + /** + * 订单创建 + */ + calculate() { + this.$api.sendRequest({ + url: this.api.calculate, + data: this.handleCreateData(), + success: res => { + if (this.$refs.loadingCover && this.$refs.loadingCover.isShow) this.$refs.loadingCover.hide(); + if (res.code == 0 && res.data) { + + // 处理表单数据 + this.calculateData = this.handleGoodsFormData(res.data); + + //多商户商品 + this.shop_goods_list = res.data.shop_goods_list + //--------- + this.calculateData.coupon_list = this.coupon_list; + if (res.data.delivery) { + if (res.data.delivery.delivery_type == 'express') this.memberAddress = res.data.delivery.member_address; + if (res.data.delivery.delivery_type == 'local') { + this.localMemberAddress = res.data.delivery.member_address; + } + } + // 次卡 + res.data.goods_list.forEach(item => { + if (item.member_card_list) { + if (this.orderCreateData.member_goods_card[item.sku_id]) { + let itemId = this.orderCreateData.member_goods_card[item.sku_id]; + if (!item.member_card_list[itemId]) delete this.orderCreateData.member_goods_card[item.sku_id]; + } + } else if (this.orderCreateData.member_goods_card[item.sku_id]) { + delete this.orderCreateData.member_goods_card[item.sku_id]; + } + }); + //多商户 + this.orderCreateData.coupon = res.data.coupon + // if (!res.data.coupon_id) this.orderCreateData.coupon.coupon_id = 0; + // else this.orderCreateData.coupon.coupon_id = res.data.coupon_id; + + this.$forceUpdate(); + } else { + this.$util.showToast({ + title: res.message + }); + } + } + }) + }, + /** + * 提交订单 + */ + create() { + if (!this.verify() || this.isRepeat) return; + this.isRepeat = true; + uni.showLoading({ + title: '' + }); + this.$api.sendRequest({ + url: this.api.create, + data: this.handleCreateData(), + success: res => { + uni.hideLoading(); + if (res.code == 0) { + this.outTradeNo = res.data; + uni.removeStorageSync('deliveryTime'); + uni.removeStorageSync('goodFormData'); + uni.setStorageSync('paySource', ''); + if (this.calculateData.pay_money == 0) { + // #ifdef MP + if (this.paymentData.is_virtual || this.orderCreateData.delivery.delivery_type == 'store') { + this.$util.subscribeMessage('ORDER_VERIFY_OUT_TIME,VERIFY_CODE_EXPIRE,VERIFY'); + } + // #endif + this.$util.redirectTo('/pages_tool/pay/result', { + code: res.data + }, 'redirectTo'); + } else { + this.openChoosePayment(); + } + // 更新购物车数量 + this.$store.dispatch('getCartNumber'); + } else { + this.$util.showToast({ + title: res.message + }); + this.isRepeat = false; + } + } + }) + }, + /** + * 处理订单计算、创建传参 + */ + handleCreateData() { + let data = this.$util.deepClone(this.orderCreateData); + // 订单表单 + if (this.$refs.form) { + data.form_data = { + form_id: this.paymentData.system_form.id, + form_data: this.$util.deepClone(this.$refs.form.formData) + }; + } + // 商品表单 + if (this.$refs.goodsForm) { + if (!data.form_data) data.form_data = {}; + data.form_data.goods_form = {}; + this.$refs.goodsForm.forEach(item => { + data.form_data.goods_form[item._props.customAttr.sku_id] = { + form_id: item._props.customAttr.form_id, + form_data: this.$util.deepClone(item.formData) + } + }) + } + Object.keys(data).forEach((key) => { + let item = data[key]; + if (typeof item == 'object') data[key] = JSON.stringify(item); + }) + + if (this.paymentData && this.orderCreateData.is_virtual == 0) { + if (data.member_address && this.orderCreateData.delivery && this.orderCreateData.delivery.delivery_type != 'store') { + delete data.member_address; + } + } + + return data; + }, + /** + * 打开支付弹窗 + */ + openChoosePayment() { + // #ifdef MP + if (this.paymentData.is_virtual) { + if(this.paymentData?.is_virtual_delivery == 1){ + this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY,ORDER_DELIVERY'); + }else{ + this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY'); + } + } else { + switch (this.orderCreateData.delivery.delivery_type) { + case 'express': //物流配送 + this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY,ORDER_DELIVERY'); + break; + case 'store': //门店自提 + this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY'); + break; + case 'local': //同城配送 + this.$util.subscribeMessage('ORDER_URGE_PAYMENT,ORDER_PAY,ORDER_DELIVERY'); + break; + } + } + // #endif + + this.$refs.choosePaymentPopup.getPayInfo(this.outTradeNo); + }, + verify() { + if (this.paymentData.is_virtual == 1) { + if (!this.orderCreateData.member_address.mobile) { + this.$util.showToast({ + title: '请输入预留手机' + }); + return false; + } + if (!this.$util.verifyMobile(this.orderCreateData.member_address.mobile)) { + this.$util.showToast({ + title: '请输入正确的手机号' + }); + return false; + } + } else { + if (!this.orderCreateData.delivery || !this.orderCreateData.delivery.delivery_type) { + this.$util.showToast({ + title: '商家未设置配送方式' + }); + return false; + } + if ( + (this.orderCreateData.delivery.delivery_type == 'express' && !this.memberAddress) || + (this.orderCreateData.delivery.delivery_type == 'local' && !this.localMemberAddress) + ) { + 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.orderCreateData.member_address.mobile) { + this.$util.showToast({ + title: '请输入预留手机' + }); + return false; + } + if (!this.$util.verifyMobile(this.orderCreateData.member_address.mobile)) { + this.$util.showToast({ + title: '请输入正确的手机号' + }); + return false; + } + if (!this.deliveryTime) { + 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.calculateGoodsData.config.local.is_use && this.calculateGoodsData.delivery.local.info.time_is_open == 1 && !this.deliveryTime) { + this.$util.showToast({ + title: '请选择送达时间' + }); + return false; + } + } + } + + if (this.$refs.goodsForm) { + let formVerify = true; + for (let i = 0; i < this.$refs.goodsForm.length; i++) { + let item = this.$refs.goodsForm[i]; + formVerify = item.verify(); + if (!formVerify) { + break; + } + } + if (!formVerify) return false; + } + if (this.paymentData.system_form) { + let formVerify = this.$refs.form.verify(); + if (!formVerify) return false; + } + return true; + }, + /** + * 选择收货地址 + */ + selectAddress() { + var params = { + back: this.$util.getCurrentRoute().path, + local: 0, + type: 1 + } + // 外卖配送需要定位地址 + if (this.orderCreateData.delivery.delivery_type == 'local') { + params.local = 1; + params.type = 2; + } + this.$util.redirectTo('/pages_tool/member/address', params); + }, + /** + * 选择配送方式 + * @param data + * @param calculate + * @param member_account + */ + selectDeliveryType(data, calculate = true, member_account = null) { + if (this.orderCreateData.delivery && this.orderCreateData.delivery.delivery_type == data.name) return; + + this.orderCreateData.delivery.buyer_ask_delivery_time = { + start_date: '', + end_date: '' + }; + this.deliveryTime = ''; + + let delivery = { + delivery_type: data.name, + delivery_type_name: data.title + }; + + // 如果是门店配送或者门店自提 + if (data.name == 'store' || data.name == 'local') { + if (data.store_list[0]) { + delivery.store_id = data.store_list[0].store_id; + } + this.storeId = delivery.store_id ? delivery.store_id : 0; + + if (!this.orderCreateData.member_address) { + if (this.paymentData) { + this.orderCreateData.member_address = { + name: this.paymentData.member_account.nickname, + mobile: this.paymentData.member_account.mobile + }; + } else if (member_account) { + this.orderCreateData.member_address = { + name: member_account.nickname, + mobile: member_account.mobile + }; + + } + } + } + + this.$set(this.orderCreateData, 'delivery', delivery); + uni.setStorageSync('delivery', delivery); + + // 配送方式不为门店配送时 + if (this.orderCreateData.delivery.delivery_type != 'express' && !this.location) this.$util.getLocation(); + if (calculate) this.payment(); + + if (data.name == 'store') this.storetime('no'); + if (data.name == 'local') this.localtime('no'); + }, + /** + * 图片错误 + * @param {Object} index + */ + imageError(index) { + this.paymentData.goods_list[index].sku_image = this.$util.getDefaultImage().goods; + this.calculateData.goods_list[index].sku_image = this.$util.getDefaultImage().goods; + this.$forceUpdate(); + }, + /** + * 选择门店 + * @param {Object} data + */ + selectPickupPoint(data) { + if (data.store_id != this.storeId) { + this.storeId = data.store_id; + this.orderCreateData.delivery.store_id = data.store_id; + this.payment(); + this.resetDeliveryTime(); + // 存储所选门店 + let delivery = uni.getStorageSync('delivery'); + delivery.store_id = data.store_id; + uni.setStorageSync('delivery', delivery) + } + this.$refs.deliveryPopup.close(); + }, + /** + * 重置提货时间 + */ + resetDeliveryTime() { + this.orderCreateData.delivery.buyer_ask_delivery_time = { + start_date: '', + end_date: '' + }; + this.deliveryTime = ''; + uni.removeStorageSync('deliveryTime'); + }, + /** + * 门店 + */ + storetime(type = '') { + if (this.storeInfo) { + let data = this.$util.deepClone(this.storeInfo); + data.delivery_time = typeof data.delivery_time == 'string' && data.delivery_time ? JSON.parse(data.delivery_time) : data.delivery_time; + if (!data.delivery_time || data.delivery_time.length == undefined && !data.delivery_time.length) { + 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(); + } + }, + /** + * 选择自提时间 + * @param {Object} data + */ + selectPickupTime(data) { + this.deliveryTime = data.data.month + '(' + data.data.time + ')'; + + this.orderCreateData.delivery.buyer_ask_delivery_time = { + start_date:data.data.start_date, + end_date:data.data.end_date + }; + + //将时间缓存,避免切换地址时重置 + uni.setStorageSync('deliveryTime', { + 'deliveryTime': this.deliveryTime, + 'buyer_ask_delivery_time': this.orderCreateData.delivery.buyer_ask_delivery_time, + 'delivery_type': this.orderCreateData.delivery.delivery_type + }); + + }, + storeImgError() { + this.storeInfo.store_image = this.$util.getDefaultImage().store; + }, + openPopup(ref) { + if (ref == 'deliveryPopup' && (!this.storeList || Object.keys(this.storeList).length <= 1)) return; + this.tempData = this.$util.deepClone(this.orderCreateData); + this.$refs[ref].open(); + }, + closePopup(ref) { + this.orderCreateData = this.$util.deepClone(this.tempData); + this.$refs[ref].close(); + this.tempData = null; + }, + //优惠券单独多商户 + /** + * 显示店铺优惠券信息 + * @param {Object} siteId + * @param {Object} couponData + */ + openSiteCoupon(merch_id) { + + this.tempData = this.$util.deepClone(this.orderCreateData); + this.merchCoupon.merch_id = merch_id; + this.selectCouponId = this.orderCreateData.coupon[merch_id].coupon_id; + // this.selectCouponMoney = this.orderCreateData.coupon[siteId].coupon_money; + + this.merchCoupon.data = this.coupon_list[merch_id]; + this.$refs.couponPopup.open(); + this.$forceUpdate(); + }, + /**商户选择券*/ + selectCoupon(data,merch_id) { + + // if (this.orderCreateData.coupon[merch_id].coupon_id == data.coupon_id){ + // this.orderCreateData.coupon[merch_id].coupon_id = 0 + // }else{ + // this.orderCreateData.coupon[merch_id].coupon_id = data.coupon_id + // }; + if (this.selectCouponId != data.coupon_id) { + this.selectCouponId = data.coupon_id; + } else { + this.selectCouponId = 0; + } + this.$forceUpdate(); + // this.orderCreateData.coupon[merch_id].coupon_id = data.coupon_id + console.log(this.selectCouponId) + }, + //确定使用优惠券 + useCpopon() { + console.log(this.merchCoupon.merch_id) + this.orderCreateData.coupon[this.merchCoupon.merch_id].coupon_id = this.selectCouponId; + console.log(this.orderCreateData.coupon) + this.$refs.couponPopup.close(); + this.calculate(); + }, + + //------------------- + /** + * 选择优惠券 + * @param {Object} data + */ + /*selectCoupon(data) { + if (this.orderCreateData.coupon.coupon_id == data.coupon_id) this.orderCreateData.coupon = { + coupon_id: 0 + }; + else this.orderCreateData.coupon = { + coupon_id: data.coupon_id + }; + },*/ + /** + * 使用优惠券 + */ + // useCpopon() { + // this.$refs.couponPopup.close(); + // this.calculate(); + // }, + /** + * 切换发票开关 + */ + changeIsInvoice() { + if (this.orderCreateData.is_invoice == 0) { + this.orderCreateData.is_invoice = 1; + if (!this.orderCreateData.invoice_type) this.orderCreateData.invoice_type = this.goodsData.invoice.invoice_type.split(',')[0]; + } else { + this.orderCreateData.is_invoice = 0; + } + }, + /** + * 切换发票类型 + * @param {Object} invoice_type + */ + changeInvoiceType(invoice_type) { + this.orderCreateData.invoice_type = invoice_type; + }, + /** + * 切换发票个人还是企业 + * @param {Object} invoice_title_type + */ + changeInvoiceTitleType(invoice_title_type) { + this.orderCreateData.invoice_title_type = invoice_title_type; + }, + /** + * 切换增值税专用发票开关 + */ + changeIsTaxInvoice() { + if (this.orderCreateData.is_tax_invoice == 0) this.orderCreateData.is_tax_invoice = 1; + else this.orderCreateData.is_tax_invoice = 0; + this.$forceUpdate(); + }, + /** + * 选择发票内容 + * @param {Object} invoice_content + */ + changeInvoiceContent(invoice_content) { + this.orderCreateData.invoice_content = invoice_content; + this.$forceUpdate(); + }, + /** + * 验证发票内容 + */ + invoiceVerify() { + if (!this.orderCreateData.invoice_title) { + this.$util.showToast({ + title: '请填写发票抬头' + }); + return false; + } + if (!this.orderCreateData.taxpayer_number && this.orderCreateData.invoice_title_type == 2) { + this.$util.showToast({ + title: '请填写纳税人识别号' + }); + return false; + } + if (this.orderCreateData.invoice_type == 1 && !this.orderCreateData.invoice_full_address && this.paymentData.is_virtual == 1) { + this.$util.showToast({ + title: '请填写发票邮寄地址' + }); + return false; + } + if (this.orderCreateData.invoice_type == 2 && !this.orderCreateData.invoice_email) { + this.$util.showToast({ + title: '请填写邮箱' + }); + return false; + } + if (this.orderCreateData.invoice_type == 2) { + var reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/; + if (!reg.test(this.orderCreateData.invoice_email)) { + this.$util.showToast({ + title: '请填写正确的邮箱' + }); + return false; + } + } + if (!this.orderCreateData.invoice_content) { + this.$util.showToast({ + title: '请选择发票内容' + }); + return false; + } + return true; + }, + /** + * 保存发票设置 + */ + saveInvoice() { + if (this.orderCreateData.is_invoice == 1 && !this.invoiceVerify()) return; + this.calculate(); + this.$refs.invoicePopup.close(); + }, + /** + * 保存留言 + */ + saveBuyerMessage() { + this.$refs.buyerMessagePopup.close(); + }, + /** + * 选择会员卡 + */ + selectMemberCard() { + this.orderCreateData.is_open_card = this.orderCreateData.is_open_card ? 0 : 1; + if (!this.orderCreateData.member_card_unit) this.orderCreateData.member_card_unit = this.cardChargeType[0].key; + this.payment(); + }, + /** + * 选择会员卡充值类型 + * @param {Object} key + */ + selectMembercardUnit(key) { + this.orderCreateData.member_card_unit = key; + this.calculate(); + }, + /** + * 使用积分抵扣 + */ + usePoint() { + this.orderCreateData.is_point = this.orderCreateData.is_point ? 0 : 1; + this.calculate(); + }, + /** + * 支付弹窗关闭 + */ + payClose() { + // 更新购物车数量 + this.$store.dispatch('getCartNumber'); + this.$util.redirectTo('/pages/order/detail', { + order_id: this.$refs.choosePaymentPopup.payInfo.order_id + }, 'redirectTo'); + }, + + /** + * 同城配送送达时间 + */ + localtime(type = '') { + if (this.calculateGoodsData && this.calculateGoodsData.config.local) { + let data = this.$util.deepClone(this.calculateGoodsData.delivery.local.info); + if (Object.keys(data).length) { + 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); + } + + } + }, + /** + * 剩余起送价 + */ + surplusStartMoney() { + let money = 0; + if (this.calculateData && this.calculateData.delivery && this.calculateData.delivery.delivery_type == 'local') { + let startDeliveryMoney = this.calculateGoodsData.delivery.start_money ?? 0; + money = parseFloat(startDeliveryMoney) - parseFloat(this.calculateData.goods_money); + money = money < 0 ? 0 : money; + } + return money; + }, + /** + * 交易协议 + */ + getTransactionAgreement() { + this.$api.sendRequest({ + url: '/api/order/transactionagreement', + success: res => { + if (res.data) { + this.transactionAgreement = res.data; + if (this.transactionAgreement.content) this.transactionAgreement.content = htmlParser(this.transactionAgreement.content); + } + } + }) + }, + editForm(index) { + this.tempFormData = { + index: index, + json_data: this.$util.deepClone(this.goodsData.goods_list[index].goods_form.json_data) + }; + this.$refs.editFormPopup.open(); + }, + saveForm() { + if (this.$refs.tempForm.verify()) { + this.$set(this.paymentData.goods_list[this.tempFormData.index].goods_form, 'json_data', this.$refs.tempForm.formData); + this.$refs.editFormPopup.close(); + } + }, + /** + * 切换次卡 + * @param {Object} index + */ + selectMemberGoodsCard(index) { + let sku_id = this.goodsData.goods_list[index].sku_id; + this.selectGoodsCard = { + skuId: sku_id, + itemId: this.orderCreateData.member_goods_card[sku_id] ? this.orderCreateData.member_goods_card[sku_id] : 0, + cardList: this.$util.deepClone(this.calculateGoodsData.goods_list[index].member_card_list), + click: (item_id) => { + this.selectGoodsCard.itemId = this.selectGoodsCard.itemId == item_id ? 0 : item_id; + } + } + this.$refs.memberGoodsCardPopup.open(); + }, + /** + * 选择次卡 + */ + saveMemberGoodsCard() { + this.orderCreateData.member_goods_card[this.selectGoodsCard.skuId] = this.selectGoodsCard.itemId || 0; + this.$refs.memberGoodsCardPopup.close(); + this.payment(); + }, + back() { + uni.navigateBack({ + delta: 1 + }); + }, + getStoreList() { + let storeList = null; + if (this.orderCreateData.delivery) { + if (this.orderCreateData.delivery.delivery_type == 'local' && this.localConfig) { + storeList = this.localConfig.store_list; + storeList = storeList.reduce((res, item) => { + return { + ...res, + [item.store_id]: item + }; + }, {}); + + } + if (this.orderCreateData.delivery.delivery_type == 'store' && this.storeConfig) { + storeList = this.storeConfig.store_list; + storeList = storeList.reduce((res, item) => { + return { + ...res, + [item.store_id]: item + }; + }, {}); + } + } + return storeList; + }, + getStore(mescroll) { + this.$api.sendRequest({ + url: '/api/store/getStorePage', + data: { + page_size: mescroll.size, + page: mescroll.num, + latitude: this.latitude ?? '', + longitude: this.longitude ?? '', + type: this.orderCreateData.delivery.delivery_type + }, + success: res => { + let newArr = []; + let msg = res.message; + if (res.code == 0 && res.data) { + newArr = res.data.list; + } + mescroll.endSuccess(newArr.length); + //设置列表数据 + + if (mescroll.num == 1) this.storeData = []; //如果是第一页需手动制空列表 + this.storeData = this.storeData.concat(newArr); //追加新数据 + }, + fail: res => { + mescroll.endErr(); + } + }); + } + }, + filters: { + // 金额格式化输出 + moneyFormat(money) { + return parseFloat(money).toFixed(2); + } + } } \ No newline at end of file diff --git a/components/payment/payment.vue b/components/payment/payment.vue index 4147770..b240d20 100644 --- a/components/payment/payment.vue +++ b/components/payment/payment.vue @@ -1,654 +1,724 @@ - - - - - - \ No newline at end of file diff --git a/manifest.json b/manifest.json index 35441a3..bec6eaf 100644 --- a/manifest.json +++ b/manifest.json @@ -54,8 +54,6 @@ } } }, - /* 快应用特有相关 */ - "quickapp" : {}, /* 小程序特有相关 */ "mp-weixin" : { "appid" : "wxa8f94045d9c2fc10", @@ -126,5 +124,12 @@ "uniStatistics" : { "version" : "2" }, - "sassImplementationName" : "node-sass" + "sassImplementationName" : "node-sass", + /** 快应用配置 **/ + "quickapp-webview" : { + "package" : "com.jieganfsj.fivegshop", + "minPlatformVersion" : 1070, + "versionName" : "1.0.0", + "versionCode" : 0 + } } diff --git a/node_modules/jweixin-module/README.md b/node_modules/jweixin-module/README.md index f4e08bd..7c91d7b 100644 --- a/node_modules/jweixin-module/README.md +++ b/node_modules/jweixin-module/README.md @@ -19,8 +19,8 @@ https://unpkg.com/jweixin-module/out/index.js ## 使用 ```js -var wx = require('jweixin-module') -wx.ready(function(){ +var jweixin = require('jweixin-module') +jweixin.ready(function(){ // TODO }); ``` diff --git a/node_modules/jweixin-module/out/index.js b/node_modules/jweixin-module/out/index.js deleted file mode 100644 index 807ab6a..0000000 --- a/node_modules/jweixin-module/out/index.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(e):"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)}(window,function(o,e){function c(n,e,i){o.WeixinJSBridge?WeixinJSBridge.invoke(n,r(e),function(e){a(n,e,i)}):d(n,i)}function i(n,i,t){o.WeixinJSBridge?WeixinJSBridge.on(n,function(e){t&&t.trigger&&t.trigger(e),a(n,e,i)}):d(n,t||i)}function r(e){return(e=e||{}).appId=M.appId,e.verifyAppId=M.appId,e.verifySignType="sha1",e.verifyTimestamp=M.timestamp+"",e.verifyNonceStr=M.nonceStr,e.verifySignature=M.signature,e}function n(e){return{timeStamp:e.timestamp+"",nonceStr:e.nonceStr,package:e.package,paySign:e.paySign,signType:e.signType||"SHA1"}}function a(e,n,i){"openEnterpriseChat"==e&&(n.errCode=n.err_code),delete n.err_code,delete n.err_desc,delete n.err_detail;var t=n.errMsg;t||(t=n.err_msg,delete n.err_msg,t=function(e,n){var i=e,t=f[i];t&&(i=t);var o="ok";if(n){var r=n.indexOf(":");"confirm"==(o=n.substring(r+1))&&(o="ok"),"failed"==o&&(o="fail"),-1!=o.indexOf("failed_")&&(o=o.substring(7)),-1!=o.indexOf("fail_")&&(o=o.substring(5)),"access denied"!=(o=(o=o.replace(/_/g," ")).toLowerCase())&&"no permission to execute"!=o||(o="permission denied"),"config"==i&&"function not exist"==o&&(o="ok"),""==o&&(o="fail")}return n=i+":"+o}(e,t),n.errMsg=t),(i=i||{})._complete&&(i._complete(n),delete i._complete),t=n.errMsg||"",M.debug&&!i.isInnerInvoke&&alert(JSON.stringify(n));var o=t.indexOf(":");switch(t.substring(o+1)){case"ok":i.success&&i.success(n);break;case"cancel":i.cancel&&i.cancel(n);break;default:i.fail&&i.fail(n)}i.complete&&i.complete(n)}function s(e){if(e){for(var n=0,i=e.length;n