You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1026 lines
27 KiB
1026 lines
27 KiB
7 months ago
|
<template>
|
||
|
<view :style="viewColor">
|
||
|
<view class='order-submission'>
|
||
|
<view class="allAddress" @click="onAddress">
|
||
|
<view class='address acea-row row-between-wrapper' v-if='shippingType == 0 '>
|
||
|
<view class='addressCon' v-if="addressInfo.real_name">
|
||
|
<view class='name'>{{addressInfo.real_name}}
|
||
|
<text class='phone'>{{addressInfo.phone}}</text>
|
||
|
</view>
|
||
|
<view>
|
||
|
<text class='default t-color'
|
||
|
v-if="addressInfo.is_default">[默认]</text>{{addressInfo.province}}{{addressInfo.city}}{{addressInfo.district}}{{addressInfo.street || ''}}{{addressInfo.detail}}
|
||
|
</view>
|
||
|
</view>
|
||
|
<navigator v-else :url="'/pages/users/user_address/index?cartId='+cartId" hover-class="none" class='addressCon'>
|
||
|
<view class='setaddress'>设置收货地址</view>
|
||
|
</navigator>
|
||
|
<view class='iconfont icon-jiantou'></view>
|
||
|
</view>
|
||
|
<view class='line'>
|
||
|
<image :src="`${domain}/static/images/line.jpg`"></image>
|
||
|
</view>
|
||
|
</view>
|
||
|
<!-- 商品信息 -->
|
||
|
<view class="storeinfo-wrapper">
|
||
|
<view class="store-item" v-for="(item,index) in cartInfo" :key="index">
|
||
|
<view v-for="(goods,j) in item.list" :key="j">
|
||
|
<view>
|
||
|
<view class="product-item">
|
||
|
<view class="img-box">
|
||
|
<image :src="goods.productAttr.image || goods.product.image"></image>
|
||
|
</view>
|
||
|
<view class="content">
|
||
|
<view class="acea-row row-between">
|
||
|
<view class="name line1">{{goods.product.store_name}}</view>
|
||
|
<text class="number">x{{goods.cart_num}}</text>
|
||
|
</view>
|
||
|
|
||
|
<view class="label">{{goods.productAttr.sku}}</view>
|
||
|
<view class="price acea-row row-between">
|
||
|
<view class="acea-row row-middle">
|
||
|
<block>
|
||
|
{{goods.productAttr.ot_price}}积分<block v-if="goods.productAttr.price>0">+{{goods.productAttr.price}}元</block>
|
||
|
</block>
|
||
|
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="err-txt" v-if="goods.undelivered && addressInfo.real_name">
|
||
|
<text class="iconfont icon-zhuyi-copy"></text>
|
||
|
<view class="txt">此商品不支持该区域配送</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class='wrapper'>
|
||
|
<view class='item acea-row row-between-wrapper'>
|
||
|
<view>可用积分</view>
|
||
|
<view class='discount'>{{resData.true_integral}}积分
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class='item acea-row row-between-wrapper'>
|
||
|
<view>兑换积分</view>
|
||
|
<view class='discount'>{{resData.order_total_integral}}积分
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class='item acea-row row-between-wrapper'>
|
||
|
<view>支付金额</view>
|
||
|
<view class='discount'>¥{{resData.order_pay_price || 0}}
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class='item acea-row row-between-wrapper'>
|
||
|
<view>快递费用</view>
|
||
|
<view class='discount'>免运费
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class='item' v-if="textareaStatus">
|
||
|
<view>备注信息</view>
|
||
|
<textarea placeholder-class='placeholder' placeholder="请添加备注(150字以内)"
|
||
|
@input='bindHideKeyboard' :value="mark" :maxlength="150" name="mark">
|
||
|
</textarea>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class='wrapper'>
|
||
|
<view class='item'>
|
||
|
<view>支付方式</view>
|
||
|
<view class='list'>
|
||
|
<!-- #ifdef H5 -->
|
||
|
<view class='payItem acea-row row-middle' :class='active==index ?"on":""' @tap='payItem(index)'
|
||
|
v-for="(item,index) in cartArr" :key='index' v-if="item.payStatus==1">
|
||
|
<view class='name acea-row row-center-wrapper'>
|
||
|
<view class='iconfont animated'
|
||
|
:class='(item.icon) + " " + (animated==true&&active==index ?"bounceIn":"")'></view>
|
||
|
{{item.name}}
|
||
|
</view>
|
||
|
<view class='tip'>
|
||
|
{{item.title}}
|
||
|
<block v-if="item.value == 'balance'">
|
||
|
{{userInfo.now_money}}
|
||
|
</block>
|
||
|
</view>
|
||
|
</view>
|
||
|
<!-- #endif -->
|
||
|
<!-- #ifdef MP || APP-PLUS -->
|
||
|
<view class='payItem acea-row row-middle' :class='active==index ?"on":""' @tap='payItem(index)'
|
||
|
v-for="(item,index) in cartArr" :key='index' v-if="item.payStatus==1">
|
||
|
<view class='name acea-row row-center-wrapper'>
|
||
|
<view class='iconfont animated'
|
||
|
:class='(item.icon) + " " + (animated==true&&active==index ?"bounceIn":"")'></view>
|
||
|
{{item.name}}
|
||
|
</view>
|
||
|
<view class='tip'>
|
||
|
{{item.title}}
|
||
|
<block v-if="item.value == 'balance'">
|
||
|
{{userInfo.now_money}}
|
||
|
</block>
|
||
|
</view>
|
||
|
</view>
|
||
|
<!-- #endif -->
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view style='height:120rpx;'></view>
|
||
|
<view class='footer acea-row row-between-wrapper'>
|
||
|
<view>支付:
|
||
|
<text class='color-t'>{{resData.order_total_integral || 0}}积分</text><text class="color-t" v-if="resData.order_pay_price>0">+{{resData.order_pay_price}}元</text>
|
||
|
</view>
|
||
|
<view class='settlement' style='z-index:100' @tap="goPay">立即兑换</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
<view class="alipaysubmit" v-html="formContent"></view>
|
||
|
<addressWindow ref="addressWindow" @changeTextareaStatus="changeTextareaStatus" :news='news' :address='address'
|
||
|
:pagesUrl="pagesUrl" @OnChangeAddress="OnChangeAddress" @changeClose="changeClose"></addressWindow>
|
||
|
</view>
|
||
|
</template>
|
||
|
<script>
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Author: CRMEB Team <admin@crmeb.com>
|
||
|
// +----------------------------------------------------------------------
|
||
|
import {
|
||
|
integralOrderConfirm,
|
||
|
integralOrderCreate,
|
||
|
} from '@/api/points_mall.js';
|
||
|
import {
|
||
|
getAddressDefault,
|
||
|
getAddressDetail,
|
||
|
getAddressList,
|
||
|
getUserInfo,
|
||
|
} from '@/api/user.js';
|
||
|
import {
|
||
|
storeListApi
|
||
|
} from '@/api/store.js';
|
||
|
import {
|
||
|
CACHE_LONGITUDE,
|
||
|
CACHE_LATITUDE
|
||
|
} from '@/config/cache.js';
|
||
|
import { openPaySubscribe } from '@/utils/SubscribeMessage.js';
|
||
|
import addressWindow from '@/components/addressWindow';
|
||
|
import { HTTP_REQUEST_URL } from '@/config/app';
|
||
|
import { toLogin } from '@/libs/login.js';
|
||
|
import { mapGetters } from "vuex";
|
||
|
export default {
|
||
|
components: {
|
||
|
addressWindow,
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
confirm:[],
|
||
|
textareaStatus: true,
|
||
|
//支付方式
|
||
|
cartArr: [{
|
||
|
"name": "微信支付",
|
||
|
"icon": "icon-weixin2",
|
||
|
value: 'weixin',
|
||
|
title: '微信快捷支付',
|
||
|
payStatus: 1,
|
||
|
},
|
||
|
{
|
||
|
name: "支付宝支付",
|
||
|
icon: "icon-icon34",
|
||
|
// #ifdef H5 || APP-PLUS
|
||
|
value: 'alipay',
|
||
|
// #endif
|
||
|
// #ifdef MP
|
||
|
value: 'alipayQr',
|
||
|
// #endif
|
||
|
title: '支付宝支付',
|
||
|
payStatus: this.$store.getters.globalData.alipay_open
|
||
|
},
|
||
|
{
|
||
|
"name": "余额支付",
|
||
|
"icon": "icon-icon-test",
|
||
|
value: 'balance',
|
||
|
title: '可用余额:',
|
||
|
payStatus: this.$store.getters.globalData.yue_pay_status,
|
||
|
}
|
||
|
],
|
||
|
formContent: '',
|
||
|
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
|
||
|
BargainId: 0,
|
||
|
combinationId: 0,
|
||
|
seckillId: 0,
|
||
|
userInfo: {}, //用户信息
|
||
|
mark: '', //备注信息
|
||
|
couponTitle: '请选择', //优惠券
|
||
|
coupon_price: 0, //优惠券抵扣金额
|
||
|
useIntegral: false, //是否使用积分
|
||
|
integral_price: 0, //积分抵扣金额
|
||
|
integral: 0,
|
||
|
ChangePrice: 0, //使用积分抵扣变动后的金额
|
||
|
formIds: [], //收集formid
|
||
|
status: 0,
|
||
|
is_address: false,
|
||
|
toPay: false, //修复进入支付时页面隐藏从新刷新页面
|
||
|
shippingType: 0,
|
||
|
system_store: {},
|
||
|
storePostage: 0,
|
||
|
contacts: '',
|
||
|
contactsTel: '',
|
||
|
mydata: {},
|
||
|
storeList: [],
|
||
|
store_self_mention: 0,
|
||
|
cartInfo: {},
|
||
|
priceGroup: {},
|
||
|
animated: false,
|
||
|
totalPrice: 0,
|
||
|
integralRatio: "0",
|
||
|
pagesUrl: "",
|
||
|
offlinePostage: "",
|
||
|
from: '',
|
||
|
news: 1,
|
||
|
order_key: "",
|
||
|
order_type: 20,
|
||
|
invTitle: '不开发票',
|
||
|
special_invoice: false,
|
||
|
invoice_func: false,
|
||
|
header_type: '',
|
||
|
invShow: false,
|
||
|
invList: [],
|
||
|
invChecked: '',
|
||
|
urlQuery: '',
|
||
|
pay_close: false,
|
||
|
resData: {},
|
||
|
product_type:1,
|
||
|
newImg: [],
|
||
|
domain: HTTP_REQUEST_URL,
|
||
|
};
|
||
|
},
|
||
|
computed: mapGetters(['isLogin','viewColor','keyColor']),
|
||
|
onLoad: function(options) {
|
||
|
// #ifdef H5
|
||
|
this.from = this.$wechat.isWeixin() ? 'weixin' : 'h5'
|
||
|
// #endif
|
||
|
// #ifdef MP
|
||
|
this.from = 'routine'
|
||
|
// #endif
|
||
|
// #ifdef APP-PLUS
|
||
|
this.from = 'weixin'
|
||
|
// #endif
|
||
|
if (this.payType == 'weixin') {
|
||
|
this.payType = this.from
|
||
|
}
|
||
|
if (!options.cartId) return this.$util.Tips({
|
||
|
title: '请选择要购买的商品'
|
||
|
}, {
|
||
|
tab: 3,
|
||
|
url: 1
|
||
|
});
|
||
|
this.addressId = options.addressId || 0;
|
||
|
this.cartId = options.cartId;
|
||
|
this.is_address = options.is_address ? true : false;
|
||
|
this.invChecked = options.invoice_id || '';
|
||
|
// #ifndef APP-PLUS
|
||
|
this.textareaStatus = true;
|
||
|
// #endif
|
||
|
if (this.isLogin && this.toPay == false) {
|
||
|
this.getFun();
|
||
|
} else {
|
||
|
toLogin();
|
||
|
}
|
||
|
},
|
||
|
/**
|
||
|
* 生命周期函数--监听页面显示
|
||
|
*/
|
||
|
onShow: function() {
|
||
|
uni.removeStorageSync('form_type_cart');
|
||
|
let _this = this
|
||
|
uni.$on("handClick", res => {
|
||
|
if (res) {
|
||
|
_this.system_store = res.address
|
||
|
}
|
||
|
// 清除监听
|
||
|
uni.$off('handClick');
|
||
|
})
|
||
|
},
|
||
|
methods: {
|
||
|
getFun(){
|
||
|
this.getaddressInfo();
|
||
|
this.$nextTick(function() {
|
||
|
this.getUserInfo();
|
||
|
this.$refs.addressWindow.getAddressList();
|
||
|
})
|
||
|
},
|
||
|
// 获取个人信息
|
||
|
getUserInfo() {
|
||
|
getUserInfo().then(res => {
|
||
|
this.userInfo = res.data
|
||
|
})
|
||
|
},
|
||
|
payClose: function() {
|
||
|
this.pay_close = false;
|
||
|
},
|
||
|
payItem: function(e) {
|
||
|
let that = this;
|
||
|
let active = e;
|
||
|
that.active = active;
|
||
|
that.animated = true;
|
||
|
that.payType = that.cartArr[active].value;
|
||
|
if (that.payType == 'weixin') {
|
||
|
that.payType = that.from
|
||
|
}
|
||
|
},
|
||
|
goPay() {
|
||
|
let that = this,
|
||
|
data = {};
|
||
|
if (!that.addressId) {
|
||
|
return that.$util.Tips({
|
||
|
title: '请选择收货地址'
|
||
|
});
|
||
|
}
|
||
|
if (parseFloat(that.resData.true_integral) < parseFloat(that.resData.order_total_integral))
|
||
|
return that.$util.Tips({
|
||
|
title: '积分不足!'
|
||
|
});
|
||
|
|
||
|
data = {
|
||
|
cart_id: this.cartId.split(","),
|
||
|
address_id: this.addressId,
|
||
|
pay_type: this.payType,
|
||
|
mark: this.mark,
|
||
|
order_type: this.order_type,
|
||
|
key: this.order_key,
|
||
|
// #ifdef H5
|
||
|
return_url: 'http://' + window.location.host + '/pages/points_mall/exchange_record',
|
||
|
// #endif
|
||
|
};
|
||
|
if (data.mark && this.isEmojiCharacter(data.mark[Object.keys(data.mark)[0]])) {
|
||
|
that.$util.Tips({
|
||
|
title: '备注不允许输入表情!'
|
||
|
});
|
||
|
return;
|
||
|
}
|
||
|
if (data.payType == 'balance' && parseFloat(that.userInfo.now_money) < parseFloat(that.totalPrice))
|
||
|
return that.$util
|
||
|
.Tips({
|
||
|
title: '余额不足!'
|
||
|
});
|
||
|
uni.showLoading({
|
||
|
title: '订单支付中',
|
||
|
mask: true
|
||
|
});
|
||
|
// #ifdef MP
|
||
|
openPaySubscribe().then(() => {
|
||
|
that.payment(data);
|
||
|
});
|
||
|
// #endif
|
||
|
// #ifndef MP
|
||
|
that.payment(data);
|
||
|
// #endif
|
||
|
},
|
||
|
payment: function(data) {
|
||
|
let that = this;
|
||
|
integralOrderCreate(data).then(res => {
|
||
|
let status = res.data.status,
|
||
|
orderId = res.data.result.order_id,
|
||
|
callback_key = res.data.result.pay_key,
|
||
|
jsConfig = res.data.result.config,
|
||
|
goPages = '/pages/order_pay_status/index?order_type=20&order_id=' + orderId + '&msg=' + res.message;
|
||
|
that.orderPay = true;
|
||
|
uni.hideLoading();
|
||
|
switch (status) {
|
||
|
case 'ORDER_EXIST':
|
||
|
case 'EXTEND_ORDER':
|
||
|
case 'PAY_ERROR':
|
||
|
case 'error':
|
||
|
return that.$util.Tips({
|
||
|
title: res.message
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: goPages
|
||
|
});
|
||
|
break;
|
||
|
case 'success':
|
||
|
return that.$util.Tips({
|
||
|
title: res.message,
|
||
|
icon: 'success'
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: goPages
|
||
|
});
|
||
|
break;
|
||
|
case 'alipay':
|
||
|
case "alipayQr":
|
||
|
uni.navigateTo({
|
||
|
url: '/pages/order_pay_back/index?keyCode=' + callback_key + '&url=' +
|
||
|
jsConfig
|
||
|
})
|
||
|
return;
|
||
|
break;
|
||
|
// #ifndef MP
|
||
|
case "wechat":
|
||
|
case "weixin":
|
||
|
case "weixinApp":
|
||
|
// #ifndef APP-PLUS
|
||
|
this.$wechat.pay(jsConfig).then(res => {
|
||
|
return that.$util.Tips({
|
||
|
title: res.message,
|
||
|
icon: 'success'
|
||
|
}, {
|
||
|
tab: 4,
|
||
|
url: goPages
|
||
|
});
|
||
|
}).catch(res => {
|
||
|
if (res.errMsg == 'chooseWXPay:cancel') return that.$util.Tips({
|
||
|
title: '取消支付'
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: goPages
|
||
|
});
|
||
|
})
|
||
|
// #endif
|
||
|
// #ifdef APP-PLUS
|
||
|
let mp_pay_name=''
|
||
|
if(uni.requestOrderPayment){
|
||
|
mp_pay_name='requestOrderPayment'
|
||
|
}else{
|
||
|
mp_pay_name='requestPayment'
|
||
|
}
|
||
|
uni[mp_pay_name]({
|
||
|
provider: 'wxpay',
|
||
|
orderInfo: jsConfig,
|
||
|
success: (e) => {
|
||
|
let url = '/pages/order_pay_status/index?order_type=20&order_id=' + orderId +
|
||
|
'&msg=支付成功';
|
||
|
return that.$util.Tips({
|
||
|
title: '支付成功',
|
||
|
icon: 'success'
|
||
|
}, {
|
||
|
tab: 4,
|
||
|
url: url
|
||
|
});
|
||
|
},
|
||
|
fail: (e) => {
|
||
|
let url = '/pages/order_pay_status/index?order_type=20&order_id=' + orderId + '&msg=取消支付';
|
||
|
return that.$util.Tips({
|
||
|
title: '取消支付',
|
||
|
}, {
|
||
|
tab: 4,
|
||
|
url: url
|
||
|
});
|
||
|
},
|
||
|
complete: () => {
|
||
|
let url = '/pages/order_pay_status/index?order_type=20&order_id=' + orderId + '&msg=取消支付';
|
||
|
return that.$util.Tips({
|
||
|
title: '取消支付',
|
||
|
}, {
|
||
|
tab: 4,
|
||
|
url: url
|
||
|
});
|
||
|
},
|
||
|
});
|
||
|
// #endif
|
||
|
break;
|
||
|
// #endif
|
||
|
// #ifdef MP
|
||
|
case "routine":
|
||
|
jsConfig.timeStamp = jsConfig.timestamp;
|
||
|
that.toPay = true;
|
||
|
let mp_pay_name=''
|
||
|
if(uni.requestOrderPayment){
|
||
|
mp_pay_name='requestOrderPayment'
|
||
|
}else{
|
||
|
mp_pay_name='requestPayment'
|
||
|
}
|
||
|
uni[mp_pay_name]({
|
||
|
...jsConfig,
|
||
|
success: function(res) {
|
||
|
uni.hideLoading();
|
||
|
return that.$util.Tips({
|
||
|
title: '支付成功',
|
||
|
icon: 'success'
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: goPages
|
||
|
});
|
||
|
},
|
||
|
fail: function(e) {
|
||
|
let pages = '/pages/order_pay_status/index?order_type=20&order_id=' +
|
||
|
orderId + '&msg=取消支付'
|
||
|
return that.$util.Tips({
|
||
|
title: '取消支付'
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: pages + '&status=0'
|
||
|
});
|
||
|
},
|
||
|
})
|
||
|
break;
|
||
|
// #endif
|
||
|
case "balance":
|
||
|
//余额
|
||
|
return that.$util.Tips({
|
||
|
title: res.msg
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: goPages + '&status=1'
|
||
|
});
|
||
|
break;
|
||
|
// #ifdef H5
|
||
|
case 'h5':
|
||
|
let host = window.location.protocol + "//" + window.location.host;
|
||
|
let url = `${host}/pages/order_pay_status/index?order_type=20&order_id=${orderId}&msg=${res.message}`
|
||
|
let eUrl = encodeURIComponent(url)
|
||
|
let jsurl = jsConfig.mweb_url || jsConfig.h5_url
|
||
|
let locations = `${jsurl}&redirect_url=${eUrl}`
|
||
|
setTimeout(() => {
|
||
|
location.href = locations;
|
||
|
}, 100);
|
||
|
break;
|
||
|
// #endif
|
||
|
// #ifdef APP-PLUS
|
||
|
case 'alipayApp':
|
||
|
uni.requestPayment({
|
||
|
provider: 'alipay',
|
||
|
orderInfo: jsConfig,
|
||
|
success: (e) => {
|
||
|
return that.$util.Tips({
|
||
|
title: '支付成功',
|
||
|
icon: 'success'
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: goPages
|
||
|
});
|
||
|
},
|
||
|
fail: (e) => {
|
||
|
let pages = '/pages/order_pay_status/index?order_type=20&order_id=' +
|
||
|
orderId + '&msg=支付失败'
|
||
|
return that.$util.Tips({
|
||
|
title: '支付失败'
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: pages
|
||
|
});
|
||
|
},
|
||
|
complete: () => {
|
||
|
uni.hideLoading();
|
||
|
let pages = '/pages/order_pay_status/index?order_type=20&order_id=' +
|
||
|
orderId + '&msg=取消支付'
|
||
|
return that.$util.Tips({
|
||
|
title: '取消支付'
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: pages
|
||
|
});
|
||
|
},
|
||
|
});
|
||
|
break;
|
||
|
// #endif
|
||
|
default:
|
||
|
let pages = '/pages/order_pay_status/index?order_type=20&order_id=' +
|
||
|
orderId + '&msg=取消支付'
|
||
|
return that.$util.Tips({
|
||
|
title: '取消支付'
|
||
|
}, {
|
||
|
tab: 5,
|
||
|
url: pages + '&status=0'
|
||
|
});
|
||
|
}
|
||
|
}).catch(err => {
|
||
|
uni.hideLoading();
|
||
|
return that.$util.Tips({
|
||
|
title: err
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
isEmojiCharacter: function(substring) {
|
||
|
if (substring) {
|
||
|
for (var i = 0; i < substring.length; i++) {
|
||
|
var hs = substring.charCodeAt(i);
|
||
|
if (0xd800 <= hs && hs <= 0xdbff) {
|
||
|
if (substring.length > 1) {
|
||
|
var ls = substring.charCodeAt(i + 1);
|
||
|
var uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
|
||
|
if (0x1d000 <= uc && uc <= 0x1f77f) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
} else if (substring.length > 1) {
|
||
|
var ls = substring.charCodeAt(i + 1);
|
||
|
if (ls == 0x20e3) {
|
||
|
return true;
|
||
|
}
|
||
|
} else {
|
||
|
if (0x2100 <= hs && hs <= 0x27ff) {
|
||
|
return true;
|
||
|
} else if (0x2B05 <= hs && hs <= 0x2b07) {
|
||
|
return true;
|
||
|
} else if (0x2934 <= hs && hs <= 0x2935) {
|
||
|
return true;
|
||
|
} else if (0x3297 <= hs && hs <= 0x3299) {
|
||
|
return true;
|
||
|
} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 ||
|
||
|
hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b ||
|
||
|
hs == 0x2b50) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
// 关闭地址弹窗;
|
||
|
changeClose: function() {
|
||
|
this.$set(this.address, 'address', false);
|
||
|
},
|
||
|
|
||
|
ChangCouponsClose: function() {
|
||
|
|
||
|
},
|
||
|
changeTextareaStatus: function() {
|
||
|
|
||
|
},
|
||
|
/**
|
||
|
* 选择地址后改变事件
|
||
|
* @param object e
|
||
|
*/
|
||
|
OnChangeAddress: function(e) {
|
||
|
this.textareaStatus = true;
|
||
|
this.addressId = e;
|
||
|
this.address.address = false;
|
||
|
this.getaddressInfo();
|
||
|
},
|
||
|
bindHideKeyboard: function(e) {
|
||
|
this.mark = e.detail.value;
|
||
|
},
|
||
|
/**
|
||
|
* 获取当前订单详细信息
|
||
|
*
|
||
|
*/
|
||
|
getConfirm: function() {
|
||
|
let that = this;
|
||
|
console.log(this.addressId)
|
||
|
integralOrderConfirm({
|
||
|
cart_id: this.cartId.split(","),
|
||
|
address_id: this.addressId
|
||
|
}).then(res => {
|
||
|
that.$set(that, 'resData', res.data);
|
||
|
that.$set(that, 'cartInfo', res.data.order);
|
||
|
that.$set(that, 'order_key', res.data.key);
|
||
|
that.$set(that, 'order_type', res.data.order_type);
|
||
|
}).catch(err => {
|
||
|
return this.$util.Tips({
|
||
|
title: err
|
||
|
}, {
|
||
|
tab: 3,
|
||
|
url: 1
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
bindDateChange: function(e, index) {
|
||
|
this.confirm[index].value = e.target.value
|
||
|
},
|
||
|
bindTimeChange: function(e, index) {
|
||
|
this.confirm[index].value = e.target.value
|
||
|
},
|
||
|
/*
|
||
|
* 获取默认收货地址或者获取某条地址信息
|
||
|
*/
|
||
|
getaddressInfo: function() {
|
||
|
let that = this;
|
||
|
if (that.addressId) {
|
||
|
getAddressDetail(that.addressId).then(res => {
|
||
|
res.data.is_default = parseInt(res.data.is_default);
|
||
|
that.addressInfo = res.data || {};
|
||
|
that.addressId = res.data.address_id || 0;
|
||
|
that.address.addressId = res.data.address_id || 0;
|
||
|
that.getConfirm();
|
||
|
})
|
||
|
} else {
|
||
|
getAddressList().then(res => {
|
||
|
that.addressInfo = res.data.list.length > 0 ? res.data.list[0] : {};
|
||
|
that.addressId = res.data.list.length > 0 ? res.data.list[0].address_id : 0;
|
||
|
that.address.addressId = res.data.list.length > 0 ? res.data.list[0].address_id : 0;
|
||
|
that.getConfirm();
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
onAddress: function() {
|
||
|
let that = this;
|
||
|
if(that.addressInfo.real_name){
|
||
|
that.textareaStatus = false;
|
||
|
that.address.address = true;
|
||
|
that.pagesUrl = '/pages/users/user_address/index?cartId=' + this.cartId+'&product_type=20';
|
||
|
}else{
|
||
|
uni.navigateTo({
|
||
|
url: `/pages/users/user_address/index?cartId=${this.cartId}&product_type=20`,
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
clickTextArea() {
|
||
|
this.$nextTick(() => {
|
||
|
this.$refs.getFocus.focus()
|
||
|
})
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
/deep/uni-checkbox[disabled] .uni-checkbox-input {
|
||
|
background-color: #eee;
|
||
|
}
|
||
|
.alipaysubmit {
|
||
|
display: none;
|
||
|
}
|
||
|
.order-submission .line image {
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
display: block;
|
||
|
}
|
||
|
.order-submission .address {
|
||
|
padding: 28rpx 30rpx;
|
||
|
background-color: #fff;
|
||
|
box-sizing: border-box;
|
||
|
}
|
||
|
.order-submission .address .addressCon {
|
||
|
width: 610rpx;
|
||
|
font-size: 26rpx;
|
||
|
color: #666;
|
||
|
}
|
||
|
.order-submission .address .addressCon .name {
|
||
|
font-size: 30rpx;
|
||
|
color: #282828;
|
||
|
font-weight: bold;
|
||
|
margin-bottom: 10rpx;
|
||
|
}
|
||
|
.order-submission .address .addressCon .name .phone {
|
||
|
margin-left: 50rpx;
|
||
|
}
|
||
|
.order-submission .address .addressCon .default {
|
||
|
margin-right: 12rpx;
|
||
|
}
|
||
|
.order-submission .address .addressCon .setaddress {
|
||
|
color: #333;
|
||
|
font-size: 28rpx;
|
||
|
}
|
||
|
.order-submission .address .iconfont {
|
||
|
font-size: 35rpx;
|
||
|
color: #707070;
|
||
|
}
|
||
|
.order-submission .allAddress {
|
||
|
width: 100%;
|
||
|
}
|
||
|
.order-submission .allAddress .nav {
|
||
|
width: 710rpx;
|
||
|
margin: 0 auto;
|
||
|
}
|
||
|
.order-submission .allAddress .nav .item {
|
||
|
width: 355rpx;
|
||
|
position: relative;
|
||
|
}
|
||
|
.order-submission .allAddress .nav .item.on {
|
||
|
position: relative;
|
||
|
width: 250rpx;
|
||
|
}
|
||
|
.order-submission .allAddress .address {
|
||
|
height: 150rpx;
|
||
|
margin: 0 auto;
|
||
|
}
|
||
|
.order-submission .allAddress .line {
|
||
|
margin: 0 auto;
|
||
|
position: absolute;
|
||
|
left: 0;
|
||
|
top: 0;
|
||
|
width: 100%;
|
||
|
height: 3rpx;
|
||
|
}
|
||
|
.order-submission .wrapper .item .list .payItem {
|
||
|
border: 1px solid #eee;
|
||
|
border-radius: 6rpx;
|
||
|
height: 86rpx;
|
||
|
width: 100%;
|
||
|
box-sizing: border-box;
|
||
|
margin-top: 20rpx;
|
||
|
font-size: 28rpx;
|
||
|
color: #282828;
|
||
|
}
|
||
|
.order-submission .wrapper .item .list .payItem.on {
|
||
|
border-color: var(--view-theme);
|
||
|
color: var(--view-theme);
|
||
|
}
|
||
|
.order-submission .wrapper .item .list .payItem .name {
|
||
|
width: 50%;
|
||
|
text-align: center;
|
||
|
border-right: 1px solid #eee;
|
||
|
justify-content: left;
|
||
|
padding-left: 80rpx;
|
||
|
}
|
||
|
.order-submission .wrapper .item .list .payItem .name .iconfont {
|
||
|
width: 44rpx;
|
||
|
height: 44rpx;
|
||
|
border-radius: 50%;
|
||
|
text-align: center;
|
||
|
line-height: 44rpx;
|
||
|
background-color: #fe960f;
|
||
|
color: #fff;
|
||
|
font-size: 30rpx;
|
||
|
margin-right: 15rpx;
|
||
|
}
|
||
|
.order-submission .wrapper .item .list .payItem .name .iconfont.icon-weixin2 {
|
||
|
background-color: #41b035;
|
||
|
}
|
||
|
.order-submission .wrapper .item .list .payItem .name .iconfont.icon-icon34 {
|
||
|
background-color: #4295D5;
|
||
|
}
|
||
|
.order-submission .wrapper .item .list .payItem .tip {
|
||
|
width: 49%;
|
||
|
text-align: center;
|
||
|
font-size: 26rpx;
|
||
|
color: #aaa;
|
||
|
}
|
||
|
.storeinfo-wrapper {
|
||
|
.store-item {
|
||
|
margin-top: 12rpx;
|
||
|
background-color: #fff;
|
||
|
.product-item {
|
||
|
display: flex;
|
||
|
padding: 25rpx 30rpx;
|
||
|
border-top: 1px solid #F0F0F0;
|
||
|
.img-box {
|
||
|
width: 130rpx;
|
||
|
height: 130rpx;
|
||
|
image {
|
||
|
width: 130rpx;
|
||
|
height: 130rpx;
|
||
|
border-radius: 16rpx;
|
||
|
}
|
||
|
}
|
||
|
.content {
|
||
|
position: relative;
|
||
|
width: 550rpx;
|
||
|
margin-left: 30rpx;
|
||
|
font-size: 28rpx;
|
||
|
color: #282828;
|
||
|
overflow: hidden;
|
||
|
.number{
|
||
|
display: block;
|
||
|
text-align: right;
|
||
|
color: #999;
|
||
|
font-size: 26rpx;
|
||
|
}
|
||
|
.label {
|
||
|
margin-top: 10rpx;
|
||
|
color: #999999;
|
||
|
font-size: 20rpx;
|
||
|
}
|
||
|
.price {
|
||
|
margin-top: 20rpx;
|
||
|
color: var(--view-priceColor);
|
||
|
position: relative;
|
||
|
text {
|
||
|
margin-left: 10rpx;
|
||
|
color: #999;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
.err-txt {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
margin-top: 18rpx;
|
||
|
color: $theme-color;
|
||
|
.iconfont {
|
||
|
margin-right: 10rpx;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
.order-submission .wrapper {
|
||
|
background-color: #fff;
|
||
|
margin-top: 13rpx;
|
||
|
}
|
||
|
.order-submission .wrapper .item .name{
|
||
|
position: relative;
|
||
|
}
|
||
|
.order-submission .wrapper .item .asterisk{
|
||
|
position: absolute;
|
||
|
color:red;
|
||
|
left:-15rpx
|
||
|
}
|
||
|
.order-submission .wrapper .item {
|
||
|
padding: 27rpx 30rpx;
|
||
|
font-size: 30rpx;
|
||
|
color: #282828;
|
||
|
border-bottom: 1px solid #f0f0f0;
|
||
|
}
|
||
|
.order-submission .wrapper .item .discount {
|
||
|
font-size: 30rpx;
|
||
|
color: #999;
|
||
|
}
|
||
|
.order-submission .wrapper .item .discount input {
|
||
|
text-align: end;
|
||
|
}
|
||
|
.order-submission .wrapper .item .discount .iconfont {
|
||
|
color: #515151;
|
||
|
font-size: 30rpx;
|
||
|
margin-left: 15rpx;
|
||
|
}
|
||
|
|
||
|
.order-submission .wrapper .item .discount .num {
|
||
|
font-size: 32rpx;
|
||
|
margin-right: 20rpx;
|
||
|
}
|
||
|
|
||
|
.order-submission .wrapper .item .shipping {
|
||
|
font-size: 30rpx;
|
||
|
color: #999;
|
||
|
position: relative;
|
||
|
padding-right: 58rpx;
|
||
|
}
|
||
|
.order-submission .wrapper .item .shipping .iconfont {
|
||
|
font-size: 35rpx;
|
||
|
color: #707070;
|
||
|
position: absolute;
|
||
|
right: 0;
|
||
|
top: 50%;
|
||
|
transform: translateY(-50%);
|
||
|
margin-left: 30rpx;
|
||
|
}
|
||
|
.order-submission .wrapper .item textarea {
|
||
|
background-color: #f9f9f9;
|
||
|
width: 690rpx;
|
||
|
height: 140rpx;
|
||
|
border-radius: 3rpx;
|
||
|
margin-top: 30rpx;
|
||
|
padding: 25rpx 28rpx;
|
||
|
box-sizing: border-box;
|
||
|
}
|
||
|
.order-submission .wrapper .item .placeholder {
|
||
|
color: #ccc;
|
||
|
}
|
||
|
.order-submission .wrapper .item .list {
|
||
|
margin-top: 35rpx;
|
||
|
}
|
||
|
.order-submission .moneyList {
|
||
|
margin-top: 12rpx;
|
||
|
background-color: #fff;
|
||
|
padding: 30rpx;
|
||
|
}
|
||
|
.order-submission .moneyList .item {
|
||
|
font-size: 28rpx;
|
||
|
color: #282828;
|
||
|
}
|
||
|
.order-submission .moneyList .item~.item {
|
||
|
margin-top: 20rpx;
|
||
|
}
|
||
|
.order-submission .moneyList .item .money {
|
||
|
color: #868686;
|
||
|
}
|
||
|
.order-submission .footer {
|
||
|
width: 100%;
|
||
|
height: 100rpx;
|
||
|
background-color: #fff;
|
||
|
padding: 0 30rpx;
|
||
|
font-size: 28rpx;
|
||
|
color: #333;
|
||
|
box-sizing: border-box;
|
||
|
position: fixed;
|
||
|
bottom: 0;
|
||
|
left: 0;
|
||
|
}
|
||
|
.order-submission .footer .color-t{
|
||
|
color: var(--view-theme);
|
||
|
}
|
||
|
.order-submission .footer .settlement {
|
||
|
font-size: 30rpx;
|
||
|
color: #fff;
|
||
|
width: 240rpx;
|
||
|
height: 70rpx;
|
||
|
background-color: var(--view-theme);
|
||
|
border-radius: 50rpx;
|
||
|
text-align: center;
|
||
|
line-height: 70rpx;
|
||
|
}
|
||
|
.footer .transparent {
|
||
|
opacity: 0
|
||
|
}
|
||
|
.pictrue image {
|
||
|
width: 130rpx;
|
||
|
height: 130rpx;
|
||
|
}
|
||
|
</style>
|