feat 进件申请数据补填处理

This commit is contained in:
bootx
2025-11-07 12:21:45 +08:00
parent 49a5f1ae64
commit 37a908239f
7 changed files with 859 additions and 72 deletions

View File

@@ -166,3 +166,15 @@ export interface OnbCardHolderProfile extends MchEntity {
/** 非法人结算授权函图片路径 */
letterOfAuthPicUrl?: string
}
/**
* 费率配置项
*/
export interface TradeRateConfigItem {
/** 服务商成本费率 */
isvRate?: number
/** 代理商默认费率 */
agentRate?: number
/** 商户默认费率 */
mchRate?: number
}

View File

@@ -1,5 +1,5 @@
import { http } from '@/utils/http/axios'
import type {MchEntity, Result} from '#/axios'
import type { MchEntity, Result } from '#/axios'
import type {
OnbBankAccountProfile,
OnbCardHolderProfile,
@@ -7,6 +7,7 @@ import type {
OnbLicenseProfile,
OnbMerchantProfile,
OnbShopProfile,
TradeRateConfigItem,
} from '@/views/daxpay/h5/onboarded/common/Base'
/**
@@ -84,6 +85,10 @@ export interface MerchantApply {
cardHolder: OnbCardHolderProfile
/** 其他申请信息 */
other: OtherApply
/** 结算产品信息 */
settle: SettleProfile
/** 费率 */
rate: HkrtMchRateConfig
}
/**
@@ -119,3 +124,119 @@ export interface MccConst {
/** 子类目 */
children?: MccConst[]
}
/**
* 海科融通入驻结算信息
*/
export interface SettleProfile {
// 申请ID
applyId?: string
// 结算周期
settlementCycle?: string
// 提现费率
withdrawalRate?: number
// 最小提现费用
withdrawalFeeMin?: number
// 对公提现费率
publicWithdrawalRate?: number
// 对公最小提现费用
publicWithdrawalFeeMin?: number
}
/**
* 海科商户费率配置
*/
export interface HkrtMchRateConfig {
// 微信费率
wechatRate?: number
// 支付宝费率
alipayRate?: number
// 银行卡借记卡费率
bankDebitRate?: number
// 银行卡贷记卡费率
bankCreditRate?: number
// 银联二维码借记卡费率
unionDebitRate?: number
// 银联二维码贷记卡费率
unionCreditRate?: number
// 银联二维码1000以下费率
unionMixRate?: number
// 银行卡借记卡封顶手续费
bankDebitMax?: number
// 银联二维码借记卡封顶手续费
unionDebitMax?: number
}
/**
* 代理商权限配置
*/
export interface AgentPermConfig {
/** 是否可用代理商API接口 */
agentApi?: boolean
/** 是否可以查询商户订单信息(界面) */
queryOrder?: boolean
/** 是否可以代商户退款(界面) */
refund?: boolean
/** 是否可以创建商户订单(界面) */
createOrder?: boolean
/** 是否可以创建进件商户 */
createOnbMch?: boolean
/** 是否可以代商户进行交易(API) */
tradeApi?: boolean
/** 是否可以设置商户结算周期 */
settleCycle?: boolean
/** 是否可以操作商户应用 */
setupMchApp?: boolean
/** 是否可以查看商户应用信息 */
mchAppInfo?: boolean
/** 设置商户分账规则 */
setupMchProfit?: boolean
/** 可用通道 */
availableChannel?: string[]
/** 可用接口 */
availableApi?: string[]
}
/**
* 海科费率配置
*/
export interface HkrtRateConfig {
// 微信费率
wechatRate: TradeRateConfigItem
// 支付宝费率
alipayRate: TradeRateConfigItem
// 银行卡借记卡费率
bankDebitRate: TradeRateConfigItem
// 银行卡贷记卡费率
bankCreditRate: TradeRateConfigItem
// 银联二维码借记卡费率
unionDebitRate: TradeRateConfigItem
// 银联二维码贷记卡费率
unionCreditRate: TradeRateConfigItem
// 银联二维码1000以下费率
unionMixRate: TradeRateConfigItem
// 银行卡借记卡封顶手续费
bankDebitMax: TradeRateConfigItem
// 银联二维码借记卡封顶手续费
unionDebitMax: TradeRateConfigItem
}
/**
* 查询代理商权限
*/
export function getAgentPermConfig() {
return http.request<Result<AgentPermConfig>>({
method: 'get',
url: '/agent/perm/config/get',
})
}
/**
* 代理端获取代理费率
*/
export function getConfig() {
return http.request<Result<HkrtRateConfig>>({
method: 'get',
url: '/hkrt/rate/agent/getConfig',
})
}

