|
@@ -6,7 +6,7 @@
|
|
|
import Taro, { useRouter } from '@tarojs/taro'
|
|
import Taro, { useRouter } from '@tarojs/taro'
|
|
|
import { useState, useEffect } from 'react'
|
|
import { useState, useEffect } from 'react'
|
|
|
import { View, Text } from '@tarojs/components'
|
|
import { View, Text } from '@tarojs/components'
|
|
|
-import { useQuery, useMutation } from '@tanstack/react-query'
|
|
|
|
|
|
|
+import { useMutation } from '@tanstack/react-query'
|
|
|
import { Button } from '@/components/ui/button'
|
|
import { Button } from '@/components/ui/button'
|
|
|
import { Navbar } from '@/components/ui/navbar'
|
|
import { Navbar } from '@/components/ui/navbar'
|
|
|
import {
|
|
import {
|
|
@@ -33,6 +33,16 @@ interface CreditBalanceData {
|
|
|
isEnabled: boolean
|
|
isEnabled: boolean
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// API响应可能包含额外字段,转换函数提取所需字段并转换类型
|
|
|
|
|
+function transformCreditBalanceData(data: any): CreditBalanceData {
|
|
|
|
|
+ return {
|
|
|
|
|
+ totalLimit: data.totalLimit,
|
|
|
|
|
+ usedAmount: data.usedAmount,
|
|
|
|
|
+ availableAmount: data.availableAmount,
|
|
|
|
|
+ isEnabled: data.isEnabled === 1 || data.isEnabled > 0
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
enum PaymentMethod {
|
|
enum PaymentMethod {
|
|
|
WECHAT = 'wechat',
|
|
WECHAT = 'wechat',
|
|
|
CREDIT = 'credit'
|
|
CREDIT = 'credit'
|
|
@@ -44,7 +54,6 @@ const PaymentPage = () => {
|
|
|
const [errorMessage, setErrorMessage] = useState('')
|
|
const [errorMessage, setErrorMessage] = useState('')
|
|
|
const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<PaymentMethod>(PaymentMethod.WECHAT)
|
|
const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<PaymentMethod>(PaymentMethod.WECHAT)
|
|
|
const [creditBalance, setCreditBalance] = useState<CreditBalanceData | null>(null)
|
|
const [creditBalance, setCreditBalance] = useState<CreditBalanceData | null>(null)
|
|
|
- const [isCreditBalanceLoading, setIsCreditBalanceLoading] = useState(false)
|
|
|
|
|
|
|
|
|
|
// 使用useRouter钩子获取路由参数
|
|
// 使用useRouter钩子获取路由参数
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
@@ -55,13 +64,12 @@ const PaymentPage = () => {
|
|
|
|
|
|
|
|
// 获取用户额度信息
|
|
// 获取用户额度信息
|
|
|
const fetchCreditBalance = async () => {
|
|
const fetchCreditBalance = async () => {
|
|
|
- setIsCreditBalanceLoading(true)
|
|
|
|
|
try {
|
|
try {
|
|
|
const response = await creditBalanceClient.me.$get({})
|
|
const response = await creditBalanceClient.me.$get({})
|
|
|
|
|
|
|
|
if (response.status === 200) {
|
|
if (response.status === 200) {
|
|
|
const balanceData = await response.json()
|
|
const balanceData = await response.json()
|
|
|
- setCreditBalance(balanceData)
|
|
|
|
|
|
|
+ setCreditBalance(transformCreditBalanceData(balanceData))
|
|
|
} else if (response.status === 404) {
|
|
} else if (response.status === 404) {
|
|
|
// 用户没有额度记录,创建默认额度
|
|
// 用户没有额度记录,创建默认额度
|
|
|
setCreditBalance({
|
|
setCreditBalance({
|
|
@@ -87,8 +95,6 @@ const PaymentPage = () => {
|
|
|
availableAmount: 0,
|
|
availableAmount: 0,
|
|
|
isEnabled: false
|
|
isEnabled: false
|
|
|
})
|
|
})
|
|
|
- } finally {
|
|
|
|
|
- setIsCreditBalanceLoading(false)
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -101,9 +107,7 @@ const PaymentPage = () => {
|
|
|
// 获取微信支付参数(手动触发)
|
|
// 获取微信支付参数(手动触发)
|
|
|
const {
|
|
const {
|
|
|
mutateAsync: fetchWechatPaymentParams,
|
|
mutateAsync: fetchWechatPaymentParams,
|
|
|
- data: paymentData,
|
|
|
|
|
- isLoading: paymentLoading,
|
|
|
|
|
- error: paymentError
|
|
|
|
|
|
|
+ isPending: paymentLoading
|
|
|
} = useMutation({
|
|
} = useMutation({
|
|
|
mutationFn: async () => {
|
|
mutationFn: async () => {
|
|
|
if (!orderId) throw new Error('订单ID无效')
|
|
if (!orderId) throw new Error('订单ID无效')
|
|
@@ -185,7 +189,7 @@ const PaymentPage = () => {
|
|
|
|
|
|
|
|
// 更新本地额度信息
|
|
// 更新本地额度信息
|
|
|
const updatedBalance = await response.json()
|
|
const updatedBalance = await response.json()
|
|
|
- setCreditBalance(updatedBalance)
|
|
|
|
|
|
|
+ setCreditBalance(transformCreditBalanceData(updatedBalance))
|
|
|
|
|
|
|
|
// 跳转到支付成功页面
|
|
// 跳转到支付成功页面
|
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|