@ -1,414 +0,0 @@ |
|||
<template> |
|||
<view> |
|||
<view class="confirm-order"> |
|||
<view class="confirm-con"> |
|||
<navigator hover-class="none" url="/bundle/pages/user_address/user_address?type=1"> |
|||
<view class="address flex bg-white"> |
|||
<image class="icon-md m-r-20" src="/static/images/icon_address.png"></image> |
|||
<view class="flex-1 m-r-20"> |
|||
<view class="black md" v-if="!address.contact">设置收货地址</view> |
|||
<view v-else> |
|||
<text class="name md m-r-10">{{address.contact}}</text> |
|||
<text class="phone md">{{address.telephone}}</text> |
|||
<view class="area sm m-t-10 lighter"> |
|||
{{address.province}} {{address.city}} {{address.district}} {{address.address}} |
|||
</view> |
|||
</view> |
|||
</view> |
|||
<u-icon name="arrow-right"></u-icon> |
|||
</view> |
|||
</navigator> |
|||
|
|||
<!-- 拼团商品 --> |
|||
<block v-if="teamId==undefined"> |
|||
<view class="goods contain" v-for="(item,index) in shopLists" :key="index"> |
|||
<order-shop :order-type="orderInfo.order_type" :item="item" :invoice="invoiceArr" @changeremark="changeRemark" |
|||
@changecoupon="changeCoupon($event,index)" @changeDeliveryType="changeDeliveryType($event,item)" :teamId="teamId" :bargainLaunchId="bargainLaunchId"></order-shop> |
|||
</view> |
|||
</block> |
|||
<!-- 其他商品 --> |
|||
<block v-else> |
|||
<view class="goods contain"> |
|||
<order-shop :order-type="orderInfo.order_type" :item="shopLists" :invoice="invoiceArr" @changeremark="changeRemark" |
|||
@changeDeliveryType="changeDeliveryType($event, shopLists)" :teamId="teamId" :bargainLaunchId="bargainLaunchId"></order-shop> |
|||
</view> |
|||
</block> |
|||
</view> |
|||
|
|||
<view class="footer bg-white flex row-between fixed"> |
|||
<view class="all-price lg flex"> |
|||
<text>合计:</text> |
|||
<view class="primary"> |
|||
<price-format weight="500" :first-size="36" :second-size="36" :price="orderInfo.total_amount"> |
|||
</price-format> |
|||
</view> |
|||
</view> |
|||
<button class="btn br60 white" size="md" hover-class="none" @tap="onSubmitOrder"> |
|||
提交订单 |
|||
</button> |
|||
</view> |
|||
</view> |
|||
|
|||
<loading-view v-if="showLoading" background-color="transparent" :size="50"></loading-view> |
|||
<loading-view v-if="isFirstLoading"></loading-view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { |
|||
orderInfo, |
|||
orderBuy, |
|||
getOrderCoupon |
|||
} from '@/api/order'; |
|||
import { |
|||
teamBuy, |
|||
teamKaiTuan |
|||
} from '@/api/activity' |
|||
import { |
|||
prepay, |
|||
getMnpNotice, |
|||
getPayway |
|||
} from '@/api/app'; |
|||
import { |
|||
wxpay, |
|||
alipay |
|||
} from '@/utils/pay' |
|||
// total_amount |
|||
export default { |
|||
data() { |
|||
return { |
|||
isFirstLoading: true, |
|||
showLoading: false, |
|||
address: {}, |
|||
orderInfo: {}, |
|||
shopLists: [], |
|||
addressId: '', |
|||
useIntegral: 0, |
|||
userRemark: [], |
|||
couponId: [], |
|||
teamId: undefined, |
|||
carts: [], |
|||
type: '', |
|||
goods: '', |
|||
bargainLaunchId: -1, |
|||
invoiceArr: [] // 发票数组 |
|||
}; |
|||
}, |
|||
|
|||
onLoad(options) { |
|||
|
|||
uni.$on("selectaddress", (e) => { |
|||
this.addressId = e.id; |
|||
this.orderBuyFun(); |
|||
}) |
|||
|
|||
// 监听发票传回的值, |
|||
uni.$on('invoice', params => { |
|||
const index = this.invoiceArr.findIndex(el => el.shop_id == params.shop_id) |
|||
if ( params.del == true && this.invoiceArr.length) { |
|||
this.invoiceArr.splice(index, 1); |
|||
} else { |
|||
if ( index == -1 ) this.invoiceArr = [...this.invoiceArr, params] |
|||
else this.invoiceArr.splice(index, 1, params); |
|||
} |
|||
}) |
|||
|
|||
const { |
|||
data: { |
|||
goods, |
|||
carts, |
|||
teamId, |
|||
foundId, |
|||
type |
|||
} |
|||
} = this.$Route.query |
|||
|
|||
this.goods = goods |
|||
this.bargainLaunchId = goods[0].bargain_launch_id || -1 |
|||
this.carts = carts || [] |
|||
this.type = type |
|||
this.teamId = teamId |
|||
|
|||
// 参团的id,如果为空的话就是开团,如果有数据就是参团 |
|||
this.foundId = foundId || '' |
|||
|
|||
this.orderBuyFun(); |
|||
}, |
|||
|
|||
onUnload() { |
|||
uni.$off("selectaddress") |
|||
uni.$off("payment") |
|||
uni.$off("invoice") |
|||
}, |
|||
|
|||
methods: { |
|||
// 备注 |
|||
changeRemark(e) { |
|||
let index = this.userRemark.findIndex((item) => item.shop_id == e.shop_id) |
|||
if (index == -1) { |
|||
this.userRemark.push(e) |
|||
} else { |
|||
this.userRemark[index].remark = e.remark |
|||
} |
|||
this.userRemark = this.userRemark.filter((item) => item.remark) |
|||
}, |
|||
|
|||
// 选中优惠券 |
|||
changeCoupon(e, index) { |
|||
this.couponId[index] = e |
|||
this.orderBuyFun() |
|||
}, |
|||
|
|||
// 选择对应的配送方式赋值给商品中的配送方式 |
|||
changeDeliveryType(type, row) { |
|||
row.delivery_type = type; |
|||
for(let i=0;i<this.goods.length;i++) { |
|||
const item = this.goods[i]; |
|||
if(row.shop_id == item.shop_id) { |
|||
this.goods[i].delivery_type = type; |
|||
} |
|||
} |
|||
this.orderBuyFun(); |
|||
}, |
|||
|
|||
getAuthMsg() { |
|||
return new Promise(resolve => { |
|||
getMnpNotice({ |
|||
scene: 1 |
|||
}).then(res => { |
|||
if (res.code == 1) { |
|||
uni.requestSubscribeMessage({ |
|||
tmplIds: res.data, |
|||
|
|||
fail(res) { |
|||
console.log(res.errMsg); |
|||
}, |
|||
|
|||
complete() { |
|||
resolve(); |
|||
} |
|||
|
|||
}); |
|||
} else { |
|||
resolve(); |
|||
} |
|||
}); |
|||
}); |
|||
}, |
|||
|
|||
onSubmitOrder() { |
|||
uni.showModal({ |
|||
title: '温馨提示', |
|||
content: '是否确认下单?', |
|||
confirmColor: '#FF2C3C', |
|||
success: async res => { |
|||
let { |
|||
confirm |
|||
} = res; |
|||
if (confirm) { |
|||
// #ifdef MP-WEIXIN |
|||
await this.getAuthMsg(); |
|||
//#endif |
|||
this.showLoading = true |
|||
this.orderBuyFun('submit'); |
|||
} |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
async orderBuyFun(action = 'info') { |
|||
const { |
|||
userRemark, |
|||
useIntegral, |
|||
carts, |
|||
goods, |
|||
bargainLaunchId, |
|||
couponId |
|||
} = this; |
|||
const submitObj = { |
|||
goods: JSON.stringify(goods), |
|||
address_id: this.addressId, |
|||
cart_id: carts.join(), |
|||
coupon_id: couponId.filter(item => item), |
|||
// bargain_launch_id是砍价的判断 |
|||
bargain_launch_id: this.bargainLaunchId == -1 ? '' : this.bargainLaunchId |
|||
}; |
|||
|
|||
// 判断是不是拼团的,并且是获取订单数据 |
|||
if (this.teamId && action == 'info') { |
|||
delete submitObj.goods; |
|||
submitObj.action = 'info'; |
|||
submitObj.item_id = this.goods[0].item_id; |
|||
submitObj.delivery_type = this.goods[0].delivery_type; |
|||
submitObj.count = this.goods[0].num; |
|||
submitObj.goods_id = this.goods[0].goods_id |
|||
submitObj.team_id = this.teamId; |
|||
} |
|||
// 判断是不是拼团的,并且是提交订单 |
|||
if (this.teamId && action == 'submit') { |
|||
submitObj.action = 'buy'; |
|||
submitObj.item_id = this.goods[0].item_id; |
|||
submitObj.delivery_type = this.goods[0].delivery_type; |
|||
submitObj.count = this.goods[0].num; |
|||
submitObj.goods_id = this.goods[0].goods_id |
|||
submitObj.team_id = this.foundId; |
|||
} |
|||
|
|||
if (action == 'submit') { |
|||
// 拿第一个店铺的 delivery_type 类型,虚拟商品不能加入购物车所以不用考虑会虚拟商品和实物商品出错 |
|||
submitObj.delivery_type = this.shopLists[0]?.delivery_type || 0 |
|||
submitObj.remark = userRemark.length ? JSON.stringify(userRemark) : '' |
|||
submitObj.invoice = JSON.stringify(this.invoiceArr) |
|||
} |
|||
|
|||
let { |
|||
data: orderData, |
|||
code: orderCode, |
|||
msg: orderMsg |
|||
} = action == 'info' ? this.teamId ? await teamKaiTuan(submitObj) : await orderInfo(submitObj) : |
|||
this.teamId ? await teamKaiTuan(submitObj) : await orderBuy(submitObj) |
|||
// 如果是info的话说明是获取订单数据,?用拼团的id判断当前是否是拼团,是的话调用teamKaiTuan,不是的话调用普通订单获取orderInfo |
|||
// :判断是不是拼团订单,是的话调用teamKaiTuan提交拼团订单,否则就是普通订单orderBuy |
|||
|
|||
if(orderMsg == '抱歉,库存不足') { |
|||
setTimeout(() => { |
|||
uni.navigateBack(1) |
|||
},500) |
|||
} |
|||
|
|||
if (orderCode !== 1) return this.showLoading = false |
|||
|
|||
if (action == 'info') { |
|||
const { |
|||
shop, |
|||
address |
|||
} = orderData |
|||
this.address = address |
|||
this.shopLists = shop |
|||
this.orderInfo = orderData |
|||
this.$nextTick(() => { |
|||
this.isFirstLoading = false |
|||
}); |
|||
} else if (action == 'submit') { |
|||
this.showLoading = false |
|||
|
|||
let order_id = '' |
|||
const type = orderData.type |
|||
|
|||
switch(type) { |
|||
case 'order': order_id = orderData.order_id; break; |
|||
case 'trade': order_id = orderData.trade_id; break; |
|||
} |
|||
|
|||
uni.$on('payment', params => { |
|||
setTimeout(() => { |
|||
if (params.result) { |
|||
console.log('Jason', this) |
|||
this.$Router.replace({ |
|||
path: '/pages/pay_result/pay_result', |
|||
query: { |
|||
id: params.order_id, |
|||
from: params.from |
|||
} |
|||
}) |
|||
} else { |
|||
this.$Router.replace({ |
|||
path: '/bundle/pages/user_order/user_order' |
|||
}) |
|||
} |
|||
}, 1 * 1000) |
|||
}) |
|||
|
|||
uni.navigateTo({ |
|||
url: `/pages/payment/payment?from=${type}&order_id=${order_id}` |
|||
}) |
|||
} |
|||
} |
|||
}, |
|||
watch: { |
|||
address(val) { |
|||
this.addressId = val.id |
|||
} |
|||
} |
|||
|
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
.confirm-order { |
|||
.confirm-con { |
|||
overflow: hidden; |
|||
padding-bottom: calc(120rpx + env(safe-area-inset-bottom)); |
|||
|
|||
.address { |
|||
min-height: 164rpx; |
|||
padding: 0 24rpx; |
|||
border-radius: 14rpx; |
|||
margin: 20rpx 20rpx 0; |
|||
} |
|||
|
|||
.img-line { |
|||
height: 1.5px; |
|||
width: 100%; |
|||
display: block; |
|||
} |
|||
} |
|||
|
|||
.price { |
|||
padding: 28rpx 20rpx; |
|||
|
|||
.item:not(:last-of-type) { |
|||
margin-bottom: 20rpx; |
|||
} |
|||
} |
|||
|
|||
.contain { |
|||
border-radius: 14rpx; |
|||
margin: 20rpx 20rpx 0; |
|||
background-color: #fff; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.radio-group { |
|||
display: block; |
|||
} |
|||
|
|||
.footer { |
|||
position: fixed; |
|||
bottom: 0; |
|||
left: 0; |
|||
right: 0; |
|||
z-index: 99; |
|||
height: 100rpx; |
|||
padding: 0 30rpx; |
|||
box-sizing: content-box; |
|||
padding-bottom: env(safe-area-inset-bottom); |
|||
|
|||
.btn { |
|||
background: linear-gradient(90deg, rgba(249, 95, 47, 1) 0%, rgba(255, 44, 60, 1) 100%); |
|||
padding: 0 50rpx; |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
// .confirm-order .van-cell:after { |
|||
// border: none; |
|||
// } |
|||
|
|||
// .goods .shop-icon { |
|||
// width: 40rpx; |
|||
// height: 40rpx; |
|||
// } |
|||
|
|||
// .pop-title { |
|||
// height: 100rpx; |
|||
// border-bottom: 1rpx solid #F2F2F2; |
|||
// } |
|||
|
|||
// .pop-title .title { |
|||
// margin-left: 30rpx; |
|||
// font-size: 34rpx; |
|||
// font-weight: bold; |
|||
// line-height: 36rpx; |
|||
// } |
|||
</style> |
|||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.2 KiB |