692 lines
17 KiB
Vue
692 lines
17 KiB
Vue
<template>
|
||
<view class="content" :style="[theme]">
|
||
<view class="onecontent">
|
||
<view class="onecontentone flex-start">
|
||
<view class="onecontent_one">
|
||
商品信息
|
||
</view>
|
||
</view>
|
||
<view class="onecontenttow flex-start">
|
||
<view class="onecontenttowitem flex-between" v-for="(item,index) in elist.goods" :key="index">
|
||
<view class="onecontenttowitem_one flex-start">
|
||
<image class="onecontenttowitemimage" :src="item.img" mode="aspectFill"></image>
|
||
<view class="onecontenttowitem_onebox flex-colum-start">
|
||
<view class="onecontenttowitem_onebox_one">
|
||
{{item.title || '无'}}
|
||
</view>
|
||
<view class="onecontenttowitem_onebox_tow">
|
||
{{item.spec || '无'}}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="onecontenttowitem_tow flex-colum-end">
|
||
<view class="onecontenttowitem_towstext_one">
|
||
{{item.price || '无'}}
|
||
</view>
|
||
<view class="onecontenttowitem_towstetx_tow">
|
||
×{{item.number || '无'}}
|
||
</view>
|
||
</view>
|
||
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="onecontent" style="margin-top: 32rpx;">
|
||
<view class="onecontentone flex-between">
|
||
<view class="onecontent_one">
|
||
确认地址
|
||
</view>
|
||
<u-icon name="arrow-right" color="#000" size="14"></u-icon>
|
||
</view>
|
||
<view class="onecontentaddress flex-colum-start" v-if="elist.address" @click="clickaddress">
|
||
<view class="onecontentaddressone" v-if="formlist.type == 3">
|
||
{{elist.address.address}}
|
||
</view>
|
||
<view class="onecontentaddressone" v-else>
|
||
{{elist.address.province}}-{{elist.address.city}}-{{elist.address.area}}-{{elist.address.address}}
|
||
</view>
|
||
<view class="onecontentaddresstow">
|
||
{{elist.address.name}}<text style="margin-left: 10rpx;">{{elist.address.mobile}}</text>
|
||
</view>
|
||
</view>
|
||
<view class="onecontentaddress" v-else>
|
||
<view class="onecontentaddressone" @click="clickaddress">
|
||
去添加地址
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="therecontent">
|
||
<!-- <view class="therecontenttow flex-between">
|
||
<view class="therecontenttow_one">
|
||
商品金额
|
||
</view>
|
||
<view class="therecontenttow_tow">
|
||
{{elist.number}}
|
||
</view>
|
||
</view>
|
||
<view class="therecontenttow flex-between">
|
||
<view class="therecontenttow_one">
|
||
优惠券
|
||
</view>
|
||
<view class="therecontenttow_tow">
|
||
暂无可用
|
||
</view>
|
||
</view> -->
|
||
<view class="therecontenttow flex-between">
|
||
<view class="therecontenttow_one">
|
||
运费
|
||
</view>
|
||
<view class="therecontenttow_tow">
|
||
¥{{elist.freight}}
|
||
</view>
|
||
</view>
|
||
<view class="therecontenttow flex-between">
|
||
<view class="therecontenttow_one">
|
||
合计
|
||
</view>
|
||
<view class="therecontenttow_tow" style="color:#FC5F69;">
|
||
¥{{elist.price.total_price}}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<!-- <view class="fivecontent">
|
||
<view class="fivecontentitem flex-between">
|
||
<view class="fivecontentitem_one">
|
||
手机号码
|
||
</view>
|
||
<view class="fivecontentitem_tow">
|
||
{{mobile}}
|
||
</view>
|
||
</view>
|
||
<view class="fivecontentitem flex-between">
|
||
<view class="fivecontentitem_one">
|
||
姓名
|
||
</view>
|
||
<view class="fivecontentitem_tow">
|
||
张雪
|
||
</view>
|
||
</view>
|
||
</view> -->
|
||
<view class="sixcontent">
|
||
<view class="sixcontentone flex-between">
|
||
<view class="sixcontent_one">
|
||
支付方式
|
||
</view>
|
||
</view>
|
||
<view class="sixcontenttow">
|
||
<view class="sixcontenttowitem flex-between" @click="clickselect(1)">
|
||
<view class="sixcontenttowitemone flex-start">
|
||
<image src="https://ointmentweapp.oss-cn-beijing.aliyuncs.com/image/wx.png" mode="aspectFill"></image>
|
||
<text class="sixcontenttowitemonetext">微信支付</text>
|
||
</view>
|
||
<view class="flex-start">
|
||
<u-icon v-if="pay_type == 1" name="checkmark-circle-fill" color="#333333" size="18"></u-icon>
|
||
<u-icon v-else name="checkmark-circle-fill" color="#999999" size="18"></u-icon>
|
||
|
||
</view>
|
||
</view>
|
||
<view class="sixcontenttowitem flex-between" @click="clickselect(2)">
|
||
<view class="sixcontenttowitemone flex-start">
|
||
|
||
<image src="https://ointmentweapp.oss-cn-beijing.aliyuncs.com/image/ye.png" mode="aspectFill"></image>
|
||
<text class="sixcontenttowitemonetext">余额支付</text>
|
||
</view>
|
||
<view class="flex-start">
|
||
<u-icon v-if="pay_type == 2" name="checkmark-circle-fill" color="#333333" size="18"></u-icon>
|
||
<u-icon v-else name="checkmark-circle-fill" color="#999999" size="18"></u-icon>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<!-- <view class="fourcontent">
|
||
<view class="fourcontentone flex-start">
|
||
<view class="fourcontent_one">
|
||
须知:
|
||
</view>
|
||
</view>
|
||
<view class="fourcontenttow flex-colum-start">
|
||
|
||
</view>
|
||
</view> -->
|
||
<view :style="{height:height}">
|
||
|
||
</view>
|
||
<view class="fixedview flex-between">
|
||
<view class="fixedview_one flex-start">
|
||
<view class="fixedview_oneone">
|
||
实付金额:
|
||
</view>
|
||
<view class="fixedview_onetow">
|
||
<text>¥</text>{{elist.price.price}}
|
||
</view>
|
||
</view>
|
||
<view class="fixedview_tow" @tap="$u.debounce(showpopupclick,1000)">
|
||
立即付款
|
||
</view>
|
||
</view>
|
||
<u-popup :show="showpopup" @close="closepopup" @open="openpopup" mode="center" :round="10">
|
||
<view class="u-popupflex-colum flex-colum">
|
||
<view class="u-popupflex-columview">
|
||
请输入支付密码
|
||
</view>
|
||
<u-code-input v-model="ucodeinputvalue" :maxlength="6" dot @finish="finish"></u-code-input>
|
||
</view>
|
||
</u-popup>
|
||
|
||
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
data() {
|
||
return {
|
||
showpopup: false,
|
||
ucodeinputvalue: '',
|
||
height: '',
|
||
order_id: '',
|
||
elist: {
|
||
address: {
|
||
|
||
},
|
||
price: {
|
||
total_price: '',
|
||
id: ''
|
||
}
|
||
},
|
||
mobile: uni.cache.get('loginuser').userinfo.mobile,
|
||
formlist: {
|
||
goods_id: ''
|
||
},
|
||
pay_type: 1
|
||
}
|
||
},
|
||
async onLoad(e) {
|
||
// this.elist = JSON.parse(optionItem)
|
||
this.formlist = e
|
||
this.formlist.spec = decodeURIComponent(e.spec)
|
||
let res = await this.api.shoppingindexgoodindexoforders({
|
||
type: this.formlist.type, // 1购物车 2商品详情页
|
||
goods_id: this.formlist.goods_id, //商品ID 商品详情页来源时必填
|
||
car_id: this.formlist.car_id, //购物车ID 1,2 购物车来源时必填
|
||
number: this.formlist.number, //数量 商品详情页来源时必填
|
||
spec: this.formlist.spec, //规格 商品详情页来源时必填
|
||
address_id: this.formlist.address_id, //地址ID 可以为空(为空时返回默认地址)
|
||
order_id:this.formlist.order_id,
|
||
})
|
||
if (res) {
|
||
this.elist = res
|
||
this.elist.goods[0].spec = this.formlist.spec
|
||
if (this.elist.address) {
|
||
this.elist.address.mobile = res.address.mobile.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
|
||
}
|
||
}
|
||
},
|
||
computed: {
|
||
theme() {
|
||
return this.$store.getters.theme
|
||
},
|
||
},
|
||
methods: {
|
||
clickaddress() {
|
||
uni.pro.navigateTo("user/address/index", {
|
||
order: 1
|
||
});
|
||
uni.$once('update', data => {
|
||
this.elist.address = JSON.parse(data)
|
||
if (this.elist.address) {
|
||
this.elist.address.mobile = this.elist.address.mobile.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
|
||
}
|
||
this.$forceUpdate();
|
||
})
|
||
},
|
||
openpopup() {
|
||
console.log('open');
|
||
},
|
||
closepopup() {
|
||
this.showpopup = false
|
||
},
|
||
|
||
finish(e) {
|
||
this.reservationmakenowsub()
|
||
},
|
||
showpopupclick() {
|
||
if(this.elist.address == null || this.elist.address == undefined){
|
||
uni.showToast({
|
||
icon: 'none',
|
||
title: '收货地址不能为空'
|
||
})
|
||
return false
|
||
}
|
||
if (this.pay_type == 1) {
|
||
uni.showLoading({
|
||
title: '加载中',
|
||
mask: true
|
||
})
|
||
this.reservationmakenowsub()
|
||
return false;
|
||
} else {
|
||
if (this.pay_type == 2) {
|
||
if (this.elist.is_vip_password == 0) {
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '您目前没有设置密码,请先设置支付密码',
|
||
success: function(res) {
|
||
if (res.confirm) {
|
||
uni.redirectTo({
|
||
url: '/pages/my/setup/repairpassword'
|
||
});
|
||
} else if (res.cancel) {}
|
||
}
|
||
});
|
||
} else {
|
||
this.showpopup = true
|
||
}
|
||
}
|
||
}
|
||
},
|
||
async reservationmakenowsub() {
|
||
var datareslane = await this.api.shoppingindexgoodindexsuborder({
|
||
type: this.formlist.type,
|
||
goods_id: this.formlist.goods_id, //商品ID 商品详情页来源时必填
|
||
car_id: this.formlist.car_id, //购物车ID 1,2 购物车来源时必填
|
||
number: this.formlist.number, //数量 商品详情页来源时必填
|
||
spec: this.formlist.spec, //规格 商品详情页来源时必填
|
||
address_id: this.formlist.address_id, //地址ID 可以为空(为空时返回默认地址)
|
||
pay_type: this.pay_type ,//1微信 2余额卡
|
||
order_id:this.formlist.order_id
|
||
})
|
||
console.log(datareslane, 280)
|
||
if (datareslane.data) {
|
||
let res = await this.api.shoppingindexgoodindexgetpayparams({
|
||
order_id: datareslane.data.order_id,
|
||
sec_password: this.ucodeinputvalue //安全密码 余额卡支付时有效
|
||
}) //判断是否支付成功
|
||
this.ucodeinputvalue = ''
|
||
console.log(res, 287)
|
||
if (res.data.pay_status == 0) {
|
||
this.showpopup = false
|
||
uni.showLoading({
|
||
title: '加载中',
|
||
mask: true
|
||
})
|
||
// #ifdef MP-WEIXIN
|
||
uni.requestPayment({
|
||
provider: 'wxpay', //支付类型-固定值
|
||
partnerid: res.data.pay_data.payAppId, // 微信支付商户号
|
||
timeStamp: res.data.pay_data.payTimeStamp, // 时间戳(单位:秒)
|
||
nonceStr: res.data.pay_data.paynonceStr, // 随机字符串
|
||
package: res.data.pay_data.payPackage, // 固定值
|
||
signType: res.data.pay_data.paySignType, //固定值
|
||
paySign: res.data.pay_data.paySign, //签名
|
||
success: (res) => {
|
||
uni.showToast({
|
||
title: "支付成功"
|
||
})
|
||
uni.redirectTo({
|
||
url: "/pages/mall/order/ordersuccess?id=" + datareslane.data.order_id,
|
||
});
|
||
},
|
||
fail: (err) => {
|
||
setTimeout(res => {
|
||
uni.showToast({
|
||
icon: 'none',
|
||
title: '支付失败'
|
||
})
|
||
uni.hideLoading()
|
||
}, 2000)
|
||
uni.redirectTo({
|
||
url: "/pages/mall/order/index?e=" +0,
|
||
});
|
||
}
|
||
});
|
||
// #endif
|
||
} else {
|
||
uni.redirectTo({
|
||
url: "/pages/mall/order/ordersuccess?id=" + datareslane.data.order_id,
|
||
});
|
||
}
|
||
} else {
|
||
uni.showToast({
|
||
title: res.message || res.msg,
|
||
icon: "none",
|
||
success() {
|
||
setTimeout(res => {
|
||
// if (options.toast) {
|
||
uni.hideLoading()
|
||
// }
|
||
}, 2000)
|
||
}
|
||
})
|
||
}
|
||
|
||
},
|
||
clickselect(b) {
|
||
this.pay_type = b
|
||
},
|
||
},
|
||
mounted() {
|
||
//#ifdef MP-WEIXIN || H5
|
||
var query = uni.createSelectorQuery().in(this).select('.fixedview')
|
||
query.boundingClientRect(ele => {
|
||
var that = this;
|
||
uni.getSystemInfo({
|
||
success(res) {
|
||
that.height = (ele.height) + "px";
|
||
that = null;
|
||
}
|
||
})
|
||
}).exec();
|
||
//#endif
|
||
//#ifdef MP-ALIPAY
|
||
my.createSelectorQuery().selectAll('.fixedview').boundingClientRect().exec(ele => {
|
||
var nodeData = ele[0]
|
||
var that = this;
|
||
that.height = (nodeData.height) + "px";
|
||
that = null;
|
||
})
|
||
//#endif
|
||
},
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
page {
|
||
background: #F6F6F6;
|
||
}
|
||
|
||
.content {
|
||
padding: 32rpx 28rpx;
|
||
|
||
.onecontent {
|
||
width: 100%;
|
||
background: #FFFFFF;
|
||
padding: 32rpx;
|
||
border-radius: 12rpx;
|
||
|
||
.onecontentone {
|
||
padding-bottom: 28rpx;
|
||
border-bottom: 1px solid #F7F7F7;
|
||
|
||
.onecontent_one {
|
||
font-size: 28rpx;
|
||
font-weight: bold;
|
||
font-family: PingFang SC-Bold, PingFang SC;
|
||
color: #333333;
|
||
}
|
||
|
||
.onecontent_tow {
|
||
flex: 1;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
margin-left: 32rpx;
|
||
font-size: 32rpx;
|
||
font-family: PingFang SC-Bold, PingFang SC;
|
||
font-weight: bold;
|
||
color: #333333;
|
||
}
|
||
}
|
||
|
||
.onecontentaddress {
|
||
.onecontentaddressone {
|
||
margin-top: 24rpx;
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Medium, PingFang SC;
|
||
font-weight: 500;
|
||
color: #333333;
|
||
}
|
||
|
||
.onecontentaddresstow {
|
||
margin-top: 24rpx;
|
||
font-size: 28rpx;
|
||
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
|
||
font-weight: 400;
|
||
color: #666666;
|
||
}
|
||
}
|
||
|
||
.onecontenttow {
|
||
width: 100%;
|
||
|
||
.onecontenttowitem {
|
||
margin-top: 24rpx;
|
||
width: 100%;
|
||
|
||
.onecontenttowitem_one {
|
||
.onecontenttowitemimage {
|
||
width: 124rpx;
|
||
height: 124rpx;
|
||
}
|
||
|
||
.onecontenttowitem_onebox {
|
||
margin-left: 24rpx;
|
||
|
||
.onecontenttowitem_onebox_one {
|
||
font-size: 32rpx;
|
||
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
|
||
font-weight: 500;
|
||
color: #1A1A1A;
|
||
}
|
||
|
||
.onecontenttowitem_onebox_tow {
|
||
margin-top: 32rpx;
|
||
font-size: 24rpx;
|
||
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
|
||
font-weight: 500;
|
||
color: #666666;
|
||
}
|
||
}
|
||
}
|
||
|
||
.onecontenttowitem_tow {
|
||
.onecontenttowitem_towstext_one {
|
||
font-size: 32rpx;
|
||
font-family: Roboto-Medium, Roboto;
|
||
font-weight: 500;
|
||
color: #333333;
|
||
}
|
||
|
||
.onecontenttowitem_towstetx_tow {
|
||
margin-top: 32rpx;
|
||
font-size: 28rpx;
|
||
font-family: DIN Alternate-Bold, DIN Alternate;
|
||
font-weight: bold;
|
||
color: #666666;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
.fivecontent {
|
||
width: 100%;
|
||
background: #FFFFFF;
|
||
padding: 32rpx;
|
||
border-radius: 12rpx;
|
||
margin-top: 32rpx;
|
||
|
||
.fivecontentitem:nth-child(2) {
|
||
border: none !important;
|
||
}
|
||
|
||
.fivecontentitem {
|
||
padding: 18rpx 0;
|
||
border-bottom: 1px solid #F7F7F7;
|
||
|
||
.fivecontentitem_one {
|
||
font-size: 28rpx;
|
||
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
|
||
font-weight: 500;
|
||
color: #333333;
|
||
}
|
||
|
||
.fivecontentitem_tow {
|
||
font-size: 28rpx;
|
||
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
|
||
font-weight: 500;
|
||
color: #333333;
|
||
}
|
||
}
|
||
}
|
||
|
||
.therecontent {
|
||
width: 100%;
|
||
background: #FFFFFF;
|
||
padding: 32rpx;
|
||
border-radius: 12rpx;
|
||
margin-top: 32rpx;
|
||
|
||
.therecontenttow:nth-child(1) {
|
||
margin-top: 0 !important;
|
||
}
|
||
|
||
.therecontenttow {
|
||
margin-top: 32rpx;
|
||
|
||
.therecontenttow_one {
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Regular, PingFang SC;
|
||
font-weight: 400;
|
||
color: #333333;
|
||
}
|
||
|
||
.therecontenttow_tow {
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Bold, PingFang SC;
|
||
font-weight: 500;
|
||
color: #333333;
|
||
}
|
||
}
|
||
}
|
||
|
||
.sixcontent {
|
||
width: 100%;
|
||
background: #FFFFFF;
|
||
padding: 32rpx;
|
||
margin-top: 32rpx;
|
||
border-radius: 12rpx;
|
||
|
||
.sixcontentone {
|
||
padding-bottom: 28rpx;
|
||
border-bottom: 1px solid #F7F7F7;
|
||
|
||
.sixcontent_one {
|
||
font-size: 28rpx;
|
||
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
|
||
font-weight: 500;
|
||
color: #333333;
|
||
}
|
||
}
|
||
|
||
.sixcontenttow {
|
||
.sixcontenttowitem {
|
||
margin-top: 16rpx;
|
||
|
||
.sixcontenttowitemone {
|
||
image {
|
||
margin-left: 24rpx;
|
||
width: 31.37rpx;
|
||
height: 27.34rpx;
|
||
}
|
||
|
||
.sixcontenttowitemonetext {
|
||
margin-left: 14rpx;
|
||
font-size: 28rpx;
|
||
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
|
||
font-weight: 500;
|
||
color: #333333;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
.fourcontent {
|
||
|
||
width: 100%;
|
||
background: #FFFFFF;
|
||
padding: 32rpx;
|
||
margin-top: 32rpx;
|
||
border-radius: 12rpx;
|
||
|
||
.fourcontentone {
|
||
padding-bottom: 28rpx;
|
||
border-bottom: 1px solid #F7F7F7;
|
||
|
||
.fourcontent_one {
|
||
font-size: 28rpx;
|
||
font-family: Source Han Sans CN-Bold, Source Han Sans CN;
|
||
font-weight: bold;
|
||
color: #333333;
|
||
}
|
||
|
||
}
|
||
|
||
.fourcontenttow {
|
||
margin-top: 16rpx;
|
||
width: 100%;
|
||
|
||
/deep/ img {
|
||
width: 100%;
|
||
}
|
||
}
|
||
}
|
||
|
||
.u-popupflex-colum {
|
||
padding: 80rpx 40rpx;
|
||
border-radius: 50rpx;
|
||
background: #FFFFFF;
|
||
|
||
.u-popupflex-columview {
|
||
font-family: SourceHanSansCN-Bold-, SourceHanSansCN-Bold;
|
||
font-weight: normal;
|
||
color: #000;
|
||
font-weight: bold;
|
||
margin-bottom: 50rpx;
|
||
}
|
||
}
|
||
|
||
.fixedview {
|
||
position: fixed;
|
||
bottom: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
padding: 24rpx 28rpx;
|
||
background: #FFFFFF;
|
||
|
||
.fixedview_one {
|
||
.fixedview_oneone {
|
||
font-size: 28rpx;
|
||
font-family: SourceHanSansCN-Bold-, SourceHanSansCN-Bold;
|
||
font-weight: normal;
|
||
color: #333333;
|
||
}
|
||
|
||
.fixedview_onetow {
|
||
font-size: 44rpx;
|
||
font-family: SourceHanSansCN-Bold-, SourceHanSansCN-Bold;
|
||
font-weight: normal;
|
||
color: #F45C4C;
|
||
font-weight: bold;
|
||
|
||
text {
|
||
font-size: 28rpx;
|
||
}
|
||
}
|
||
}
|
||
|
||
.fixedview_tow {
|
||
background: var(--bg-color-button);
|
||
border-radius: 34rpx;
|
||
padding: 10rpx 44rpx;
|
||
font-size: 32rpx;
|
||
font-family: PingFang SC-Bold, PingFang SC;
|
||
font-weight: bold;
|
||
color: #FFFFFF;
|
||
}
|
||
|
||
}
|
||
}
|
||
</style> |