首页样式
This commit is contained in:
parent
e84f864229
commit
55b003c2bf
|
|
@ -138,8 +138,8 @@ export default {
|
||||||
pointDiff: '点差佣金',
|
pointDiff: '点差佣金',
|
||||||
service: '服务费',
|
service: '服务费',
|
||||||
risk: '风险金',
|
risk: '风险金',
|
||||||
profit: '头寸',
|
profit: '盈亏',
|
||||||
headPosition: '头寸',
|
headPosition: '盈亏',
|
||||||
available: '可用余额',
|
available: '可用余额',
|
||||||
},
|
},
|
||||||
table: {
|
table: {
|
||||||
|
|
|
||||||
|
|
@ -8,29 +8,9 @@
|
||||||
<div class="wallet-section">
|
<div class="wallet-section">
|
||||||
<div class="section-label">{{ t('withdraw.dialog.walletBalance') }}</div>
|
<div class="section-label">{{ t('withdraw.dialog.walletBalance') }}</div>
|
||||||
<div class="wallet-grid">
|
<div class="wallet-grid">
|
||||||
<div class="wallet-item">
|
<div v-for="(item, index) in walletItems" :key="index" class="wallet-item">
|
||||||
<span class="wallet-label">{{ t('withdraw.wallet.feeHandling') }}</span>
|
<span class="wallet-label">{{ item.label }}</span>
|
||||||
<span class="wallet-value">{{ walletInfo.commission_fee_handling || '0.00' }}</span>
|
<span class="wallet-value" :class="{ available: item.field === 'available' }">{{ item.value }}</span>
|
||||||
</div>
|
|
||||||
<div class="wallet-item">
|
|
||||||
<span class="wallet-label">{{ t('withdraw.wallet.pointDiff') }}</span>
|
|
||||||
<span class="wallet-value">{{ walletInfo.commission_point_diff || '0.00' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="wallet-item">
|
|
||||||
<span class="wallet-label">{{ t('withdraw.wallet.service') }}</span>
|
|
||||||
<span class="wallet-value">{{ walletInfo.service || '0.00' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="wallet-item" v-if="showRiskFee">
|
|
||||||
<span class="wallet-label">{{ t('withdraw.wallet.risk') }}</span>
|
|
||||||
<span class="wallet-value">{{ walletInfo.risk || '0.00' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="wallet-item">
|
|
||||||
<span class="wallet-label">{{ t('withdraw.wallet.profit') }}</span>
|
|
||||||
<span class="wallet-value">{{ walletInfo.closing_profit || '0.00' }}</span>
|
|
||||||
</div>
|
|
||||||
<div class="wallet-item" v-if="roleId >= 5">
|
|
||||||
<span class="wallet-label">{{ t('withdraw.wallet.available') }}</span>
|
|
||||||
<span class="wallet-value available">{{ availableBalance || '0.00' }}</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -248,7 +228,7 @@ const isAgent = computed(() => roleId >= 5)
|
||||||
// 当前货币类型(从渠道信息获取)
|
// 当前货币类型(从渠道信息获取)
|
||||||
const currentCurrency = computed(() => props.channelInfo?.currency?.symbol || '-')
|
const currentCurrency = computed(() => props.channelInfo?.currency?.symbol || '-')
|
||||||
|
|
||||||
// 计算可用余额 = amount - freeze - (手续费 + 点差 + 服务费 + 风险金 + 头寸)
|
// 计算可用余额 = amount - freeze - (手续费 + 点差 + 服务费 + 风险金 + 盈亏)
|
||||||
const availableBalance = computed(() => {
|
const availableBalance = computed(() => {
|
||||||
const amount = parseFloat(walletInfo.value.amount || '0')
|
const amount = parseFloat(walletInfo.value.amount || '0')
|
||||||
const freeze = parseFloat(walletInfo.value.freeze || '0')
|
const freeze = parseFloat(walletInfo.value.freeze || '0')
|
||||||
|
|
@ -259,7 +239,7 @@ const availableBalance = computed(() => {
|
||||||
Math.max(0, parseFloat(walletInfo.value.service || '0')) +
|
Math.max(0, parseFloat(walletInfo.value.service || '0')) +
|
||||||
Math.max(0, parseFloat(walletInfo.value.risk || '0')) +
|
Math.max(0, parseFloat(walletInfo.value.risk || '0')) +
|
||||||
Math.max(0, parseFloat(walletInfo.value.closing_profit || '0'))
|
Math.max(0, parseFloat(walletInfo.value.closing_profit || '0'))
|
||||||
return Math.max(0, amount - freeze - walletSum)
|
return Math.max(0, amount - walletSum)
|
||||||
})
|
})
|
||||||
|
|
||||||
// 计算钱包余额总和(用于验证输入金额上限)
|
// 计算钱包余额总和(用于验证输入金额上限)
|
||||||
|
|
@ -267,8 +247,9 @@ const availableBalance = computed(() => {
|
||||||
const totalWalletBalance = computed(() => {
|
const totalWalletBalance = computed(() => {
|
||||||
const amount = parseFloat(walletInfo.value.amount || '0')
|
const amount = parseFloat(walletInfo.value.amount || '0')
|
||||||
const freeze = parseFloat(walletInfo.value.freeze || '0')
|
const freeze = parseFloat(walletInfo.value.freeze || '0')
|
||||||
|
console.log('walletInfo.value:', walletInfo.value);
|
||||||
|
|
||||||
// 钱包余额总和(手续费 + 点差 + 服务费 + 风险金 + 头寸)
|
// 钱包余额总和(手续费 + 点差 + 服务费 + 风险金 + 盈亏)
|
||||||
const walletSum =
|
const walletSum =
|
||||||
parseFloat(walletInfo.value.commission_fee_handling || '0') +
|
parseFloat(walletInfo.value.commission_fee_handling || '0') +
|
||||||
parseFloat(walletInfo.value.commission_point_diff || '0') +
|
parseFloat(walletInfo.value.commission_point_diff || '0') +
|
||||||
|
|
@ -279,49 +260,71 @@ const totalWalletBalance = computed(() => {
|
||||||
if (roleId >= 5) {
|
if (roleId >= 5) {
|
||||||
// roleId >= 5 时,总余额包含可用余额
|
// roleId >= 5 时,总余额包含可用余额
|
||||||
// availableBalance = amount - freeze - walletSum
|
// availableBalance = amount - freeze - walletSum
|
||||||
const availableBal = Math.max(0, amount - freeze - walletSum)
|
const availableBal = Math.max(0, amount - walletSum)
|
||||||
return walletSum + availableBal
|
return walletSum + availableBal
|
||||||
}
|
}
|
||||||
return walletSum
|
return walletSum
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
// 根据角色显示对应的费用项
|
|
||||||
const showRiskFee = computed(() => [1].includes(roleId))
|
|
||||||
|
|
||||||
// 费用项顺序
|
|
||||||
const feeOrder = computed(() => {
|
|
||||||
const orders: Record<number, string[]> = {
|
|
||||||
1: ['手续费', '点差', '服务费', '风险金', '头寸', '可用余额'], // 平台
|
|
||||||
2: ['手续费', '点差', '服务费', '可用余额'], // 承包商
|
|
||||||
3: ['手续费', '点差', '服务费', '头寸', '可用余额'], // 特殊做市商
|
|
||||||
4: ['手续费', '点差', '服务费', '头寸', '可用余额'], // 普通做市商
|
|
||||||
5: ['手续费', '点差', '可用余额'], // 代理
|
|
||||||
6: ['手续费', '点差', '可用余额'], // 用户
|
|
||||||
}
|
|
||||||
return orders[roleId] ?? orders[6] ?? []
|
|
||||||
})
|
|
||||||
|
|
||||||
// 费用项对应的字段
|
|
||||||
const feeFieldMap: Record<string, keyof WalletInfo | 'available'> = {
|
|
||||||
'手续费': 'commission_fee_handling',
|
|
||||||
'点差': 'commission_point_diff',
|
|
||||||
'服务费': 'service',
|
|
||||||
'风险金': 'risk',
|
|
||||||
'头寸': 'closing_profit',
|
|
||||||
'可用余额': 'available', // 特殊处理,用 computed 计算
|
|
||||||
}
|
|
||||||
|
|
||||||
// 费用项标签映射
|
// 费用项标签映射
|
||||||
const feeLabelMap: Record<string, string> = {
|
const feeLabelMap: Record<string, string> = {
|
||||||
'手续费': '手续费佣金',
|
'手续费': '手续费佣金',
|
||||||
'点差': '点差佣金',
|
'点差': '点差佣金',
|
||||||
'服务费': '服务费',
|
'服务费': '服务费',
|
||||||
'风险金': '风险金',
|
'风险金': '风险金',
|
||||||
'头寸': '头寸',
|
'盈亏': '盈亏',
|
||||||
'可用余额': '可用余额',
|
'可用余额': '可用余额',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 费用项对应的字段
|
||||||
|
const feeFieldMap: Record<string, keyof WalletInfo | 'available'> = {
|
||||||
|
'手续费': 'commission_fee_handling',
|
||||||
|
'点差': 'commission_point_diff',
|
||||||
|
'服务费': 'service',
|
||||||
|
'风险金': 'risk',
|
||||||
|
'盈亏': 'closing_profit',
|
||||||
|
'可用余额': 'available', // 特殊处理,用 computed 计算
|
||||||
|
}
|
||||||
|
|
||||||
|
// 费用项顺序
|
||||||
|
const feeOrder = computed(() => {
|
||||||
|
const orders: Record<number, string[]> = {
|
||||||
|
1: ['手续费', '点差', '服务费', '风险金', '盈亏', '可用余额'], // 平台
|
||||||
|
2: ['手续费', '点差', '服务费', '可用余额'], // 承包商
|
||||||
|
3: ['手续费', '点差', '服务费', '盈亏', '可用余额'], // 特殊做市商
|
||||||
|
4: ['手续费', '点差', '服务费', '盈亏', '可用余额'], // 普通做市商
|
||||||
|
5: ['手续费', '点差', '可用余额'], // 代理
|
||||||
|
6: ['手续费', '点差', '可用余额'], // 用户
|
||||||
|
}
|
||||||
|
return orders[roleId] ?? orders[6] ?? []
|
||||||
|
})
|
||||||
|
|
||||||
|
// 根据角色动态计算钱包项
|
||||||
|
const walletItems = computed(() => {
|
||||||
|
const items: { label: string; value: string; field: string }[] = []
|
||||||
|
|
||||||
|
for (const feeType of feeOrder.value) {
|
||||||
|
const field = feeFieldMap[feeType]
|
||||||
|
if (!field) continue
|
||||||
|
|
||||||
|
let value: string
|
||||||
|
if (field === 'available') {
|
||||||
|
value = availableBalance.value.toFixed(2)
|
||||||
|
} else {
|
||||||
|
value = walletInfo.value[field] || '0.00'
|
||||||
|
}
|
||||||
|
|
||||||
|
items.push({
|
||||||
|
label: feeLabelMap[feeType] || feeType,
|
||||||
|
value,
|
||||||
|
field,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return items
|
||||||
|
})
|
||||||
|
|
||||||
// 钱包信息
|
// 钱包信息
|
||||||
const walletInfo = ref<WalletInfo>({
|
const walletInfo = ref<WalletInfo>({
|
||||||
user_id: '',
|
user_id: '',
|
||||||
|
|
@ -523,13 +526,39 @@ const handleNextStep = () => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 填充表单数据
|
// 清空所有费用字段
|
||||||
formData.value.withdraw_fee_handle = calculatedData.value.find(item => item.type === '手续费')?.deducted || '0'
|
formData.value.withdraw_fee_handle = '0'
|
||||||
formData.value.withdraw_point_diff = calculatedData.value.find(item => item.type === '点差')?.deducted || '0'
|
formData.value.withdraw_point_diff = '0'
|
||||||
formData.value.withdraw_service_fee = calculatedData.value.find(item => item.type === '服务费')?.deducted || '0'
|
formData.value.withdraw_service_fee = '0'
|
||||||
formData.value.withdraw_risk_fee = calculatedData.value.find(item => item.type === '风险金')?.deducted || '0'
|
formData.value.withdraw_risk_fee = '0'
|
||||||
formData.value.withdraw_head_fee = calculatedData.value.find(item => item.type === '头寸')?.deducted || '0'
|
formData.value.withdraw_head_fee = '0'
|
||||||
formData.value.withdraw_blance = calculatedData.value.find(item => item.type === '可用余额')?.deducted || '0'
|
formData.value.withdraw_blance = '0'
|
||||||
|
|
||||||
|
// 根据当前角色的费用项顺序填充表单数据
|
||||||
|
for (const feeType of feeOrder.value) {
|
||||||
|
const deducted = calculatedData.value.find(item => item.type === feeType)?.deducted || '0'
|
||||||
|
|
||||||
|
switch (feeType) {
|
||||||
|
case '手续费':
|
||||||
|
formData.value.withdraw_fee_handle = deducted
|
||||||
|
break
|
||||||
|
case '点差':
|
||||||
|
formData.value.withdraw_point_diff = deducted
|
||||||
|
break
|
||||||
|
case '服务费':
|
||||||
|
formData.value.withdraw_service_fee = deducted
|
||||||
|
break
|
||||||
|
case '风险金':
|
||||||
|
formData.value.withdraw_risk_fee = deducted
|
||||||
|
break
|
||||||
|
case '盈亏':
|
||||||
|
formData.value.withdraw_head_fee = deducted
|
||||||
|
break
|
||||||
|
case '可用余额':
|
||||||
|
formData.value.withdraw_blance = deducted
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
currentStep.value = 2
|
currentStep.value = 2
|
||||||
}
|
}
|
||||||
|
|
@ -548,14 +577,35 @@ const handleSubmit = async () => {
|
||||||
const params: any = {
|
const params: any = {
|
||||||
channel_id: props.channelId,
|
channel_id: props.channelId,
|
||||||
amount: +withdrawAmount.value,
|
amount: +withdrawAmount.value,
|
||||||
withdraw_fee_handle: formData.value.withdraw_fee_handle,
|
|
||||||
withdraw_point_diff: formData.value.withdraw_point_diff,
|
|
||||||
withdraw_address: formData.value.withdraw_address,
|
withdraw_address: formData.value.withdraw_address,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据当前角色的费用项顺序添加对应的费用参数
|
||||||
|
for (const feeType of feeOrder.value) {
|
||||||
|
switch (feeType) {
|
||||||
|
case '手续费':
|
||||||
|
params.withdraw_fee_handle = formData.value.withdraw_fee_handle
|
||||||
|
break
|
||||||
|
case '点差':
|
||||||
|
params.withdraw_point_diff = formData.value.withdraw_point_diff
|
||||||
|
break
|
||||||
|
case '服务费':
|
||||||
|
params.withdraw_service_fee = formData.value.withdraw_service_fee
|
||||||
|
break
|
||||||
|
case '风险金':
|
||||||
|
params.withdraw_risk_fee = formData.value.withdraw_risk_fee
|
||||||
|
break
|
||||||
|
case '盈亏':
|
||||||
|
params.withdraw_head_fee = formData.value.withdraw_head_fee
|
||||||
|
break
|
||||||
|
case '可用余额':
|
||||||
|
params.withdraw_blance = formData.value.withdraw_blance
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isAgent.value) {
|
if (isAgent.value) {
|
||||||
// 用户取款
|
// 用户取款
|
||||||
params.withdraw_blance = formData.value.withdraw_blance
|
|
||||||
params.beneficiary_name = formData.value.beneficiary_name
|
params.beneficiary_name = formData.value.beneficiary_name
|
||||||
params.beneficiary_bank_name = formData.value.beneficiary_bank_name
|
params.beneficiary_bank_name = formData.value.beneficiary_bank_name
|
||||||
params.swift_bic_code = formData.value.swift_bic_code
|
params.swift_bic_code = formData.value.swift_bic_code
|
||||||
|
|
@ -565,10 +615,6 @@ const handleSubmit = async () => {
|
||||||
await withdraw(params)
|
await withdraw(params)
|
||||||
} else {
|
} else {
|
||||||
// 代理取款
|
// 代理取款
|
||||||
params.withdraw_service_fee = formData.value.withdraw_service_fee
|
|
||||||
params.withdraw_head_fee = formData.value.withdraw_head_fee
|
|
||||||
params.withdraw_risk_fee = formData.value.withdraw_risk_fee
|
|
||||||
|
|
||||||
await agentWithdraw(params)
|
await agentWithdraw(params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -65,7 +65,7 @@
|
||||||
|
|
||||||
<UserCaptcha v-model="registerForm.code" />
|
<UserCaptcha v-model="registerForm.code" />
|
||||||
<el-form-item
|
<el-form-item
|
||||||
label="设置密码(6-12位密码,包含特殊符号以及大小写)"
|
label="设置密码(6-12位密码)"
|
||||||
label-position="top"
|
label-position="top"
|
||||||
prop="password"
|
prop="password"
|
||||||
>
|
>
|
||||||
|
|
@ -87,8 +87,8 @@
|
||||||
v-model="registerForm.inviteCode"
|
v-model="registerForm.inviteCode"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item prop="agreeAgreement">
|
||||||
<el-checkbox label="同意注册协议"
|
<el-checkbox v-model="registerForm.agreeAgreement"
|
||||||
>我已阅读并同意 隐私条例、 退款政策、 AML&CTF政策、<br />
|
>我已阅读并同意 隐私条例、 退款政策、 AML&CTF政策、<br />
|
||||||
执行政策 和 网站条款和条件</el-checkbox
|
执行政策 和 网站条款和条件</el-checkbox
|
||||||
>
|
>
|
||||||
|
|
@ -108,6 +108,7 @@ defineOptions({
|
||||||
})
|
})
|
||||||
// type类型
|
// type类型
|
||||||
import type { FormInstance, FormRules } from 'element-plus'
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
// 组件
|
// 组件
|
||||||
import UserHeader from './components/Header.vue'
|
import UserHeader from './components/Header.vue'
|
||||||
import UserText from './components/Text.vue'
|
import UserText from './components/Text.vue'
|
||||||
|
|
@ -155,12 +156,25 @@ const registerForm = ref<any>({
|
||||||
password: '',
|
password: '',
|
||||||
code: '',
|
code: '',
|
||||||
inviteCode: '',
|
inviteCode: '',
|
||||||
|
agreeAgreement: false,
|
||||||
})
|
})
|
||||||
const registerRules = ref<FormRules>({
|
const registerRules = ref<FormRules>({
|
||||||
email: emailRules().email,
|
email: emailRules().email,
|
||||||
phone: phoneRules(registerForm.value).phone,
|
phone: phoneRules(registerForm.value).phone,
|
||||||
password: passwordRules(registerForm.value).password,
|
password: passwordRules(registerForm.value).password,
|
||||||
code: codeRules().code,
|
code: codeRules().code,
|
||||||
|
agreeAgreement: [
|
||||||
|
{
|
||||||
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
|
if (!value) {
|
||||||
|
callback(new Error('请勾选同意注册协议'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'change',
|
||||||
|
},
|
||||||
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
//初始化验证码倒计时状态(添加页面前缀隔离不同页面的倒计时状态)
|
//初始化验证码倒计时状态(添加页面前缀隔离不同页面的倒计时状态)
|
||||||
|
|
@ -215,6 +229,13 @@ const handleSendCode = async () => {
|
||||||
//注册
|
//注册
|
||||||
const handleRegister = async () => {
|
const handleRegister = async () => {
|
||||||
if (!registerFormRef.value) return
|
if (!registerFormRef.value) return
|
||||||
|
|
||||||
|
// 先检查协议勾选状态
|
||||||
|
if (!registerForm.value.agreeAgreement) {
|
||||||
|
ElMessage.error('请勾选同意注册协议')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 提交时再次验证(显示错误提示)
|
// 提交时再次验证(显示错误提示)
|
||||||
await registerFormRef.value.validate()
|
await registerFormRef.value.validate()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue