182 lines
3.8 KiB
Vue
182 lines
3.8 KiB
Vue
<template>
|
|
<nut-popup
|
|
position="bottom"
|
|
closeable
|
|
round
|
|
safe-area-inset-bottom
|
|
:close-on-click-overlay="false"
|
|
:style="{ height: 'auto' }"
|
|
:visible="isShowPay"
|
|
@click-close-icon="closePay"
|
|
>
|
|
<view class="div">
|
|
<view style="text-align: center">支付方式</view>
|
|
<nut-cell-group>
|
|
<nut-cell
|
|
v-if="payType === 'wx'"
|
|
title="微信支付"
|
|
desc="使用微信快捷支付"
|
|
is-link
|
|
@click="goPay()"
|
|
>
|
|
<template v-slot:icon>
|
|
<IconFont
|
|
size="30"
|
|
name="https://img11.360buyimg.com/imagetools/jfs/t1/137646/13/7132/1648/5f4c748bE43da8ddd/a3f06d51dcae7b60.png"
|
|
/>
|
|
</template>
|
|
</nut-cell>
|
|
<nut-cell
|
|
v-if="payType === 'jf'"
|
|
title="积分支付"
|
|
:desc="`剩余积分:${info.integral || 0}`"
|
|
is-link
|
|
@click="goPay()"
|
|
>
|
|
<template v-slot:icon>
|
|
<IconFont
|
|
size="30"
|
|
name="https://img11.360buyimg.com/imagetools/jfs/t1/137646/13/7132/1648/5f4c748bE43da8ddd/a3f06d51dcae7b60.png"
|
|
/>
|
|
</template>
|
|
</nut-cell>
|
|
</nut-cell-group>
|
|
</view>
|
|
</nut-popup>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { ref, watch } from "vue";
|
|
import { IconFont } from "@nutui/icons-vue-taro";
|
|
import Taro from "@tarojs/taro";
|
|
import { payOrder } from "@/api/order";
|
|
import { payJfOrder } from "@/api/goods";
|
|
import { getPersonalInfo } from "@/api/user";
|
|
|
|
const prop = defineProps({
|
|
isShowPay: {
|
|
required: true,
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
payType: {
|
|
required: true,
|
|
type: String,
|
|
default: "wx",
|
|
},
|
|
jfInfo: {
|
|
type: Object,
|
|
default: () => {
|
|
return {};
|
|
},
|
|
},
|
|
});
|
|
|
|
const emit = defineEmits(["closePay", "successPay"]);
|
|
|
|
const info = ref<{ integral?: any }>({});
|
|
|
|
watch(
|
|
() => prop.isShowPay,
|
|
() => {
|
|
getInfo();
|
|
}
|
|
);
|
|
|
|
const getInfo = async () => {
|
|
try {
|
|
const res = await getPersonalInfo();
|
|
info.value = res.data.data;
|
|
} catch (error) {
|
|
Taro.showToast({
|
|
title: error.msg,
|
|
icon: "none",
|
|
});
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
const goPay = async () => {
|
|
console.log(prop.jfInfo);
|
|
if (!prop.jfInfo)
|
|
return Taro.showToast({
|
|
title: "未获取到订单信息",
|
|
icon: "none",
|
|
});
|
|
if (prop.payType === "wx") {
|
|
try {
|
|
const { data } = await payOrder({
|
|
oid: prop.jfInfo.oid,
|
|
});
|
|
Taro.requestPayment({
|
|
timeStamp: data.data.timeStamp,
|
|
nonceStr: data.data.nonceStr,
|
|
package: data.data.package,
|
|
signType: data.data.signType,
|
|
paySign: data.data.paySign,
|
|
success: function () {
|
|
Taro.showToast({
|
|
title: "支付成功",
|
|
icon: "success",
|
|
duration: 2000,
|
|
});
|
|
Taro.navigateTo({
|
|
url: "/pages/hotGoods/hot_list/index",
|
|
});
|
|
},
|
|
fail: function () {
|
|
Taro.showToast({
|
|
title: "支付失败",
|
|
icon: "none",
|
|
duration: 2000,
|
|
});
|
|
},
|
|
});
|
|
emit("closePay", false);
|
|
} catch (e) {
|
|
Taro.showToast({
|
|
title: e.msg,
|
|
icon: "none",
|
|
});
|
|
throw e;
|
|
}
|
|
} else {
|
|
const res = await payJfOrder(prop.jfInfo);
|
|
Taro.showToast({
|
|
title: res.msg,
|
|
icon: "success",
|
|
duration: 2000,
|
|
});
|
|
Taro.navigateTo({
|
|
url: "/pages/users/order_list/index?type=0",
|
|
});
|
|
emit("closePay", false);
|
|
}
|
|
};
|
|
|
|
const closePay = () => {
|
|
Taro.showToast({
|
|
title: "取消支付",
|
|
icon: "none",
|
|
});
|
|
emit("closePay", false);
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.nut-popup {
|
|
.nut-popup__container {
|
|
border-radius: 10px;
|
|
}
|
|
}
|
|
|
|
.div {
|
|
padding: 20px;
|
|
// text-align: center;
|
|
|
|
.nut-cell {
|
|
align-items: center;
|
|
}
|
|
}
|
|
</style>
|