首页样式

This commit is contained in:
2026-06-12 13:12:36 +08:00
parent e84f864229
commit 55b003c2bf
4 changed files with 1198 additions and 650 deletions

View File

@ -138,8 +138,8 @@ export default {
pointDiff: '点差佣金', pointDiff: '点差佣金',
service: '服务费', service: '服务费',
risk: '风险金', risk: '风险金',
profit: '头寸', profit: '盈亏',
headPosition: '头寸', headPosition: '盈亏',
available: '可用余额', available: '可用余额',
}, },
table: { table: {

View File

@ -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

View File

@ -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"
>我已阅读并同意 隐私条例 退款政策 AMLCTF政策<br /> >我已阅读并同意 隐私条例 退款政策 AMLCTF政策<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()