View File

@@ -606,11 +606,164 @@
</van-cell-group>
</template>
</template>
<!-- 费率配置模块 -->
<template v-if="clientCode === 'dax-pay-agent' && currentPage.currentIndex === 4">
<div class="commonTitle">
费率配置
</div>
<van-cell-group inset>
<!-- 微信费率 -->
<van-field
v-model="form.rate.wechatRate"
label-align="top"
name="wechatRate"
placeholder="请输入微信费率"
label="微信费率(%)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入微信费率' }]"
:min="agentRate.wechatRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
<!-- 支付宝费率 -->
<van-field
v-model="form.rate.alipayRate"
label-align="top"
name="alipayRate"
placeholder="请输入支付宝费率"
label="支付宝费率(%)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入支付宝费率' }]"
:min="agentRate.alipayRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
<!-- 银行卡借记卡费率 -->
<van-field
v-model="form.rate.bankDebitRate"
label-align="top"
name="bankDebitRate"
placeholder="请输入银行卡借记卡费率"
label="银行卡借记卡费率(%)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银行卡借记卡费率' }]"
:min="agentRate.bankDebitRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
<!-- 银行卡贷记卡费率 -->
<van-field
v-model="form.rate.bankCreditRate"
label-align="top"
name="bankCreditRate"
placeholder="请输入银行卡贷记卡费率"
label="银行卡贷记卡费率(%)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银行卡贷记卡费率' }]"
:min="agentRate.bankCreditRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
<!-- 银联二维码借记卡费率 -->
<van-field
v-model="form.rate.unionDebitRate"
label-align="top"
name="unionDebitRate"
placeholder="请输入银联二维码借记卡费率"
label="银联二维码借记卡费率(%)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银联二维码借记卡费率' }]"
:min="agentRate.unionDebitRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
<!-- 银联二维码贷记卡费率 -->
<van-field
v-model="form.rate.unionCreditRate"
label-align="top"
name="unionCreditRate"
placeholder="请输入银联二维码贷记卡费率"
label="银联二维码贷记卡费率(%)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银联二维码贷记卡费率' }]"
:min="agentRate.unionCreditRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
<!-- 银联二维码1000以下费率 -->
<van-field
v-model="form.rate.unionMixRate"
label-align="top"
name="unionMixRate"
placeholder="请输入银联二维码1000以下费率"
label="银联二维码1000以下费率(%)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银联二维码1000以下费率' }]"
:min="agentRate.unionMixRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
<!-- 银行卡借记卡封顶手续费 -->
<van-field
v-model="form.rate.bankDebitMax"
label-align="top"
name="bankDebitMax"
placeholder="请输入银行卡借记卡封顶手续费"
label="银行卡借记卡封顶手续费(元)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银行卡借记卡封顶手续费' }]"
:min="agentRate.bankDebitMax?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
<!-- 银联二维码借记卡封顶手续费 -->
<van-field
v-model="form.rate.unionDebitMax"
label-align="top"
name="unionDebitMax"
placeholder="请输入银联二维码借记卡封顶手续费"
label="银联二维码借记卡封顶手续费(元)"
type="number"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银联二维码借记卡封顶手续费' }]"
:min="agentRate.unionDebitMax?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
/>
</van-cell-group>
</template>
</van-form>
</div>
<div class="btnContain">
<div class="btnBox">
<van-button v-if="!showable && currentPage.currentIndex === 1 && clientCode" type="" block @click="readMch">
<van-button v-if="!showable && currentPage.currentIndex === 1 && clientCode" block @click="readMch">
读取商户信息
</van-button>
<van-button v-if="currentPage.currentIndex > 1" type="primary" block @click="prevClick">
@@ -635,9 +788,9 @@
<script setup lang="ts">
import { showConfirmDialog, showDialog, showNotify } from 'vant'
import { useRoute } from 'vue-router'
import { onMounted, ref } from 'vue'
import type { MccConst, MerchantApply } from './HkrtApply.api'
import { findById, findH5ById, mccTree, save, saveH5 } from './HkrtApply.api'
import { computed, onMounted, reactive, ref } from 'vue'
import type { AgentPermConfig, HkrtRateConfig, MccConst, MerchantApply } from './HkrtApply.api'
import { findById, findH5ById, getAgentPermConfig, getConfig, mccTree, save, saveH5 } from './HkrtApply.api'
import {
submit,
submitH5,
@@ -647,8 +800,8 @@ import BUpload from '@/components/BUpload.vue'
import router from '@/router'
import { initMerchantProfile } from '@/views/daxpay/h5/onboarded/common/OnbMchApplyUtil'
import { useTokenStore } from '@/store/modules/token'
import {bankCardOcr, idCardOcr, licenseOcr, Region} from '@/api/System.api'
import { findAllProvinceAndCityAndArea } from '@/api/System.api'
import type { Region } from '@/api/System.api'
import { bankCardOcr, findAllProvinceAndCityAndArea, idCardOcr, licenseOcr } from '@/api/System.api'
const route = useRoute()
// sign 作为H5独立访问时, 用来给数据验证访问做的安全措施
@@ -681,6 +834,13 @@ const currentPage = reactive({
index: 3,
title: '结算账户',
},
// 只有当clientCode为dax-pay-agent时才显示费率配置步骤
...(clientCode === 'dax-pay-agent'
? [{
index: 4,
title: '费率配置',
}]
: []),
],
currentTitle: computed(() => {
return currentPage.date.find(item => item.index === currentPage.currentIndex).title
@@ -694,6 +854,22 @@ const loading = ref<boolean>(false)
const pca = ref<Region[]>([])
const mccCodes = ref<MccConst[]>([])
// 代理商权限配置
const agentPerm = ref<AgentPermConfig>({})
// 代理商费率配置
const agentRate = ref<HkrtRateConfig>({
wechatRate: {},
alipayRate: {},
bankDebitRate: {},
bankCreditRate: {},
unionDebitRate: {},
unionCreditRate: {},
unionMixRate: {},
bankDebitMax: {},
unionDebitMax: {},
})
// 表单数据对象
const form = ref<MerchantApply>({
merchant: {},
@@ -703,6 +879,8 @@ const form = ref<MerchantApply>({
bankAccount: {},
cardHolder: {},
other: {},
settle: {},
rate: {},
})
/**
@@ -725,6 +903,17 @@ function initData() {
findAllProvinceAndCityAndArea().then(({ data }) => {
pca.value = data
})
// 获取权限配置和费率配置
Promise.all([
getAgentPermConfig(),
getConfig(),
]).then(([permRes, rateRes]) => {
agentPerm.value = permRes.data
agentRate.value = rateRes.data
}).catch(() => {
showNotify({ type: 'danger', message: '获取权限或费率配置失败' })
})
}
/**
@@ -746,7 +935,16 @@ function getInfo() {
* 点击上一步
*/
function prevClick() {
currentPage.currentIndex--
// 如果当前是第4步且clientCode不是dax-pay-agent则回到第3步
if (currentPage.currentIndex === 4 && clientCode !== 'dax-pay-agent') {
currentPage.currentIndex = 3
return
}
// 其他情况,正常回到上一步
if (currentPage.currentIndex > 1) {
currentPage.currentIndex--
}
}
/**
@@ -755,17 +953,28 @@ function prevClick() {
function nextClick() {
// 如果是查看模式,直接跳转到下一步,不进行表单验证
if (showable.value) {
// 如果是最后一步,不执行任何操作
if (currentPage.currentIndex >= currentPage.date.length) {
return
}
currentPage.currentIndex++
return
}
// 表单验证
formRef.value.validate()
.then(() => {
// 如果是最后一步,则提交
if (currentPage.currentIndex >= currentPage.date.length) {
submitClick()
return
}
// 执行下一步操作
currentPage.currentIndex++
})
.catch(() => {
showNotify({ type: 'danger', message: '还有必填项未填写,请仔细检查!' })
showNotify({ type: 'danger', message: '表单校验未通过,请仔细检查!' })
})
}
@@ -791,13 +1000,15 @@ function saveTemp() {
* 提交
*/
function submitClick() {
showConfirmDialog({
title: '提示',
message: '确定要提交进件申请!',
}).then(() => {
formRef.value
.validate()
.then(async () => {
// 先进行数据校验
formRef.value
.validate()
.then(() => {
// 校验通过后弹窗确认
showConfirmDialog({
title: '提示',
message: '确定要提交进件申请!',
}).then(async () => {
loading.value = true
// 执行下一步操作
const savePromise = clientCode ? save(form.value) : saveH5(form.value, sign)
@@ -829,10 +1040,10 @@ function submitClick() {
}
})
})
.catch(() => {
showNotify({ type: 'danger', message: '还有必填项未填写,请仔细检查!' })
})
})
})
.catch(() => {
showNotify({ type: 'danger', message: '表单校验未通过,请仔细检查!' })
})
}
/**

View File

@@ -617,7 +617,7 @@
</div>
<div class="btnContain">
<div class="btnBox">
<van-button v-if="!showable && currentPage.currentIndex === 1 && clientCode" type="" block @click="readMch">
<van-button v-if="!showable && currentPage.currentIndex === 1 && clientCode" block @click="readMch">
读取商户信息
</van-button>
<van-button v-if="currentPage.currentIndex > 1" type="primary" block @click="prevClick">
@@ -761,14 +761,14 @@ function nextClick() {
currentPage.currentIndex++
return
}
formRef.value.validate()
.then(() => {
// 执行下一步操作
currentPage.currentIndex++
})
.catch(() => {
showNotify({ type: 'danger', message: '还有必填项未填写,请仔细检查!' })
showNotify({ type: 'danger', message: '表单校验未通过,请仔细检查!' })
})
}
@@ -793,13 +793,15 @@ function saveTemp() {
* 提交
*/
function submitClick() {
showConfirmDialog({
title: '提示',
message: '确定要提交进件申请!',
}).then(() => {
formRef.value
.validate()
.then(async () => {
// 先进行数据校验
formRef.value
.validate()
.then(() => {
// 校验通过后弹窗确认
showConfirmDialog({
title: '提示',
message: '确定要提交进件申请!',
}).then(async () => {
loading.value = true
// 执行下一步操作
const savePromise = clientCode ? save(form.value) : saveH5(form.value, sign)
@@ -831,10 +833,10 @@ function submitClick() {
}
})
})
.catch(() => {
showNotify({ type: 'danger', message: '还有必填项未填写,请仔细检查!' })
})
})
})
.catch(() => {
showNotify({ type: 'danger', message: '表单校验未通过,请仔细检查!' })
})
}
/**

View File

@@ -493,7 +493,7 @@
<!-- 底部按钮 -->
<div class="btnContain">
<div class="btnBox">
<van-button v-if="!showable && currentPage.currentIndex === 1 && clientCode" type="" block @click="readMch">
<van-button v-if="!showable && currentPage.currentIndex === 1 && clientCode" block @click="readMch">
读取商户信息
</van-button>
<van-button v-if="currentPage.currentIndex > 1" type="primary" block @click="prevClick">
@@ -528,8 +528,8 @@ import {
import router from '@/router'
import { initMerchantProfile } from '@/views/daxpay/h5/onboarded/common/OnbMchApplyUtil'
import { useTokenStore } from '@/store/modules/token'
import {idCardOcr, licenseOcr, Region} from '@/api/System.api'
import { findAllProvinceAndCityAndArea } from '@/api/System.api'
import type { Region } from '@/api/System.api'
import { findAllProvinceAndCityAndArea, idCardOcr, licenseOcr } from '@/api/System.api'
const route = useRoute()
const { id: applyId, sign, token, clientCode, show } = route.query
@@ -640,7 +640,7 @@ function nextClick() {
updateCurrentTitle()
return
}
formRef.value.validate()
.then(() => {
// 执行下一步操作
@@ -648,7 +648,7 @@ function nextClick() {
updateCurrentTitle()
})
.catch(() => {
showNotify({ type: 'danger', message: '还有必填项未填写,请仔细检查!' })
showNotify({ type: 'danger', message: '表单校验未通过,请仔细检查!' })
})
}
@@ -674,13 +674,15 @@ function saveTemp() {
* 提交
*/
function submitClick() {
showConfirmDialog({
title: '提示',
message: '确定要提交进件申请!',
}).then(() => {
formRef.value
.validate()
.then(async () => {
// 先进行数据校验
formRef.value
.validate()
.then(() => {
// 校验通过后弹窗确认
showConfirmDialog({
title: '提示',
message: '确定要提交进件申请!',
}).then(async () => {
loading.value = true
// 执行下一步操作
const savePromise = clientCode ? save(form.value) : saveH5(form.value, sign)
@@ -712,10 +714,10 @@ function submitClick() {
}
})
})
.catch(() => {
showNotify({ type: 'danger', message: '还有必填项未填写,请仔细检查!' })
})
})
})
.catch(() => {
showNotify({ type: 'danger', message: '表单校验未通过,请仔细检查!' })
})
}
/**

View File

@@ -1,5 +1,5 @@
import { http } from '@/utils/http/axios'
import type {MchEntity, Result} from '#/axios'
import type { MchEntity, Result } from '#/axios'
import type {
OnbBankAccountProfile,
OnbCardHolderProfile,
@@ -7,6 +7,7 @@ import type {
OnbLicenseProfile,
OnbMerchantProfile,
OnbShopProfile,
TradeRateConfigItem,
} from '@/views/daxpay/h5/onboarded/common/Base'
/**
@@ -64,6 +65,26 @@ export function mccTree() {
})
}
/**
* 获取代理商权限配置
*/
export function getAgentPermConfig() {
return http.request<Result<any>>({
method: 'get',
url: '/vbill/rate/agent/getPermConfig',
})
}
/**
* 获取代理商费率配置
*/
export function getConfig() {
return http.request<Result<VbillRateConfig>>({
method: 'get',
url: '/vbill/rate/agent/getConfig',
})
}
/**
* 随行付商户申请参数
*/
@@ -85,7 +106,7 @@ export interface MerchantApply {
/** 其他申请信息 */
other: OtherApply
/** 费率配置信息 */
rate?: RateProfile
rate: RateProfile
}
/**
@@ -150,6 +171,82 @@ export interface RateProfile {
quickDebitRate?: number
}
/**
* 随行付费率配置
*/
export interface VbillRateConfig extends MchEntity {
/** 微信贷记卡费率 */
wechatCreditRate: TradeRateConfigItem
/** 微信借记卡费率 */
wechatDebitRate: TradeRateConfigItem
/** 微信借记卡封顶手续费 */
wechatDebitMaxFee: TradeRateConfigItem
/** 支付宝贷记卡费率 */
alipayCreditRate: TradeRateConfigItem
/** 支付宝借记卡费率 */
alipayDebitRate: TradeRateConfigItem
/** 支付宝借记卡封顶手续费 */
alipayDebitMaxFee: TradeRateConfigItem
/** 银联单笔小于1000贷记卡费率 */
unionCreditMinRate: TradeRateConfigItem
/** 银联单笔小于1000借记卡费率 */
unionDebitMinRate: TradeRateConfigItem
/** 银联单笔大于1000贷记卡费率 */
unionCreditMaxRate: TradeRateConfigItem
/** 银联单笔大于1000借记卡费率 */
unionDebitMaxRate: TradeRateConfigItem
/** 贷记卡费率 */
creditRate: TradeRateConfigItem
/** 借记卡费率 */
cardDebitRate: TradeRateConfigItem
/** 借记卡手续费封顶值 */
cardDebitCap: TradeRateConfigItem
/** 手机闪付贷记卡费率 */
quickCreditRate: TradeRateConfigItem
/** 手机闪付借记卡费率 */
quickDebitRate: TradeRateConfigItem
/** 服务商号 */
isvNo?: string
}
/**
* 随行付商户费率配置
*/
export interface VbillMchRateConfig extends MchEntity {
/** 微信贷记卡费率 */
wechatCreditRate?: number
/** 微信借记卡费率 */
wechatDebitRate?: number
/** 微信借记卡封顶手续费 */
wechatDebitMaxFee?: number
/** 支付宝贷记卡费率 */
alipayCreditRate?: number
/** 支付宝借记卡费率 */
alipayDebitRate?: number
/** 支付宝借记卡封顶手续费 */
alipayDebitMaxFee?: number
/** 银联单笔小于1000贷记卡费率 */
unionCreditMinRate?: number
/** 银联单笔小于1000借记卡费率 */
unionDebitMinRate?: number
/** 银联单笔大于1000贷记卡费率 */
unionCreditMaxRate?: number
/** 银联单笔大于1000借记卡费率 */
unionDebitMaxRate?: number
/** 贷记卡费率 */
creditRate?: number
/** 借记卡费率 */
cardDebitRate?: number
/** 借记卡手续费封顶值 */
cardDebitCap?: number
/** 手机闪付贷记卡费率 */
quickCreditRate?: number
/** 手机闪付借记卡费率 */
quickDebitRate?: number
/** 进件商户号 */
onbMchNo?: string
}
/**
* 随行付经营类目
*/

View File

@@ -684,11 +684,260 @@
</van-cell-group>
</template>
</template>
<!-- 费率配置模块 -->
<template v-if="currentPage.currentIndex === 4 && clientCode === 'dax-pay-agent'">
<div class="commonTitle">
费率配置
</div>
<van-cell-group inset>
<!-- 微信贷记卡费率 -->
<van-field
v-model="form.rate.wechatCreditRate"
label-align="top"
name="wechatCreditRate"
placeholder="请输入微信贷记卡费率"
label="微信贷记卡费率(%)"
type="number"
:min="agentRate.wechatCreditRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入微信贷记卡费率' }]"
/>
<!-- 微信借记卡费率 -->
<van-field
v-model="form.rate.wechatDebitRate"
label-align="top"
name="wechatDebitRate"
placeholder="请输入微信借记卡费率"
label="微信借记卡费率(%)"
type="number"
:min="agentRate.wechatDebitRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入微信借记卡费率' }]"
/>
<!-- 微信借记卡封顶手续费 -->
<van-field
v-model="form.rate.wechatDebitMaxFee"
label-align="top"
name="wechatDebitMaxFee"
placeholder="请输入微信借记卡封顶手续费"
label="微信借记卡封顶手续费(元)"
type="number"
:min="0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入微信借记卡封顶手续费' }]"
/>
<!-- 支付宝贷记卡费率 -->
<van-field
v-model="form.rate.alipayCreditRate"
label-align="top"
name="alipayCreditRate"
placeholder="请输入支付宝贷记卡费率"
label="支付宝贷记卡费率(%)"
type="number"
:min="agentRate.alipayCreditRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入支付宝贷记卡费率' }]"
/>
<!-- 支付宝借记卡费率 -->
<van-field
v-model="form.rate.alipayDebitRate"
label-align="top"
name="alipayDebitRate"
placeholder="请输入支付宝借记卡费率"
label="支付宝借记卡费率(%)"
type="number"
:min="agentRate.alipayDebitRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入支付宝借记卡费率' }]"
/>
<!-- 支付宝借记卡封顶手续费 -->
<van-field
v-model="form.rate.alipayDebitMaxFee"
label-align="top"
name="alipayDebitMaxFee"
placeholder="请输入支付宝借记卡封顶手续费"
label="支付宝借记卡封顶手续费(元)"
type="number"
:min="0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入支付宝借记卡封顶手续费' }]"
/>
<!-- 银联单笔小于1000贷记卡费率 -->
<van-field
v-model="form.rate.unionCreditMinRate"
label-align="top"
name="unionCreditMinRate"
placeholder="请输入银联单笔小于1000贷记卡费率"
label="银联单笔小于1000贷记卡费率(%)"
type="number"
:min="agentRate.unionCreditMinRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银联单笔小于1000贷记卡费率' }]"
/>
<!-- 银联单笔小于1000借记卡费率 -->
<van-field
v-model="form.rate.unionDebitMinRate"
label-align="top"
name="unionDebitMinRate"
placeholder="请输入银联单笔小于1000借记卡费率"
label="银联单笔小于1000借记卡费率(%)"
type="number"
:min="agentRate.unionDebitMinRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银联单笔小于1000借记卡费率' }]"
/>
<!-- 银联单笔大于1000贷记卡费率 -->
<van-field
v-model="form.rate.unionCreditMaxRate"
label-align="top"
name="unionCreditMaxRate"
placeholder="请输入银联单笔大于1000贷记卡费率"
label="银联单笔大于1000贷记卡费率(%)"
type="number"
:min="agentRate.unionCreditMaxRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银联单笔大于1000贷记卡费率' }]"
/>
<!-- 银联单笔大于1000借记卡费率 -->
<van-field
v-model="form.rate.unionDebitMaxRate"
label-align="top"
name="unionDebitMaxRate"
placeholder="请输入银联单笔大于1000借记卡费率"
label="银联单笔大于1000借记卡费率(%)"
type="number"
:min="agentRate.unionDebitMaxRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入银联单笔大于1000借记卡费率' }]"
/>
<!-- 贷记卡费率 -->
<van-field
v-model="form.rate.creditRate"
label-align="top"
name="creditRate"
placeholder="请输入贷记卡费率"
label="贷记卡费率(%)"
type="number"
:min="agentRate.creditRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入贷记卡费率' }]"
/>
<!-- 借记卡费率 -->
<van-field
v-model="form.rate.cardDebitRate"
label-align="top"
name="cardDebitRate"
placeholder="请输入借记卡费率"
label="借记卡费率(%)"
type="number"
:min="agentRate.cardDebitRate?.mchRate || 0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入借记卡费率' }]"
/>
<!-- 借记卡手续费封顶值 -->
<van-field
v-model="form.rate.cardDebitCap"
label-align="top"
name="cardDebitCap"
placeholder="请输入借记卡手续费封顶值"
label="借记卡手续费封顶值(元)"
type="number"
:min="0"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入借记卡手续费封顶值' }]"
/>
<!-- 手机闪付贷记卡费率 -->
<van-field
v-model="form.rate.quickCreditRate"
label-align="top"
name="quickCreditRate"
placeholder="请输入手机闪付贷记卡费率"
label="手机闪付贷记卡费率(%)"
type="number"
:min="agentRate.quickCreditRate.mchRate"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入手机闪付贷记卡费率' }]"
/>
<!-- 手机闪付借记卡费率 -->
<van-field
v-model="form.rate.quickDebitRate"
label-align="top"
name="quickDebitRate"
placeholder="请输入手机闪付借记卡费率"
label="手机闪付借记卡费率(%)"
type="number"
:min="agentRate.quickDebitRate.mchRate"
:max="100"
:step="0.01"
:precision="2"
clearable
:disabled="showable"
:rules="[{ required: true, message: '请输入手机闪付借记卡费率' }]"
/>
</van-cell-group>
</template>
</van-form>
</div>
<div class="btnContain">
<div class="btnBox">
<van-button v-if="!showable && currentPage.currentIndex === 1 && clientCode" type="" block @click="readMch">
<van-button v-if="!showable && currentPage.currentIndex === 1 && clientCode" block @click="readMch">
读取商户信息
</van-button>
<van-button v-if="currentPage.currentIndex > 1" type="primary" block @click="prevClick">
@@ -714,8 +963,8 @@
import { showConfirmDialog, showDialog, showNotify } from 'vant'
import { useRoute } from 'vue-router'
import { ref } from 'vue'
import type { MccConst, MerchantApply } from './VbillApply.api'
import { findById, findH5ById, mccTree, save, saveH5 } from './VbillApply.api'
import type { MccConst, MerchantApply, VbillRateConfig } from './VbillApply.api'
import { findById, findH5ById, getConfig, mccTree, save, saveH5 } from './VbillApply.api'
import {
submit,
submitH5,
@@ -725,8 +974,8 @@ import BUpload from '@/components/BUpload.vue'
import router from '@/router'
import { initMerchantProfile } from '@/views/daxpay/h5/onboarded/common/OnbMchApplyUtil'
import { useTokenStore } from '@/store/modules/token'
import {bankCardOcr, idCardOcr, licenseOcr, Region} from '@/api/System.api'
import { findAllProvinceAndCityAndArea } from '@/api/System.api'
import type { Region } from '@/api/System.api'
import { bankCardOcr, findAllProvinceAndCityAndArea, idCardOcr, licenseOcr } from '@/api/System.api'
const route = useRoute()
const { id: applyId, sign, token, clientCode, show } = route.query
@@ -755,6 +1004,13 @@ const currentPage = reactive({
index: 3,
title: '结算账户',
},
// 当clientCode为dax-pay-agent时显示费率配置
...(clientCode === 'dax-pay-agent'
? [{
index: 4,
title: '费率配置',
}]
: []),
],
currentTitle: computed(() => {
return currentPage.date.find(item => item.index === currentPage.currentIndex).title
@@ -768,6 +1024,25 @@ const loading = ref<boolean>(false)
const pca = ref<Region[]>([])
const mccCodes = ref<MccConst[]>([])
// 代理商费率配置
const agentRate = ref<VbillRateConfig>({
wechatCreditRate: {},
wechatDebitRate: {},
wechatDebitMaxFee: {},
alipayCreditRate: {},
alipayDebitRate: {},
alipayDebitMaxFee: {},
unionCreditMinRate: {},
unionDebitMinRate: {},
unionCreditMaxRate: {},
unionDebitMaxRate: {},
creditRate: {},
cardDebitRate: {},
cardDebitCap: {},
quickCreditRate: {},
quickDebitRate: {},
})
// 表单数据对象
const form = ref<MerchantApply>({
merchant: {},
@@ -777,6 +1052,7 @@ const form = ref<MerchantApply>({
bankAccount: {},
cardHolder: {},
other: {},
rate: {},
})
/**
@@ -799,6 +1075,36 @@ function initData() {
findAllProvinceAndCityAndArea().then(({ data }) => {
pca.value = data
})
// 获取权限配置和费率配置
Promise.all([
getConfig(),
]).then(([rateRes]) => {
agentRate.value = rateRes.data
// 初始化费率配置
if (clientCode === 'dax-pay-agent' && agentRate.value) {
form.value.rate = {
wechatCreditRate: agentRate.value.wechatCreditRate?.mchRate || 0,
wechatDebitRate: agentRate.value.wechatDebitRate?.mchRate || 0,
wechatDebitMaxFee: agentRate.value.wechatDebitMaxFee?.mchRate || 0,
alipayCreditRate: agentRate.value.alipayCreditRate?.mchRate || 0,
alipayDebitRate: agentRate.value.alipayDebitRate?.mchRate || 0,
alipayDebitMaxFee: agentRate.value.alipayDebitMaxFee?.mchRate || 0,
unionCreditMinRate: agentRate.value.unionCreditMinRate?.mchRate || 0,
unionDebitMinRate: agentRate.value.unionDebitMinRate?.mchRate || 0,
unionCreditMaxRate: agentRate.value.unionCreditMaxRate?.mchRate || 0,
unionDebitMaxRate: agentRate.value.unionDebitMaxRate?.mchRate || 0,
creditRate: agentRate.value.creditRate?.mchRate || 0,
cardDebitRate: agentRate.value.cardDebitRate?.mchRate || 0,
cardDebitCap: agentRate.value.cardDebitCap?.mchRate || 0,
quickCreditRate: agentRate.value.quickCreditRate?.mchRate || 0,
quickDebitRate: agentRate.value.quickDebitRate?.mchRate || 0,
}
}
}).catch(() => {
showNotify({ type: 'danger', message: '获取配置信息失败' })
})
}
/**
@@ -811,6 +1117,22 @@ function getInfo() {
router.replace({ name: 'payFail', query: { msg, title: '获取信息失败' } })
return
}
// 处理费率配置
if (data.rate && clientCode === 'dax-pay-agent') {
// 确保费率配置对象存在
if (!form.value.rate) {
form.value.rate = {}
}
// 将返回的费率数据赋值给表单
Object.keys(data.rate).forEach((key) => {
if (data.rate[key] !== null && data.rate[key] !== undefined) {
form.value.rate[key] = data.rate[key]
}
})
}
form.value = data
})
}
@@ -819,7 +1141,13 @@ function getInfo() {
* 点击上一步
*/
function prevClick() {
currentPage.currentIndex--
// 特殊处理费率配置页面
if (currentPage.currentIndex === 5 && clientCode === 'dax-pay-agent') {
currentPage.currentIndex = 4
}
else {
currentPage.currentIndex--
}
}
/**
@@ -831,14 +1159,26 @@ function nextClick() {
currentPage.currentIndex++
return
}
// 特殊处理费率配置页面
if (currentPage.currentIndex === 4 && clientCode === 'dax-pay-agent') {
// 验证费率配置是否完整
if (!form.value.rate || Object.keys(form.value.rate).length === 0) {
showNotify({
type: 'warning',
message: '请完成费率配置',
})
return
}
}
formRef.value.validate()
.then(() => {
// 执行下一步操作
currentPage.currentIndex++
})
.catch(() => {
showNotify({ type: 'danger', message: '还有必填项未填写,请仔细检查!' })
showNotify({ type: 'danger', message: '表单校验未通过,请仔细检查!' })
})
}
@@ -863,13 +1203,15 @@ function saveTemp() {
* 提交
*/
function submitClick() {
showConfirmDialog({
title: '提示',
message: '确定要提交进件申请!',
}).then(() => {
formRef.value
.validate()
.then(async () => {
// 先进行数据校验
formRef.value
.validate()
.then(() => {
// 校验通过后弹窗确认
showConfirmDialog({
title: '提示',
message: '确定要提交进件申请!',
}).then(async () => {
loading.value = true
// 执行下一步操作
const savePromise = clientCode ? save(form.value) : saveH5(form.value, sign)
@@ -901,10 +1243,10 @@ function submitClick() {
}
})
})
.catch(() => {
showNotify({ type: 'danger', message: '还有必填项未填写,请仔细检查!' })
})
})
})
.catch(() => {
showNotify({ type: 'danger', message: '表单校验未通过,请仔细检查!' })
})
}
/**