<template>
|
|
<uv-popup ref="popup"
|
|
:round="30"
|
|
bgColor="#f7f7f7">
|
|
<view class="content">
|
|
|
|
<!-- 地址 -->
|
|
<view class="address"
|
|
@click="openAddress">
|
|
<image src="../../static/address/selectIcon.png" mode=""></image>
|
|
<view class="">
|
|
{{ address.name }}
|
|
</view>
|
|
<view class="">
|
|
{{ address.addressDetail }}
|
|
</view>
|
|
<view class="icon">
|
|
<uv-icon
|
|
size="30rpx"
|
|
name="arrow-right"></uv-icon>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 商品信息和数量 -->
|
|
<view class="submit-info">
|
|
<view class="title">
|
|
{{ detail.name }}
|
|
</view>
|
|
<view class="box">
|
|
<image
|
|
class="image"
|
|
:src="detail.image && detail.image.split(',')[0]"
|
|
mode=""></image>
|
|
|
|
<view class="info">
|
|
<view class="price"
|
|
v-if="isProductPrice(detail)">
|
|
价格¥<text>{{ detail.price }}</text>元
|
|
</view>
|
|
<!-- <view class="unit">
|
|
请选择规格
|
|
</view> -->
|
|
<view class="favorable"
|
|
v-if="isProductPoint(detail)">
|
|
<view class="t">
|
|
积分兑换
|
|
</view>
|
|
<view class="p">
|
|
{{ detail.points }}
|
|
</view>
|
|
</view>
|
|
<view class="">
|
|
<uv-number-box v-model="num"></uv-number-box>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 规格 -->
|
|
<!-- <view class="submit-unit">
|
|
<view class="title">
|
|
规格选择
|
|
</view>
|
|
<view class="list">
|
|
<view :class="{act : unitIndex == index}"
|
|
v-for="(item, index) in detail.hotelGoodsSkuList"
|
|
@click="selectUnit(item, index)"
|
|
:key="index">
|
|
{{ item.title }}
|
|
</view>
|
|
</view>
|
|
</view> -->
|
|
|
|
|
|
|
|
<!-- 费用明细 -->
|
|
<view class="expense-detail">
|
|
<view class="title">
|
|
费用明细
|
|
</view>
|
|
<view class="detail"
|
|
v-if="isProductPoint(detail)">
|
|
积分:{{ detail.points }}
|
|
</view>
|
|
<view class="detail"
|
|
v-if="isProductPrice(detail)">
|
|
金额:{{ detail.price }}
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
|
<!-- 提交按钮 -->
|
|
<view class="submit-btn">
|
|
<view class="r"
|
|
v-if="isProductPoint(detail)"
|
|
@click="exchange">
|
|
立即兑换
|
|
</view>
|
|
<view class="r"
|
|
v-if="isProductPrice(detail)"
|
|
@click="orderPay">
|
|
立即购买
|
|
</view>
|
|
</view>
|
|
|
|
</view>
|
|
|
|
<uv-popup ref="addressPopup" :round="30">
|
|
<addressList
|
|
ref="addressList"
|
|
height="60vh"
|
|
@select="selectAddress"
|
|
/>
|
|
</uv-popup>
|
|
</uv-popup>
|
|
</template>
|
|
|
|
<script>
|
|
import addressList from '../address/addressList.vue'
|
|
import productMixins from '@/mixins/product.js'
|
|
export default {
|
|
mixins : [productMixins],
|
|
components : {
|
|
addressList,
|
|
},
|
|
props : {
|
|
submiitTitle : {
|
|
default : '立即购买',
|
|
type : String,
|
|
},
|
|
detail : {
|
|
default : {}
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
unitIndex : 0,
|
|
address : {
|
|
name : '请选择联系人',
|
|
addressDetail : '',
|
|
},
|
|
num : 1,
|
|
unit : {},
|
|
addressTotal : 0,
|
|
}
|
|
},
|
|
methods: {
|
|
// 打开
|
|
open(){
|
|
this.$refs.popup.open('bottom')
|
|
// if(!this.unit.id){
|
|
// this.selectUnit(this.detail.hotelGoodsSkuList[0], 0)
|
|
// }
|
|
|
|
// 获取地址列表
|
|
this.$refs.addressList.getAddressList().then(res => {
|
|
this.addressTotal = res.total
|
|
if(this.addressTotal != 0){
|
|
this.address = res.records[0]
|
|
}
|
|
})
|
|
},
|
|
// 关闭
|
|
close(){
|
|
this.$refs.popup.close()
|
|
},
|
|
// 打开选择地址
|
|
openAddress(){
|
|
if (this.addressTotal == 0) {
|
|
this.$refs.popup.close()
|
|
return uni.navigateTo({
|
|
url: '/pages_order/mine/address?type=back'
|
|
})
|
|
}
|
|
this.$refs.addressPopup.open('bottom')
|
|
},
|
|
// 选择地址
|
|
selectAddress(e){
|
|
this.address = e
|
|
this.$refs.addressPopup.close()
|
|
},
|
|
// 选择规格
|
|
selectUnit(item, index){
|
|
this.unit = item
|
|
this.unitIndex = index
|
|
},
|
|
// 积分兑换
|
|
exchange(){
|
|
|
|
let data = {
|
|
shopId : this.detail.id,//商品id
|
|
addressId : this.address.id,//地址id
|
|
num : this.num,
|
|
}
|
|
|
|
if(this.$utils.verificationAll(data, {
|
|
addressId : '请选择地址',
|
|
})){
|
|
return
|
|
}
|
|
|
|
this.$api('createPointsOrder', data, res => {
|
|
if(res.code == 200){
|
|
uni.redirectTo({
|
|
url: '/pages_order/order/order'
|
|
})
|
|
}
|
|
})
|
|
},
|
|
orderPay(){
|
|
|
|
let data = {
|
|
shopId : this.detail.id,//商品id
|
|
// skuId : this.unit.id,//规格id
|
|
addressId : this.address.id,//地址id
|
|
// sku : this.unit.title,//规格
|
|
num : this.num,
|
|
}
|
|
|
|
|
|
if(this.$utils.verificationAll(data, {
|
|
// skuId : '请选择规格',
|
|
addressId : '请选择地址',
|
|
})){
|
|
return
|
|
}
|
|
|
|
this.$api('createOrder', data, res => {
|
|
if(res.code == 200){
|
|
uni.requestPayment({
|
|
provider: 'wxpay', // 服务提提供商
|
|
timeStamp: res.result.timeStamp, // 时间戳
|
|
nonceStr: res.result.nonceStr, // 随机字符串
|
|
package: res.result.packageValue,
|
|
signType: res.result.signType, // 签名算法
|
|
paySign: res.result.paySign, // 签名
|
|
success: function (res) {
|
|
console.log('支付成功',res);
|
|
uni.redirectTo({
|
|
url: '/pages_order/order/order'
|
|
})
|
|
},
|
|
fail: function (err) {
|
|
console.log('支付失败',err);
|
|
uni.showToast({
|
|
icon:'none',
|
|
title:"支付失败"
|
|
})
|
|
}
|
|
});
|
|
}
|
|
})
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.content{
|
|
max-height: 80vh;
|
|
overflow: hidden;
|
|
overflow-y: auto;
|
|
.address{
|
|
display: flex;
|
|
padding: 20rpx;
|
|
background-color: #fff;
|
|
image{
|
|
width: 30rpx;
|
|
height: 30rpx;
|
|
margin: 20rpx;
|
|
}
|
|
view{
|
|
margin: 20rpx;
|
|
overflow:hidden; //超出的文本隐藏
|
|
text-overflow:ellipsis; //溢出用省略号显示
|
|
white-space:nowrap; //溢出不换行
|
|
}
|
|
.icon{
|
|
margin-left: auto;
|
|
}
|
|
}
|
|
.submit-info{
|
|
background-color: #fff;
|
|
padding: 30rpx;
|
|
margin-top: 20rpx;
|
|
.title{
|
|
font-size: 30rpx;
|
|
padding: 10rpx;
|
|
font-weight: 600;
|
|
}
|
|
.box{
|
|
display: flex;
|
|
margin-top: 10rpx;
|
|
.image{
|
|
width: 200rpx;
|
|
height: 200rpx;
|
|
border-radius: 20rpx;
|
|
margin-right: 20rpx;
|
|
}
|
|
.info{
|
|
flex: 1;
|
|
.unit{
|
|
font-size: 24rpx;
|
|
padding: 10rpx 20rpx;
|
|
color: #717171;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.price{
|
|
color: $uni-price-color;
|
|
font-size: 28rpx;
|
|
padding: 10rpx 20rpx;
|
|
text{
|
|
font-size: 36rpx;
|
|
font-weight: 900;
|
|
}
|
|
}
|
|
.favorable{
|
|
margin-left: 10rpx;
|
|
display: flex;
|
|
// background-image: url(/static/image/product/favorable.png);
|
|
background-size: 100% 100%;
|
|
width: fit-content;
|
|
font-size: 22rpx;
|
|
margin-top: 6rpx;
|
|
margin-bottom: 6rpx;
|
|
border-radius: 10rpx;
|
|
overflow: hidden;
|
|
background-color: #ff000011;
|
|
.t{
|
|
padding: 5rpx 10rpx;
|
|
}
|
|
.p{
|
|
padding: 5rpx 10rpx;
|
|
color: #fff;
|
|
background-color: #F03F25;
|
|
height: 100%;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.submit-unit{
|
|
padding: 30rpx;
|
|
background-color: #fff;
|
|
.title{
|
|
font-size: 28rpx;
|
|
font-weight: 600;
|
|
}
|
|
.list{
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
font-size: 22rpx;
|
|
.act{
|
|
color: $uni-price-color;
|
|
border: 1px solid $uni-price-color;
|
|
background-color: #F9E7DE;
|
|
}
|
|
view{
|
|
border-radius: 15rpx;
|
|
width: 320rpx;
|
|
background-color: #F3F3F3;
|
|
border: 1px solid #F3F3F3;
|
|
margin: 10rpx;
|
|
display: flex;
|
|
justify-content: center;
|
|
padding: 15rpx 0;
|
|
}
|
|
}
|
|
}
|
|
.expense-detail{
|
|
padding: 30rpx;
|
|
background-color: #fff;
|
|
font-size: 28rpx;
|
|
.title{
|
|
font-weight: 600;
|
|
}
|
|
.detail{
|
|
background-color: #F6F6F6;
|
|
color: #717171;
|
|
margin: 10rpx 0;
|
|
padding: 10rpx 20rpx;
|
|
}
|
|
}
|
|
.submit-btn{
|
|
width: 600rpx;
|
|
height: 80rpx;
|
|
color: #fff;
|
|
border-radius: 40rpx;
|
|
font-size: 28rpx;
|
|
margin: 20rpx auto;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
border: 1rpx solid $uni-price-color;
|
|
overflow: hidden;
|
|
.l{
|
|
flex: 1;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
color: $uni-price-color;
|
|
}
|
|
.r{
|
|
background: $uni-price-color;
|
|
flex: 1;
|
|
height: 100%;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
}
|
|
}
|
|
</style>
|