2023-11-14 17:21:03 +08:00
|
|
|
|
<!--
|
|
|
|
|
@name: 付款弹窗
|
|
|
|
|
@author: kahu
|
|
|
|
|
@date: 2023-11-08 10:53
|
|
|
|
|
@description:index
|
|
|
|
|
@update: 2023-11-08 10:53
|
|
|
|
|
-->
|
|
|
|
|
<script setup>
|
|
|
|
|
import Popup from '@/components/Popup/index.vue';
|
|
|
|
|
import { ref, unref } from "vue";
|
|
|
|
|
import { payRows } from "./index.data";
|
|
|
|
|
import UvRadioGroup from "@/uni_modules/uv-radio/components/uv-radio-group/uv-radio-group.vue";
|
|
|
|
|
import UvRadio from "@/uni_modules/uv-radio/components/uv-radio/uv-radio.vue";
|
|
|
|
|
import { doPayment, PayType } from "@/utils/paymentUtils";
|
|
|
|
|
import { orderInfo as orderInfoRequest } from "@/api/order";
|
|
|
|
|
import { useInterface } from "@/hooks/useInterface";
|
|
|
|
|
import { useRouter } from "@/hooks/useRouter";
|
2024-02-08 21:01:37 +08:00
|
|
|
|
import {useMainStore} from "@/store/store";
|
2023-11-14 17:21:03 +08:00
|
|
|
|
|
|
|
|
|
const {toast} = useInterface()
|
|
|
|
|
const {push} = useRouter()
|
|
|
|
|
const emits = defineEmits(['confirm', 'close']);
|
2024-02-08 21:01:37 +08:00
|
|
|
|
const mainStore = useMainStore()
|
2023-11-14 17:21:03 +08:00
|
|
|
|
const popupRef = ref()
|
|
|
|
|
|
|
|
|
|
async function show(orderId) {
|
|
|
|
|
await doGetOrderDetail(orderId)
|
|
|
|
|
unref(popupRef).show()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function close() {
|
|
|
|
|
emits('close')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defineExpose({show})
|
|
|
|
|
|
|
|
|
|
const payType = ref(PayType["0"]) // 支付方式
|
|
|
|
|
|
|
|
|
|
const orderInfo = ref({}) // 订单信息
|
2024-02-08 21:01:37 +08:00
|
|
|
|
const zeroPrice = ref(false) // 本单金额是否为0
|
2023-11-14 17:21:03 +08:00
|
|
|
|
async function doGetOrderDetail(orderId) {
|
|
|
|
|
orderInfo.value = await orderInfoRequest({key: orderId});
|
2024-02-08 21:01:37 +08:00
|
|
|
|
if (orderInfo.value.totalPrice <= 0) {
|
|
|
|
|
payType.value = PayType["1"]
|
|
|
|
|
zeroPrice.value = true
|
|
|
|
|
toast({title: '支付金额为0.00,自动选择余额支付', icon: 'none', duration: 3000})
|
|
|
|
|
} else {
|
|
|
|
|
zeroPrice.value = false
|
|
|
|
|
}
|
2023-11-14 17:21:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const subLoading = ref(false)
|
|
|
|
|
|
|
|
|
|
async function handleSubmit() {
|
|
|
|
|
try {
|
|
|
|
|
subLoading.value = true
|
2024-02-08 21:01:37 +08:00
|
|
|
|
await doPayment({type: payType.value, payInfo: orderInfo.value,isGroup:orderInfo.value.campaignType===1})
|
2023-11-14 17:21:03 +08:00
|
|
|
|
subLoading.value = false
|
|
|
|
|
emits('confirm')
|
|
|
|
|
close()
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error(e)
|
2024-02-08 21:01:37 +08:00
|
|
|
|
push({url: '/pages/payStatus/index'}, {data: {type: 2}})
|
2023-11-14 17:21:03 +08:00
|
|
|
|
toast({title: '支付失败了'})
|
|
|
|
|
close()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<Popup
|
|
|
|
|
ref="popupRef"
|
|
|
|
|
title="支付"
|
|
|
|
|
@close="close"
|
|
|
|
|
>
|
|
|
|
|
<view class="pay-container">
|
|
|
|
|
<uv-radio-group
|
|
|
|
|
placement="column"
|
|
|
|
|
iconPlacement="right"
|
|
|
|
|
v-model="payType"
|
|
|
|
|
class="pay-box__inner flex flex-ai__center flex-jc__center flex-wrap"
|
|
|
|
|
shape="circle"
|
|
|
|
|
activeColor="#ec6e47"
|
|
|
|
|
>
|
|
|
|
|
<template
|
|
|
|
|
v-for="pay in payRows"
|
|
|
|
|
:key="pay.type"
|
|
|
|
|
>
|
|
|
|
|
<uv-radio
|
|
|
|
|
:name="pay.type"
|
2024-02-08 21:01:37 +08:00
|
|
|
|
:disabled="pay.disabled|| (pay.type===PayType['0']&&zeroPrice) || (mainStore.user.nowMoney===0 &&!zeroPrice&&pay.type===PayType['1'])"
|
2023-11-14 17:21:03 +08:00
|
|
|
|
>
|
|
|
|
|
<view class="pay-row flex flex-ai__center">
|
|
|
|
|
<image
|
|
|
|
|
class="icon"
|
|
|
|
|
:src="pay.icon"
|
|
|
|
|
/>
|
|
|
|
|
<view class="info">
|
2024-02-08 21:01:37 +08:00
|
|
|
|
<view class="label flex flex-nowrap flex-ai__end" style="white-space: nowrap">
|
2023-11-14 17:21:03 +08:00
|
|
|
|
{{ pay.label }}
|
2024-02-08 21:01:37 +08:00
|
|
|
|
<span v-if="pay.type===PayType['1']" style="font-size: 16rpx;white-space: nowrap;">
|
|
|
|
|
({{mainStore.user.nowMoney}}元)
|
|
|
|
|
</span>
|
2023-11-14 17:21:03 +08:00
|
|
|
|
</view>
|
|
|
|
|
<view>
|
|
|
|
|
{{ pay.eLabel }}
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</uv-radio>
|
|
|
|
|
</template>
|
|
|
|
|
</uv-radio-group>
|
|
|
|
|
<view
|
|
|
|
|
class="animation-button sub-button"
|
|
|
|
|
:class="{active:subLoading}"
|
|
|
|
|
@click="handleSubmit"
|
|
|
|
|
>
|
|
|
|
|
立即支付
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</Popup>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<style
|
|
|
|
|
scoped
|
|
|
|
|
lang="scss"
|
|
|
|
|
>
|
|
|
|
|
.pay-container {
|
|
|
|
|
@include usePadding(35, 0);
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
|
|
.pay-row {
|
|
|
|
|
|
|
|
|
|
@include usePadding(0, 20);
|
|
|
|
|
font-size: 20rpx;
|
|
|
|
|
color: $tips-color;
|
|
|
|
|
border-bottom: 1rpx solid #e5e5e5;
|
|
|
|
|
|
|
|
|
|
&:last-child {
|
|
|
|
|
border-bottom: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon {
|
|
|
|
|
width: 80rpx;
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
margin-right: 30rpx;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.info {
|
|
|
|
|
.label {
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
color: #333;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
:deep(.uv-radio) {
|
|
|
|
|
width: 100%;
|
|
|
|
|
transition: all .3s;
|
|
|
|
|
|
|
|
|
|
&:active {
|
|
|
|
|
scale: 1.1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.sub-button {
|
|
|
|
|
$button-height: 80rpx;
|
|
|
|
|
margin: 20rpx auto;
|
|
|
|
|
height: $button-height;
|
|
|
|
|
line-height: $button-height;
|
|
|
|
|
border-radius: $button-height;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|