优化支付配置启用规则

This commit is contained in:
yml
2026-06-06 23:43:57 +08:00
parent bb624acae7
commit 8ae76036a8
5 changed files with 85 additions and 27 deletions
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { computed, onMounted, ref } from 'vue'
import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import { CircleCheck, Coin, Loading, Lock, Money, Refresh, Tickets, Wallet as WalletIcon } from '@element-plus/icons-vue'
@@ -33,6 +33,7 @@ const activeRechargePayment = ref<PaymentOrder | null>(null)
const rechargeQRCodeURL = ref('')
const rechargeQRGenerating = ref(false)
const checkingRecharge = ref(false)
let rechargePollingTimer: number | null = null
const walletMetrics = computed(() => {
if (!account.value) {
@@ -64,6 +65,13 @@ const walletMetrics = computed(() => {
})
onMounted(loadWallet)
onBeforeUnmount(stopRechargePolling)
watch(rechargeDialogVisible, (visible) => {
if (!visible) {
stopRechargePolling()
}
})
async function loadWallet() {
loading.value = true
@@ -134,8 +142,10 @@ async function handleDevRecharge() {
await renderRechargeQRCode(payment)
if (payment.paid) {
ElMessage.success('充值成功')
rechargeDialogVisible.value = false
await loadWallet()
} else {
startRechargePolling()
ElMessage.success('测试支付单已创建')
}
} catch (error) {
@@ -145,27 +155,46 @@ async function handleDevRecharge() {
}
}
async function checkDevRechargeStatus() {
async function checkDevRechargeStatus(options: { silent?: boolean } = {}) {
if (!activeRechargePayment.value || checkingRecharge.value) return
const silent = options.silent === true
checkingRecharge.value = true
try {
const payment = await queryWalletRechargePayment(activeRechargePayment.value.id)
activeRechargePayment.value = payment
await renderRechargeQRCode(payment)
if (payment.paid) {
stopRechargePolling()
ElMessage.success('充值成功')
rechargeDialogVisible.value = false
await loadWallet()
} else {
ElMessage.info('支付暂未完成')
if (!silent) {
ElMessage.info('支付暂未完成')
}
}
} catch (error) {
ElMessage.error(readError(error, '查询支付状态失败'))
if (!silent) {
ElMessage.error(readError(error, '查询支付状态失败'))
}
} finally {
checkingRecharge.value = false
}
}
function startRechargePolling() {
stopRechargePolling()
rechargePollingTimer = window.setInterval(() => {
void checkDevRechargeStatus({ silent: true })
}, 2000)
}
function stopRechargePolling() {
if (!rechargePollingTimer) return
window.clearInterval(rechargePollingTimer)
rechargePollingTimer = null
}
function openRechargePayURL() {
const payURL = rechargePayURL()
if (!payURL) return