Files
cashier_wx/userPackage/confirm-order/confirm-order.vue
2025-12-20 14:41:46 +08:00

356 lines
7.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="min-page bg-f7 u-font-28 color-333 u-p-30">
<view class="info">
<view class="goods u-flex u-col-center u-p-t-22 u-p-b-22 ">
<view class="img-box">
<up-image width="158rpx" height="158rpx" radius="14rpx" :src="item.goodsImg"></up-image>
<view class="tag" v-if="item.tieredDiscount&&item.tieredDiscount.length>0">阶梯优惠</view>
</view>
<view class=" u-flex-1 u-p-l-16 u-flex u-row-between u-col-center">
<view>
<view class="font-bold u-line-2 u-font-32">{{item.packageName}}</view>
<view style="max-width: 336rpx;" class="u-line-1 u-m-t-10 color-666">{{item.description}}</view>
</view>
<view class="u-p-l-10 ">
<!-- <view class="color-333 no-wrap">
数量{{item.number}}
</view> -->
<view class=" font-bold price ">
<text class="u-font-26"> ¥</text>
<text class="u-font-40">{{item.price}}</text>
</view>
<view class=" old-price">
¥{{item.originPrice}}
</view>
</view>
</view>
</view>
<view class="shop ">
<view class="u-flex">
<text style="min-width: 180rpx;" class="color-666">可核销门店</text>
<text>{{item.shopName}}</text>
</view>
<view class="u-m-t-32 u-flex">
<text style="min-width: 180rpx;" class="color-666">门店地址</text>
<text>{{item.shopAddress}}</text>
</view>
</view>
<view class="u-m-t-32 up-border-top u-p-t-28 u-p-b-28">
<view class="u-flex u-row-between u-p-t-16 u-p-b-16">
<text class="u-font-32 font-bold">支付方式</text>
<text class="">微信支付</text>
</view>
</view>
</view>
<view class="desc" v-if="item.tieredDiscount&&item.tieredDiscount.length>0">
<view class="u-flex u-row-between ">
<view class="name">分享说明</view>
<view class="u-flex color-666" @click="showDesc=!showDesc" style="align-items: baseline;">
<text class="u-m-r-18">{{showDesc?'收起':'展开'}}</text>
<view class="guodu" :class="{rotate:!showDesc}">
<up-icon name="arrow-down" bold></up-icon>
</view>
</view>
</view>
<template v-if="showDesc">
<view class="u-m-t-26 text-center table" v-if="item.tieredDiscount">
<view class="u-flex header color-666">
<view class="u-flex-1 u-p-t-32 u-p-b-32">分享人数</view>
<view class="u-flex-1 u-p-t-32 u-p-b-32">购买价格</view>
</view>
<view class="u-flex row" v-for="(step,index) in item.tieredDiscount" :key="index">
<view class="u-flex-1 u-p-t-32 u-p-b-32">{{step.peopleNum}}</view>
<view class="u-flex-1 u-p-t-32 u-p-b-32">¥{{step.price}}</view>
</view>
</view>
<view class="u-m-t-26">
<view>
分享期限小时{{item.expireHours}}
</view>
<view class="u-m-t-10">
规定期限内的助力才会被计入
</view>
<view class="u-m-t-40">
如何才是分享成功被分享人只需要点击助力提示助力成功后即可
</view>
</view>
</template>
</view>
<view style="height: 100px;"></view>
<view class="u-flex bottom">
<view>
<text class="color-666">实付</text>
<text class="price">¥{{totalPayPrice}}</text>
</view>
<view class="btn" @click="payExchange">去支付</view>
</view>
</view>
</template>
<script setup>
import * as Api from '@/common/api/market/package.js'
import {
pay
} from '@/utils/pay.js'
import {
getOpenId
} from '@/utils/uniapp.js'
const imgs = {
bg: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/1/d21f2dfd7bec44618f2d5e4b88372b08.png',
pin: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/2/3947892924dd481782331513aff00eb3.png'
}
const showDesc = ref(true)
const item = reactive({})
onShow(() => {
const data = uni.getStorageSync('group_buying_order')
data.goodsImg = data.images[0]
Object.assign(item, data)
console.log(item)
})
function dingyue() {
return new Promise((revlove, reject) => {
uni.requestSubscribeMessage({
tmplIds: ['JGPAGmqcPEgWB6mvAl0SC5cMqr5H5Qjcim8JCpHAZd0',
'F4OyUhe_ZQ9BR731jlkaN2QXAUaA3HBZuUeVPfraSz0'
],
success(res) {},
complete() {
revlove()
}
})
})
}
async function payExchange() {
// await dingyue();
uni.showLoading({
title: '支付中……'
})
let paramId = item.paramId
if (!paramId) {
paramId = await Api.createOrder({
packageId: item.id,
shopId: item.shopId,
})
}
if (!paramId) {
return uni.showToast({
title: '创建订单失败',
icon: 'none'
})
}
const openId = await getOpenId()
uni.hideLoading()
if (openId) {
Api.ppOrderPay({
paramId,
shopId: item.shopId,
number: item.number,
openId
}).then(orderRes => {
pay(orderRes.payInfo).then(res => {
console.log(res)
if (res) {
uni.redirectTo({
url: '/userPackage/order/detail?orderId=' + paramId + '&shopId=' +
item.shopId
})
} else {
uni.showToast({
title: '购买失败',
icon: 'none'
})
}
})
})
} else {
uni.showToast({
title: '鉴权失败,开团失败',
icon: 'none'
})
}
}
import {
BigNumber
} from "bignumber.js";
const totalPrice = computed(() => {
if (!item.groupPrice) {
return 0;
}
return BigNumber(item.number).times(item.originalPrice).toNumber()
})
const totalPayPrice = computed(() => {
if (!item.price) {
return 0;
}
return BigNumber(item.number).times(item.price).toNumber()
})
let shareItem = null
function share(item) {
shareItem = item
}
onShareAppMessage(() => {
console.log('onShareAppMessage')
console.log(shareItem)
const query = `groupOrderNo=${shareItem.groupOrderNo}&shopId=${shareItem.shopId}`
return wxShare({
title: shareItem.wareJson.wareName,
imageUrl: shareItem.goodsImg,
path: '/groupBuying/detail/index' + '?' + query,
query,
})
})
</script>
<style lang="scss" scoped>
.info {
border-radius: 16rpx;
background-color: #fff;
padding: 0 24rpx;
.goods {
background-color: #fff;
padding: 22rpx 0;
.pin {
width: 60rpx;
height: 38rpx;
}
.tuan-members {
padding: 0 16rpx 0 0;
border-radius: 0 6rpx 6rpx 0;
background: #4C2828;
color: #f5d9ad;
font-weight: 700;
}
.price {
color: #ed5a2e;
}
.old-price {
color: #666666;
text-decoration-line: line-through;
}
}
.u-font-48 {
font-size: 48rpx;
}
.shop {
padding: 16rpx 34rpx;
margin: 32rpx 30rpx;
background-color: #F8F8F8;
}
}
.bottom {
padding: 42rpx 28rpx 60rpx 28rpx;
background-color: #fff;
display: flex;
justify-content: space-between;
position: fixed;
left: 0;
bottom: 0;
right: 0;
.price {
color: #ed5a2e;
font-size: 32rpx;
font-weight: 700;
}
.btn {
padding: 14rpx 70rpx;
border-radius: 200rpx;
background: #E8AD7B;
font-size: 32rpx;
color: #fff;
}
}
.img-box {
position: relative;
.tag {
position: absolute;
left: 0;
top: 0;
background: #4C2828;
border-radius: 12rpx 0 16rpx 0;
color: #faeac6;
font-size: 24rpx;
font-weight: 700;
padding: 4rpx 12rpx;
}
}
.desc {
padding: 32rpx 46rpx;
background-color: #fff;
margin-top: 32rpx;
.name {
font-weight: 700;
font-size: 32rpx;
}
.table {
border: 2rpx solid #EDEDED;
border-radius: 8rpx;
margin: 0 52rpx;
.header {
background: #f8f8f88f;
}
.row {
border-top: 2rpx solid #EDEDED;
&:first-child {
border-top: none;
}
}
}
.rotate {
transform: rotate(-90deg);
}
}
</style>