This commit is contained in:
2026-02-28 14:50:21 +08:00
parent 4db033c557
commit 37c18be7c2
4 changed files with 92 additions and 54 deletions

View File

@@ -365,7 +365,6 @@
"useThrottleFn": true,
"useThrottledRefHistory": true,
"useTimeAgo": true,
"useTimeAgoIntl": true,
"useTimeout": true,
"useTimeoutFn": true,
"useTimeoutPoll": true,

1
auto-imports.d.ts vendored
View File

@@ -815,7 +815,6 @@ declare module 'vue' {
readonly useThrottleFn: UnwrapRef<typeof import('@vueuse/core')['useThrottleFn']>
readonly useThrottledRefHistory: UnwrapRef<typeof import('@vueuse/core')['useThrottledRefHistory']>
readonly useTimeAgo: UnwrapRef<typeof import('@vueuse/core')['useTimeAgo']>
readonly useTimeAgoIntl: UnwrapRef<typeof import('@vueuse/core')['useTimeAgoIntl']>
readonly useTimeout: UnwrapRef<typeof import('@vueuse/core')['useTimeout']>
readonly useTimeoutFn: UnwrapRef<typeof import('@vueuse/core')['useTimeoutFn']>
readonly useTimeoutPoll: UnwrapRef<typeof import('@vueuse/core')['useTimeoutPoll']>

View File

@@ -1,9 +1,9 @@
<!DOCTYPE html>
<!doctype html>
<html lang="">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>天远数据</title>
</head>
<body>

View File

@@ -26,8 +26,8 @@
</div>
</div>
<!-- 充值优惠提示 -->
<div class="recharge-benefit-alert">
<!-- 充值提示赠送开启时显示充值优惠关闭时显示 API 商店充值提示 -->
<div class="recharge-benefit-alert" v-if="rechargeConfig.recharge_bonus_enabled">
<el-alert
title="充值优惠"
description="充值满1000元即可享受商务洽谈优惠获得专属服务支持"
@@ -50,6 +50,28 @@
</template>
</el-alert>
</div>
<div class="recharge-benefit-alert" v-else-if="rechargeConfig.api_store_recharge_tip">
<el-alert
title="API商店充值提示"
type="info"
:closable="false"
show-icon
>
<template #default>
<div class="benefit-content">
{{ rechargeConfig.api_store_recharge_tip }}
<el-button
type="primary"
size="small"
@click="showBusinessConsultation = true"
class="consultation-btn"
>
商务洽谈
</el-button>
</div>
</template>
</el-alert>
</div>
<!-- 余额状态提示 -->
<div v-if="walletInfo.is_arrears" class="balance-alert arrears-alert">
@@ -163,21 +185,21 @@
<h4 class="preset-title">选择充值金额</h4>
<div class="preset-amounts-grid">
<div
v-for="bonus in rechargeConfig.alipay_recharge_bonus"
:key="bonus.recharge_amount"
v-for="item in presetAmountOptions"
:key="item.recharge_amount"
class="preset-amount-card"
:class="{ active: selectedPresetAmount === bonus.recharge_amount }"
@click="selectPresetAmount(bonus.recharge_amount)"
:class="{ active: selectedPresetAmount === item.recharge_amount }"
@click="selectPresetAmount(item.recharge_amount)"
>
<div class="preset-amount-main">
<div class="preset-amount-value">¥{{ formatPrice(bonus.recharge_amount) }}</div>
<div class="preset-bonus-info">
<div class="preset-amount-value">¥{{ formatPrice(item.recharge_amount) }}</div>
<div v-if="rechargeConfig.recharge_bonus_enabled && item.bonus_amount > 0" class="preset-bonus-info">
<span class="bonus-label">赠送</span>
<span class="bonus-amount">¥{{ formatPrice(bonus.bonus_amount) }}</span>
<span class="bonus-amount">¥{{ formatPrice(item.bonus_amount) }}</span>
</div>
</div>
<div class="preset-amount-total">
实到账¥{{ formatPrice(bonus.recharge_amount + bonus.bonus_amount) }}
实到账¥{{ formatPrice(item.recharge_amount + (rechargeConfig.recharge_bonus_enabled ? item.bonus_amount : 0)) }}
</div>
</div>
@@ -189,7 +211,7 @@
>
<div class="preset-amount-main">
<div class="preset-amount-value">自定义金额</div>
<div class="preset-bonus-info">
<div v-if="rechargeConfig.recharge_bonus_enabled" class="preset-bonus-info">
<span class="bonus-label">赠送</span>
<span class="bonus-amount">{{ getCustomBonusText() }}</span>
</div>
@@ -219,8 +241,8 @@
</el-input>
<div class="form-tip">最低充值金额¥{{ rechargeConfig.min_amount }}最多支持两位小数</div>
<!-- 显示赠送信息 -->
<div v-if="wechatForm.amount && getCurrentBonusAmount() > 0" class="bonus-info">
<!-- 赠送开启时显示赠送信息 -->
<div v-if="rechargeConfig.recharge_bonus_enabled && wechatForm.amount && getCurrentBonusAmount() > 0" class="bonus-info">
<el-alert
:title="`充值 ¥${wechatForm.amount} 可享受赠送 ¥${formatPrice(getCurrentBonusAmount())}`"
type="success"
@@ -261,21 +283,21 @@
<h4 class="preset-title">选择充值金额</h4>
<div class="preset-amounts-grid">
<div
v-for="bonus in rechargeConfig.alipay_recharge_bonus"
:key="bonus.recharge_amount"
v-for="item in presetAmountOptions"
:key="item.recharge_amount"
class="preset-amount-card"
:class="{ active: selectedPresetAmount === bonus.recharge_amount }"
@click="selectPresetAmount(bonus.recharge_amount)"
:class="{ active: selectedPresetAmount === item.recharge_amount }"
@click="selectPresetAmount(item.recharge_amount)"
>
<div class="preset-amount-main">
<div class="preset-amount-value">¥{{ formatPrice(bonus.recharge_amount) }}</div>
<div class="preset-bonus-info">
<div class="preset-amount-value">¥{{ formatPrice(item.recharge_amount) }}</div>
<div v-if="rechargeConfig.recharge_bonus_enabled && item.bonus_amount > 0" class="preset-bonus-info">
<span class="bonus-label">赠送</span>
<span class="bonus-amount">¥{{ formatPrice(bonus.bonus_amount) }}</span>
<span class="bonus-amount">¥{{ formatPrice(item.bonus_amount) }}</span>
</div>
</div>
<div class="preset-amount-total">
实到账¥{{ formatPrice(bonus.recharge_amount + bonus.bonus_amount) }}
实到账¥{{ formatPrice(item.recharge_amount + (rechargeConfig.recharge_bonus_enabled ? item.bonus_amount : 0)) }}
</div>
</div>
@@ -287,7 +309,7 @@
>
<div class="preset-amount-main">
<div class="preset-amount-value">自定义金额</div>
<div class="preset-bonus-info">
<div v-if="rechargeConfig.recharge_bonus_enabled" class="preset-bonus-info">
<span class="bonus-label">赠送</span>
<span class="bonus-amount">{{ getCustomBonusText() }}</span>
</div>
@@ -317,8 +339,8 @@
</el-input>
<div class="form-tip">最低充值金额¥{{ rechargeConfig.min_amount }}最多支持两位小数</div>
<!-- 显示赠送信息 -->
<div v-if="alipayForm.amount && getCurrentBonusAmount() > 0" class="bonus-info">
<!-- 赠送开启时显示赠送信息 -->
<div v-if="rechargeConfig.recharge_bonus_enabled && alipayForm.amount && getCurrentBonusAmount() > 0" class="bonus-info">
<el-alert
:title="`充值 ¥${alipayForm.amount} 可享受赠送 ¥${formatPrice(getCurrentBonusAmount())}`"
type="success"
@@ -427,6 +449,7 @@
</template>
<script setup>
import { computed } from 'vue'
import { financeApi } from '@/api'
import BusinessConsultationDialog from '@/components/common/BusinessConsultationDialog.vue'
import { useCertification } from '@/composables/useCertification'
@@ -468,13 +491,29 @@ const walletInfo = ref({
is_low_balance: false,
})
// 充值配置
// 充值配置(含赠送开关与 API 商店充值提示)
const rechargeConfig = ref({
min_amount: '1.00',
max_amount: '100000.00',
recharge_bonus_enabled: false,
api_store_recharge_tip: '',
alipay_recharge_bonus: []
})
// 关闭赠送时的预设金额(仅展示金额,无赠送)
const PRESET_AMOUNTS_NO_BONUS = [1000, 5000, 10000]
// 预设金额选项:开启赠送用配置规则,关闭赠送用固定金额列表
const presetAmountOptions = computed(() => {
if (rechargeConfig.value.recharge_bonus_enabled && rechargeConfig.value.alipay_recharge_bonus?.length) {
return rechargeConfig.value.alipay_recharge_bonus.map((b) => ({
recharge_amount: b.recharge_amount,
bonus_amount: b.bonus_amount ?? 0
}))
}
return PRESET_AMOUNTS_NO_BONUS.map((amount) => ({ recharge_amount: amount, bonus_amount: 0 }))
})
// 对公转账信息
const transferInfo = ref({
bankName: '中国银行股份有限公司海口美苑路支行',
@@ -647,17 +686,21 @@ const loadRechargeConfig = async () => {
// 直接调用API不需要认证保护
const response = await financeApi.getRechargeConfig()
if (response && response.data) {
rechargeConfig.value = response.data || {
min_amount: '50.00',
max_amount: '100000.00',
alipay_recharge_bonus: []
rechargeConfig.value = {
...response.data,
min_amount: response.data?.min_amount ?? '50.00',
max_amount: response.data?.max_amount ?? '100000.00',
recharge_bonus_enabled: response.data?.recharge_bonus_enabled ?? false,
api_store_recharge_tip: response.data?.api_store_recharge_tip ?? '',
alipay_recharge_bonus: response.data?.alipay_recharge_bonus ?? []
}
// 设置默认选中的预设金额(选择第一个赠送规则
if (rechargeConfig.value.alipay_recharge_bonus && rechargeConfig.value.alipay_recharge_bonus.length > 0) {
const firstBonus = rechargeConfig.value.alipay_recharge_bonus[0]
selectedPresetAmount.value = firstBonus.recharge_amount
const amountStr = firstBonus.recharge_amount.toString()
// 设置默认选中的预设金额:有赠送规则选第一条,否则选第一个预设金额(如 1000
const options = presetAmountOptions.value
if (options && options.length > 0) {
const first = options[0]
selectedPresetAmount.value = first.recharge_amount
const amountStr = first.recharge_amount.toString()
alipayForm.amount = amountStr
wechatForm.amount = amountStr
}
@@ -734,16 +777,15 @@ const selectCustomAmount = () => {
wechatForm.amount = '' // 清空微信金额输入框
}
// 根据充值金额获取赠送金额
// 根据充值金额获取赠送金额(关闭赠送时恒为 0
const getBonusAmount = (rechargeAmount) => {
if (!rechargeAmount || !rechargeConfig.value.alipay_recharge_bonus) {
if (!rechargeConfig.value.recharge_bonus_enabled || !rechargeAmount || !rechargeConfig.value.alipay_recharge_bonus?.length) {
return 0
}
const amount = parseFloat(rechargeAmount)
const bonusRules = rechargeConfig.value.alipay_recharge_bonus
// 按充值金额从高到低排序,找到第一个匹配的赠送规则
for (let i = bonusRules.length - 1; i >= 0; i--) {
const rule = bonusRules[i]
if (amount >= rule.recharge_amount) {
@@ -754,15 +796,14 @@ const getBonusAmount = (rechargeAmount) => {
return 0
}
// 获取当前预设金额的赠送金额
// 获取当前预设金额的赠送金额(关闭赠送时恒为 0
const getCurrentBonusAmount = () => {
if (!rechargeConfig.value.recharge_bonus_enabled) return 0
if (selectedPresetAmount.value === 'custom') {
// 根据当前选择的充值方式获取金额
const currentAmount = selectedMethod.value === 'wechat' ? wechatForm.amount : alipayForm.amount
return getBonusAmount(currentAmount)
}
const bonus = rechargeConfig.value.alipay_recharge_bonus.find(
const bonus = rechargeConfig.value.alipay_recharge_bonus?.find(
(item) => item.recharge_amount === selectedPresetAmount.value
)
return bonus ? parseFloat(bonus.bonus_amount) : 0
@@ -770,26 +811,25 @@ const getCurrentBonusAmount = () => {
// 获取自定义金额的赠送文本
const getCustomBonusText = () => {
if (!rechargeConfig.value.recharge_bonus_enabled) return '暂无'
if (selectedPresetAmount.value === 'custom') {
return '根据实际充值金额计算'
}
return '0.00'
}
// 获取自定义金额的总到账金额
// 获取自定义金额的总到账金额(关闭赠送时仅为本金)
const getCustomTotalAmount = () => {
if (selectedPresetAmount.value === 'custom') {
// 根据当前选择的充值方式获取金额
const currentAmount = selectedMethod.value === 'wechat' ? wechatForm.amount : alipayForm.amount
const amount = parseFloat(currentAmount || 0)
const bonus = getBonusAmount(amount)
return formatPrice(amount + bonus)
}
const bonus = rechargeConfig.value.alipay_recharge_bonus.find(
(item) => item.recharge_amount === selectedPresetAmount.value
)
return bonus ? formatPrice(parseFloat(bonus.recharge_amount) + parseFloat(bonus.bonus_amount)) : '0.00'
const item = presetAmountOptions.value.find((i) => i.recharge_amount === selectedPresetAmount.value)
if (!item) return '0.00'
const bonus = rechargeConfig.value.recharge_bonus_enabled ? item.bonus_amount : 0
return formatPrice(parseFloat(item.recharge_amount) + parseFloat(bonus))
}
// 支付宝充值