mirror of
https://gitee.com/bootx/dax-pay-ui
synced 2026-05-13 01:46:01 +08:00
feat 进件商户选择
This commit is contained in:
@@ -23,7 +23,11 @@
|
||||
<a-input v-model:value="form.id" />
|
||||
</a-form-item>
|
||||
<a-form-item label="汇付应用号" name="adaPayAppId">
|
||||
<a-input v-model:value="form.adaPayAppId" placeholder="请输入汇付AppId" />
|
||||
<a-select v-model:value="form.adaPayAppId" placeholder="请选择汇付应用号" allow-clear>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="是否启用" name="enable">
|
||||
<a-switch
|
||||
@@ -104,6 +108,8 @@
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -117,15 +123,15 @@
|
||||
sandbox: false,
|
||||
})
|
||||
let rawForm: any = {}
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
adaPayAppId: [{ required: true, message: '请输入汇付AppId' }],
|
||||
adaPayAppId: [{ required: true, message: '请选择汇付应用号' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
sandbox: [{ required: true, message: '请选择是否为沙箱环境' }],
|
||||
apiKey: [{ required: true, message: '请输入汇付交易密钥' }],
|
||||
mchPrivateKey: [{ required: true, message: '请输入汇付商户RSA私钥' }],
|
||||
// adaPayPublicKey: [{ required: true, message: '请输入汇平台RSA公钥' }],
|
||||
} as Record<string, Rule[]>
|
||||
})
|
||||
// 事件
|
||||
@@ -135,11 +141,21 @@
|
||||
*/
|
||||
function init(config: ChannelConfig) {
|
||||
channelConfig.value = config
|
||||
initData()
|
||||
resetForm()
|
||||
visible.value = true
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -42,7 +42,6 @@ export function updateSub(obj: AlipaySubConfig) {
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 支付宝配置
|
||||
*/
|
||||
@@ -80,12 +79,12 @@ export interface AlipayConfig extends MchEntity {
|
||||
}
|
||||
|
||||
/**
|
||||
* 子商户服务商配置
|
||||
* 支付宝子商户配置
|
||||
*/
|
||||
export interface AlipaySubConfig extends MchEntity {
|
||||
// 服务商号
|
||||
isvNo?: string
|
||||
// 应用授权Token
|
||||
// 应用授权令牌
|
||||
appAuthToken?: string
|
||||
// 是否启用
|
||||
enable: boolean
|
||||
|
||||
@@ -22,7 +22,15 @@
|
||||
<a-input v-model:value="form.id" />
|
||||
</a-form-item>
|
||||
<a-form-item label="AppId" name="aliAppId">
|
||||
<a-input v-model:value="form.aliAppId" placeholder="请输入支付宝商户AppId" />
|
||||
<a-select
|
||||
v-model:value="form.aliAppId"
|
||||
placeholder="请选择支付宝商户AppId"
|
||||
style="width: 100%"
|
||||
>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="是否启用" name="enable">
|
||||
<a-switch
|
||||
@@ -185,6 +193,8 @@
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -194,6 +204,7 @@
|
||||
const formRef = ref<FormInstance>()
|
||||
const channelConfig = ref<ChannelConfig>({})
|
||||
const isIsv = ref<boolean>(false)
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
|
||||
const form = ref<AlipayConfig>({
|
||||
aliAppId: '',
|
||||
@@ -211,7 +222,7 @@
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
aliAppId: [{ required: true, message: '请输入AppId' }],
|
||||
aliAppId: [{ required: true, message: '请选择支付宝商户AppId' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
authType: [{ required: true, message: '请选择认证方式' }],
|
||||
appAuthToken: [{ required: isIsv.value, message: '请输入特约商户AppAuthToken' }],
|
||||
@@ -236,18 +247,28 @@
|
||||
isIsv.value = isv
|
||||
resetForm()
|
||||
visible.value = true
|
||||
initData()
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
function getInfo() {
|
||||
getConfig(channelConfig.value.appId).then(({ data }) => {
|
||||
confirmLoading.value = true
|
||||
rawForm = { ...data }
|
||||
form.value = data
|
||||
confirmLoading.value = false
|
||||
})
|
||||
getConfig(channelConfig.value.appId).then(({ data }) => {
|
||||
confirmLoading.value = true
|
||||
rawForm = { ...data }
|
||||
form.value = data
|
||||
confirmLoading.value = false
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 更新
|
||||
|
||||
@@ -21,6 +21,13 @@
|
||||
<a-form-item label="主键" name="id" :hidden="true">
|
||||
<a-input v-model:value="form.id" />
|
||||
</a-form-item>
|
||||
<a-form-item label="是否启用" name="enable">
|
||||
<a-switch
|
||||
checked-children="启用"
|
||||
un-checked-children="停用"
|
||||
v-model:checked="form.enable"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
name="appAuthToken"
|
||||
label="应用授权Token"
|
||||
@@ -31,12 +38,20 @@
|
||||
placeholder="请输入支付宝商户应用授权Token(app_auth_token)"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="是否启用" name="enable">
|
||||
<a-switch
|
||||
checked-children="启用"
|
||||
un-checked-children="停用"
|
||||
v-model:checked="form.enable"
|
||||
/>
|
||||
<a-form-item
|
||||
label="应用授权令牌"
|
||||
name="appAuthToken"
|
||||
:rules="[{ required: true, message: '请选择支付宝应用授权令牌' }]"
|
||||
>
|
||||
<a-select
|
||||
v-model:value="form.appAuthToken"
|
||||
:disabled="showable"
|
||||
placeholder="请选择支付宝应用授权令牌"
|
||||
>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
name="alipayUserId"
|
||||
@@ -71,6 +86,8 @@
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -78,6 +95,7 @@
|
||||
|
||||
const formRef = ref<FormInstance>()
|
||||
const channelConfig = ref<ChannelConfig>({})
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
|
||||
const form = ref({
|
||||
enable: true,
|
||||
@@ -86,7 +104,7 @@
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
appAuthToken: [{ required: true, message: '应用授权Token不可为空' }],
|
||||
appAuthToken: [{ required: true, message: '应用授权令牌不可为空' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
} as Record<string, Rule[]>
|
||||
})
|
||||
@@ -99,9 +117,19 @@
|
||||
channelConfig.value = config
|
||||
resetForm()
|
||||
visible.value = true
|
||||
initData()
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -30,7 +30,11 @@
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="商户号" name="merchantNo">
|
||||
<a-input v-model:value="form.merchantNo" placeholder="请输入商户号" />
|
||||
<a-select v-model:value="form.merchantNo" placeholder="请选择斗拱进件商户" allow-clear>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-divider>微信认证配置</a-divider>
|
||||
<a-form-item label="读取服务商配置" name="readSystem">
|
||||
@@ -94,6 +98,8 @@
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { YeePaySubConfig } from '@/views/daxpay/common/channel/yeepay/config/payment/YeePayConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -102,7 +108,7 @@
|
||||
const formRef = ref<FormInstance>()
|
||||
const channelConfig = ref<ChannelConfig>({})
|
||||
const form = ref<YeePaySubConfig>({})
|
||||
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
let rawForm: any = {}
|
||||
|
||||
// 校验
|
||||
@@ -121,11 +127,21 @@
|
||||
*/
|
||||
function init(config: ChannelConfig) {
|
||||
channelConfig.value = config
|
||||
initData()
|
||||
resetForm()
|
||||
visible.value = true
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -30,7 +30,11 @@
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="商户号" name="merchantNo">
|
||||
<a-input v-model:value="form.merchantNo" placeholder="请输入富友支付商户号" />
|
||||
<a-select v-model:value="form.merchantNo" placeholder="请选择富友进件商户">
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="终端号" name="termNo" tooltip="没有真实终端号统一填88888888">
|
||||
<a-input v-model:value="form.termNo" placeholder="请输入富友支付终端号" />
|
||||
@@ -56,10 +60,7 @@
|
||||
v-model:checked="form.wxChannelAuth"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="微信AppId"
|
||||
name="wxAppId"
|
||||
>
|
||||
<a-form-item label="微信AppId" name="wxAppId">
|
||||
<a-input
|
||||
v-model:value="form.wxAppId"
|
||||
:disabled="showable"
|
||||
@@ -115,6 +116,8 @@
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -124,6 +127,7 @@
|
||||
const channelConfig = ref<ChannelConfig>({
|
||||
enable: true,
|
||||
})
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
const form = ref<FouyouSubConfig>({
|
||||
enable: true,
|
||||
termNo: '8888888',
|
||||
@@ -148,9 +152,19 @@
|
||||
channelConfig.value = config
|
||||
resetForm()
|
||||
visible.value = true
|
||||
initData()
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
</a-form-item>
|
||||
<a-form-item label="海科商户号" name="merchNo">
|
||||
<a-select v-model:value="form.merchNo" placeholder="请选择海科进件商户" allow-clear>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value">
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
@@ -60,10 +60,7 @@
|
||||
v-model:checked="form.wxChannelAuth"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="微信AppId"
|
||||
name="wxAppId"
|
||||
>
|
||||
<a-form-item label="微信AppId" name="wxAppId">
|
||||
<a-input
|
||||
v-model:value="form.wxAppId"
|
||||
:disabled="showable"
|
||||
@@ -120,7 +117,7 @@
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { ChannelEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -163,6 +160,9 @@
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -30,7 +30,11 @@
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="商户号" name="merchantNo">
|
||||
<a-input v-model:value="form.merchantNo" placeholder="请输入拉卡拉商户号" />
|
||||
<a-select v-model:value="form.merchantNo" placeholder="请选择拉卡拉进件商户">
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="终端号" name="termNo">
|
||||
<a-input v-model:value="form.termNo" placeholder="请输入拉卡拉终端号" />
|
||||
@@ -105,6 +109,8 @@
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -114,6 +120,7 @@
|
||||
const channelConfig = ref<ChannelConfig>({
|
||||
enable: true,
|
||||
})
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
const form = ref<LakalaSubConfig>({
|
||||
enable: true,
|
||||
readSystem: true,
|
||||
@@ -122,6 +129,7 @@
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
onbMchNo: [{ required: true, message: '请选择拉卡拉进件商户' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
merchantNo: [{ required: true, message: '请输入商户编号' }],
|
||||
termNo: [{ required: true, message: '请输入终端号' }],
|
||||
@@ -136,9 +144,19 @@
|
||||
channelConfig.value = config
|
||||
resetForm()
|
||||
visible.value = true
|
||||
initData()
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -23,7 +23,7 @@ export function update(obj: LeshuaSubConfig) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 子商户服务商配置
|
||||
* 乐刷支付子商户配置
|
||||
*/
|
||||
export interface LeshuaSubConfig extends MchEntity {
|
||||
// 服务商号
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
:rules="[{ required: true, message: '请选择乐刷进件商户' }]"
|
||||
>
|
||||
<a-select v-model:value="form.lsMchNo" placeholder="请选择乐刷进件商户" allow-clear>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value">
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
@@ -114,6 +114,7 @@
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -144,6 +145,14 @@
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
|
||||
@@ -31,6 +31,11 @@
|
||||
</a-form-item>
|
||||
<a-form-item label="商户号" name="merchantNo">
|
||||
<a-input v-model:value="form.merchantNo" placeholder="请输入杉德支付商户号" />
|
||||
<a-select v-model:value="form.merchantNo" placeholder="请选择杉德进件商户">
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="门店号" name="storeId" tooltip="通常默认为100001">
|
||||
<a-input v-model:value="form.storeId" placeholder="请输入杉德支付门店号" />
|
||||
@@ -56,10 +61,7 @@
|
||||
v-model:checked="form.wxChannelAuth"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="微信AppId"
|
||||
name="wxAppId"
|
||||
>
|
||||
<a-form-item label="微信AppId" name="wxAppId">
|
||||
<a-input
|
||||
v-model:value="form.wxAppId"
|
||||
:disabled="showable"
|
||||
@@ -115,6 +117,8 @@
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -124,6 +128,7 @@
|
||||
const channelConfig = ref<ChannelConfig>({
|
||||
enable: true,
|
||||
})
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
const form = ref<SandSubConfig>({
|
||||
enable: true,
|
||||
storeId: '100001',
|
||||
@@ -134,6 +139,7 @@
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
onbMchNo: [{ required: true, message: '请选择杉德进件商户' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
merchantNo: [{ required: true, message: '请输入商户编号' }],
|
||||
storeId: [{ required: true, message: '请输入门店号' }],
|
||||
@@ -148,9 +154,19 @@
|
||||
channelConfig.value = config
|
||||
resetForm()
|
||||
visible.value = true
|
||||
initData()
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -30,7 +30,15 @@
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="商户号" name="mno">
|
||||
<a-input v-model:value="form.mno" placeholder="请输入随行付商户号" />
|
||||
<a-select
|
||||
v-model:value="form.mno"
|
||||
:disabled="showable"
|
||||
placeholder="请选择随行付进件商户"
|
||||
>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-divider>微信认证配置</a-divider>
|
||||
<a-form-item
|
||||
@@ -102,6 +110,8 @@
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -109,6 +119,7 @@
|
||||
|
||||
const formRef = ref<FormInstance>()
|
||||
const channelConfig = ref<ChannelConfig>({})
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
|
||||
const form = ref({
|
||||
enable: true,
|
||||
@@ -118,6 +129,7 @@
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
onbMchNo: [{ required: true, message: '请选择随行付进件商户' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
mno: [{ required: true, message: '请输入随行付商户号' }],
|
||||
} as Record<string, Rule[]>
|
||||
@@ -131,9 +143,19 @@
|
||||
channelConfig.value = config
|
||||
resetForm()
|
||||
visible.value = true
|
||||
initData()
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -22,7 +22,11 @@
|
||||
<a-input v-model:value="form.id" :disabled="showable" />
|
||||
</a-form-item>
|
||||
<a-form-item label="商户号" name="wxMchId">
|
||||
<a-input v-model:value="form.wxMchId" :disabled="showable" placeholder="请输入商户号" />
|
||||
<a-select v-model:value="form.wxMchId" :disabled="showable" placeholder="请选择商户号">
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ item.label }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="应用号(AppId)" name="wxAppId">
|
||||
<a-input
|
||||
@@ -31,26 +35,6 @@
|
||||
placeholder="请输入微信应用AppId"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="子商户号" name="subMchId" v-if="isIsv">
|
||||
<a-input
|
||||
v-model:value="form.subMchId"
|
||||
:disabled="showable"
|
||||
placeholder="请输入子商户号"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="子应用号(subAppId)" name="subAppId" v-if="isIsv">
|
||||
<a-input
|
||||
v-model:value="form.subAppId"
|
||||
:disabled="showable"
|
||||
placeholder="请输入微信子应用AppId"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="OpenId获取方式" name="authType" v-if="isIsv">
|
||||
<a-radio-group v-model:value="form.authType" button-style="solid">
|
||||
<a-radio-button value="sp"> 服务商用户标识 </a-radio-button>
|
||||
<a-radio-button value="sub"> 子商户应用用户标识 </a-radio-button>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="公众号AppSecret" name="appSecret">
|
||||
<a-input
|
||||
v-model:value="form.appSecret"
|
||||
@@ -251,6 +235,8 @@
|
||||
import Icon from '@/components/Icon/Icon.vue'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -269,11 +255,12 @@
|
||||
})
|
||||
|
||||
const channelConfig = ref<ChannelConfig>({})
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
wxMchId: [{ required: true, message: '请输入商户号' }],
|
||||
wxMchId: [{ required: true, message: '请选择商户号' }],
|
||||
wxAppId: [{ required: true, message: '请输入应用编号' }],
|
||||
subMchId: [{ required: isIsv.value, message: '请输入子商户号' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
@@ -308,8 +295,17 @@
|
||||
isIsv.value = isv
|
||||
visible.value = true
|
||||
resetForm()
|
||||
initData()
|
||||
getInfo()
|
||||
}
|
||||
/**
|
||||
* 初始化进件商户号列表
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -29,12 +29,20 @@
|
||||
v-model:checked="form.enable"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="微信子商户号" name="subMchId">
|
||||
<a-input
|
||||
<a-form-item
|
||||
label="微信子商户号"
|
||||
name="subMchId"
|
||||
:rules="[{ required: true, message: '请选择微信子商户号' }]"
|
||||
>
|
||||
<a-select
|
||||
v-model:value="form.subMchId"
|
||||
:disabled="showable"
|
||||
placeholder="请输入微信子商户号"
|
||||
/>
|
||||
placeholder="请选择微信子商户号"
|
||||
>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-divider>授权认证配置</a-divider>
|
||||
<a-form-item label="OpenId获取方式" name="authType">
|
||||
@@ -99,11 +107,13 @@
|
||||
<script lang="ts" setup>
|
||||
import { computed, nextTick, ref } from 'vue'
|
||||
import useFormEdit from '@/hooks/bootx/useFormEdit'
|
||||
import {getSubConfig, updateSub, WechatPaySubConfig} from './WechatPayConfig.api'
|
||||
import { getSubConfig, updateSub, WechatPaySubConfig } from './WechatPayConfig.api'
|
||||
import { FormInstance, Rule } from 'ant-design-vue/lib/form'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, labelCol, wrapperCol, confirmLoading, visible, showable } = useFormEdit()
|
||||
// 文件上传
|
||||
@@ -117,11 +127,12 @@
|
||||
})
|
||||
|
||||
const channelConfig = ref<ChannelConfig>({})
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
subMchId: [{ required: true, message: '请输入子商户商户号' }],
|
||||
subMchId: [{ required: true, message: '请选择微信子商户号' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
authType: [{ required: true, message: '请选择OpenId获取方式' }],
|
||||
} as Record<string, Rule[]>
|
||||
@@ -134,11 +145,21 @@
|
||||
*/
|
||||
function init(config: ChannelConfig) {
|
||||
channelConfig.value = config
|
||||
visible.value = true
|
||||
initData()
|
||||
resetForm()
|
||||
visible.value = true
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -23,7 +23,7 @@ export function update(obj: YeePaySubConfig) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 易宝子商户配置
|
||||
* 易宝支付子商户配置
|
||||
*/
|
||||
export interface YeePaySubConfig extends MchEntity {
|
||||
// 易宝商户号
|
||||
|
||||
@@ -30,7 +30,15 @@
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="易宝商户号" name="merchantNo">
|
||||
<a-input v-model:value="form.merchantNo" placeholder="请输入易宝商户号" />
|
||||
<a-select
|
||||
v-model:value="form.merchantNo"
|
||||
:disabled="showable"
|
||||
placeholder="请选择易宝进件商户"
|
||||
>
|
||||
<a-select-option v-for="item in onbMchNoList" :key="item.value" :value="item.value">
|
||||
{{ `${item.label || '-'}(${item.value})` }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-divider>微信认证配置</a-divider>
|
||||
<a-form-item
|
||||
@@ -94,6 +102,8 @@
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ChannelConfig } from '@/views/daxpay/common/merchant/config/ChannelConfig.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { findByChannel } from '@/views/daxpay/common/onboarded/OnbMchInfo.api'
|
||||
|
||||
const { handleCancel, diffForm, labelCol, wrapperCol, confirmLoading, visible, showable } =
|
||||
useFormEdit()
|
||||
@@ -101,12 +111,16 @@
|
||||
|
||||
const formRef = ref<FormInstance>()
|
||||
const channelConfig = ref<ChannelConfig>({})
|
||||
const form = ref<YeePaySubConfig>({})
|
||||
const onbMchNoList = ref<LabeledValue[]>([])
|
||||
const form = ref<YeePaySubConfig>({
|
||||
readSystem: true,
|
||||
})
|
||||
let rawForm: any = {}
|
||||
|
||||
// 校验
|
||||
const rules = computed(() => {
|
||||
return {
|
||||
onbMchNo: [{ required: true, message: '请选择易宝进件商户' }],
|
||||
enable: [{ required: true, message: '请选择是否启用' }],
|
||||
merchantNo: [{ required: true, message: '请输入易宝商户号' }],
|
||||
} as Record<string, Rule[]>
|
||||
@@ -122,9 +136,19 @@
|
||||
channelConfig.value = config
|
||||
resetForm()
|
||||
visible.value = true
|
||||
initData()
|
||||
getInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
findByChannel(channelConfig.value.mchNo, channelConfig.value.channel).then(({ data }) => {
|
||||
onbMchNoList.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
|
||||
@@ -31,15 +31,6 @@ export const dropdownByIsv = () => {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 进件通道列表
|
||||
*/
|
||||
export const dropdownByApply = () => {
|
||||
return defHttp.get<Result<LabeledValue[]>>({
|
||||
url: '/const/channel/dropdownByApply',
|
||||
})
|
||||
}
|
||||
|
||||
export interface ChannelConst extends BaseEntity {
|
||||
/** 编码 */
|
||||
code?: string
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { dropdown as mchAppDropdown } from '@/views/daxpay/common/assist/basic/MchAppQuery.api'
|
||||
import {bindApp, bindBlank} from './CashierCode.api'
|
||||
import { bindBlank } from './CashierCode.api'
|
||||
|
||||
const { createConfirm, createMessage } = useMessage()
|
||||
const { handleCancel, confirmLoading, visible, showable, labelCol, wrapperCol } = useFormEdit()
|
||||
|
||||
95
src/views/daxpay/common/onboarded/OnbMchInfo.api.ts
Normal file
95
src/views/daxpay/common/onboarded/OnbMchInfo.api.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
import { defHttp } from '@/utils/http/axios'
|
||||
import { PageResult, Result } from '#/axios'
|
||||
import { MchEntity } from '#/web'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
export function page(params) {
|
||||
return defHttp.get<Result<PageResult<OnbMchInfo>>>({
|
||||
url: '/onb/mch/page',
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*/
|
||||
export function list() {
|
||||
return defHttp.get<Result<OnbMchInfo[]>>({
|
||||
url: '/onb/mch/list',
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 详情
|
||||
*/
|
||||
export function get(id) {
|
||||
return defHttp.get<Result<OnbMchInfo>>({
|
||||
url: '/onb/mch/findById',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据进件商户号、商户号和所属通道判断是否存在
|
||||
*/
|
||||
export function existsByOnbMchNo(onbMchNo: string, mchNo: string, onbChannel: string) {
|
||||
return defHttp.get<Result<boolean>>({
|
||||
url: '/onb/mch/existsByOnbMchNo',
|
||||
params: { onbMchNo, mchNo, onbChannel },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据所属通道查询进件商户信息
|
||||
*/
|
||||
export function findByChannel(mchNo, channel) {
|
||||
return defHttp.get<Result<LabeledValue[]>>({
|
||||
url: '/onb/mch/findByChannel',
|
||||
params: { mchNo, channel },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*/
|
||||
export function add(obj) {
|
||||
return defHttp.post<Result<void>>({
|
||||
url: '/onb/mch/add',
|
||||
data: obj,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
export function update(obj) {
|
||||
return defHttp.post<Result<void>>({
|
||||
url: '/onb/mch/update',
|
||||
data: obj,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
export function del(id) {
|
||||
return defHttp.post<Result<void>>({
|
||||
url: '/onb/mch/delete',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 进件商户信息
|
||||
*/
|
||||
export interface OnbMchInfo extends MchEntity {
|
||||
// 进件商户号
|
||||
onbMchNo?: string
|
||||
// 进件商户名称
|
||||
onbMchName?: string
|
||||
// 所属通道
|
||||
onbChannel?: string
|
||||
}
|
||||
241
src/views/daxpay/common/onboarded/OnbMchInfoEdit.vue
Normal file
241
src/views/daxpay/common/onboarded/OnbMchInfoEdit.vue
Normal file
@@ -0,0 +1,241 @@
|
||||
<template>
|
||||
<basic-modal
|
||||
v-bind="$attrs"
|
||||
:loading="confirmLoading"
|
||||
:width="750"
|
||||
:title="title"
|
||||
:open="visible"
|
||||
:mask-closable="showable"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-form
|
||||
class="small-from-item"
|
||||
:model="form"
|
||||
ref="formRef"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:rules="rules"
|
||||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
>
|
||||
<a-form-item label="主键" name="id" :hidden="true">
|
||||
<a-input v-model:value="form.id" :disabled="showable" />
|
||||
</a-form-item>
|
||||
<a-form-item label="商户" name="mchNo">
|
||||
<a-select
|
||||
:filter-option="search"
|
||||
v-model:value="form.mchNo"
|
||||
placeholder="请选择商户"
|
||||
:options="mchNoOptions"
|
||||
:disabled="showable || formEditType === FormEditType.Edit"
|
||||
@change="handleMchNoChange"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="所属通道" name="onbChannel">
|
||||
<a-select
|
||||
v-model:value="form.onbChannel"
|
||||
:disabled="showable || formEditType === FormEditType.Edit"
|
||||
placeholder="请选择所属通道"
|
||||
:options="channelOptions"
|
||||
@change="handleOnbChannelChange"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="进件商户号" name="onbMchNo" v-if="form.mchNo && form.onbChannel">
|
||||
<a-input
|
||||
v-model:value="form.onbMchNo"
|
||||
:disabled="showable || formEditType === FormEditType.Edit"
|
||||
placeholder="请输入进件商户号"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="进件商户名称" name="onbMchName">
|
||||
<a-input
|
||||
v-model:value="form.onbMchName"
|
||||
:disabled="showable"
|
||||
placeholder="请输入进件商户名称"
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-spin>
|
||||
<template #footer>
|
||||
<a-space>
|
||||
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
||||
<a-button
|
||||
v-if="!showable"
|
||||
key="forward"
|
||||
:loading="confirmLoading"
|
||||
type="primary"
|
||||
@click="handleOk"
|
||||
>保存</a-button
|
||||
>
|
||||
</a-space>
|
||||
</template>
|
||||
</basic-modal>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { nextTick, reactive, ref, unref } from 'vue'
|
||||
import useFormEdit from '@/hooks/bootx/useFormEdit'
|
||||
import { add, get, OnbMchInfo, update, existsByOnbMchNo } from './OnbMchInfo.api'
|
||||
import { FormInstance, Rule } from 'ant-design-vue/lib/form'
|
||||
import { FormEditType } from '@/enums/formTypeEnum'
|
||||
import BasicModal from '@/components/Modal/src/BasicModal.vue'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { dropdown as merchantDropdown } from '@/views/daxpay/common/assist/basic/MerchantQuery.api'
|
||||
import { dropdownByEnable as channelDropdown } from '@/views/daxpay/common/constant/channel/ChannelConst.api'
|
||||
|
||||
const {
|
||||
initFormEditType,
|
||||
handleCancel,
|
||||
labelCol,
|
||||
wrapperCol,
|
||||
modalWidth,
|
||||
title,
|
||||
confirmLoading,
|
||||
visible,
|
||||
showable,
|
||||
formEditType,
|
||||
search,
|
||||
} = useFormEdit()
|
||||
|
||||
const { createMessage } = useMessage()
|
||||
|
||||
// 表单
|
||||
const formRef = ref<FormInstance>()
|
||||
const form = ref<OnbMchInfo>({})
|
||||
const mchNoOptions = ref<LabeledValue[]>([])
|
||||
const channelOptions = ref<LabeledValue[]>([])
|
||||
|
||||
// 校验
|
||||
const rules = reactive({
|
||||
mchNo: [{ required: true, message: '请选择商户' }],
|
||||
onbMchNo: [
|
||||
{ required: true, message: '请输入进件商户号' },
|
||||
{
|
||||
validator: async (rule, value) => {
|
||||
if (!value || formEditType.value !== FormEditType.Add) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
// 确保商户和所属通道都已选择
|
||||
if (!form.value.mchNo || !form.value.onbChannel) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await existsByOnbMchNo(value, form.value.mchNo, form.value.onbChannel)
|
||||
if (result.data) {
|
||||
return Promise.reject('进件商户号已存在')
|
||||
}
|
||||
return Promise.resolve()
|
||||
} catch (error) {
|
||||
console.error('查询进件商户号失败', error)
|
||||
return Promise.resolve()
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
onbMchName: [{ required: true, message: '请输入进件商户名称' }],
|
||||
onbChannel: [{ required: true, message: '请选择所属通道' }],
|
||||
} as Record<string, Rule[]>)
|
||||
|
||||
// 事件
|
||||
const emits = defineEmits(['ok'])
|
||||
|
||||
/**
|
||||
* 入口
|
||||
*/
|
||||
function init(id, editType: FormEditType) {
|
||||
initFormEditType(editType)
|
||||
resetForm()
|
||||
if ([FormEditType.Edit, FormEditType.Show].includes(editType)) {
|
||||
// 编辑和查看模式下,先加载商户数据和通道数据,再获取表单数据
|
||||
Promise.all([initMerchantData(), initChannelData()]).then(() => {
|
||||
getInfo(id, editType)
|
||||
})
|
||||
} else {
|
||||
// 添加模式下,需要加载商户数据和通道数据
|
||||
Promise.all([initMerchantData(), initChannelData()]).then(() => {
|
||||
getInfo(id, editType)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化商户数据
|
||||
*/
|
||||
function initMerchantData() {
|
||||
return merchantDropdown().then(({ data }) => {
|
||||
mchNoOptions.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化通道数据
|
||||
*/
|
||||
function initChannelData() {
|
||||
return channelDropdown().then(({ data }) => {
|
||||
channelOptions.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
function getInfo(id, editType: FormEditType) {
|
||||
if ([FormEditType.Edit, FormEditType.Show].includes(editType)) {
|
||||
confirmLoading.value = true
|
||||
get(id).then(({ data }) => {
|
||||
form.value = data
|
||||
confirmLoading.value = false
|
||||
})
|
||||
} else if (editType === FormEditType.Add) {
|
||||
confirmLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 保存
|
||||
function handleOk() {
|
||||
formRef.value?.validate().then(async () => {
|
||||
confirmLoading.value = true
|
||||
if (formEditType.value === FormEditType.Add) {
|
||||
await add(unref(form)).finally(() => (confirmLoading.value = false))
|
||||
createMessage.success('保存成功')
|
||||
} else if (formEditType.value === FormEditType.Edit) {
|
||||
await update(unref(form)).finally(() => (confirmLoading.value = false))
|
||||
createMessage.success('保存成功')
|
||||
}
|
||||
handleCancel()
|
||||
emits('ok')
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商户选择变化处理
|
||||
*/
|
||||
function handleMchNoChange() {
|
||||
// 清空进件商户号
|
||||
form.value.onbMchNo = ''
|
||||
}
|
||||
|
||||
/**
|
||||
* 所属通道选择变化处理
|
||||
*/
|
||||
function handleOnbChannelChange() {
|
||||
// 清空进件商户号
|
||||
form.value.onbMchNo = ''
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置表单的校验
|
||||
*/
|
||||
function resetForm() {
|
||||
nextTick(() => formRef.value?.resetFields())
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
init,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
181
src/views/daxpay/common/onboarded/OnbMchInfoList.vue
Normal file
181
src/views/daxpay/common/onboarded/OnbMchInfoList.vue
Normal file
@@ -0,0 +1,181 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="m-3 p-3 pt-5 bg-white">
|
||||
<b-query
|
||||
:query-params="model.queryParam"
|
||||
:fields="fields"
|
||||
:default-item-count="3"
|
||||
@query="queryPage"
|
||||
@reset="resetQueryParams"
|
||||
/>
|
||||
</div>
|
||||
<div class="m-3 p-3 bg-white">
|
||||
<vxe-toolbar ref="xToolbar" custom refresh :refresh-options="{ queryMethod: queryPage }">
|
||||
<template #buttons>
|
||||
<a-space>
|
||||
<a-button type="primary" pre-icon="ant-design:plus-outlined" @click="add"
|
||||
>新建</a-button
|
||||
>
|
||||
</a-space>
|
||||
</template>
|
||||
</vxe-toolbar>
|
||||
<div class="h-65vh">
|
||||
<vxe-table
|
||||
height="auto"
|
||||
ref="xTable"
|
||||
:row-config="{ keyField: 'id' }"
|
||||
:data="pagination.records"
|
||||
:loading="loading"
|
||||
>
|
||||
<vxe-column type="seq" width="60" />
|
||||
<vxe-column field="onbMchNo" title="进件商户号" :min-width="150">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">{{ row.onbMchNo }}</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="onbMchName" title="进件商户名称" :min-width="150" />
|
||||
<vxe-column field="onbChannel" title="所属通道" align="center" :min-width="120">
|
||||
<template #default="{ row }">
|
||||
{{ dictConvert('channel', row.onbChannel) }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="mchNo" title="商户号" :min-width="150" />
|
||||
<vxe-column field="mchName" title="商户名称" :min-width="150" />
|
||||
<vxe-column field="createTime" title="创建时间" :min-width="140" />
|
||||
<vxe-column fixed="right" :width="160" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="edit(row)">编辑</a-link>
|
||||
<a-divider type="vertical" />
|
||||
<a-popconfirm
|
||||
title="是否删除该进件商户信息?"
|
||||
@confirm="deleteRecord(row)"
|
||||
ok-text="确认"
|
||||
cancel-text="取消"
|
||||
>
|
||||
<a-link danger>删除</a-link>
|
||||
</a-popconfirm>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
</div>
|
||||
<vxe-pager
|
||||
size="medium"
|
||||
:loading="loading"
|
||||
:current-page="pagination.current"
|
||||
:page-size="pagination.size"
|
||||
:total="pagination.total"
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<OnbMchInfoEdit ref="onbMchInfoEdit" @ok="queryPage" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { page, del } from './OnbMchInfo.api'
|
||||
import useTablePage from '@/hooks/bootx/useTablePage'
|
||||
import OnbMchInfoEdit from './OnbMchInfoEdit.vue'
|
||||
import BQuery from '@/components/Bootx/Query/BQuery.vue'
|
||||
import { QueryField, STRING } from '@/components/Bootx/Query/Query'
|
||||
import { FormEditType } from '@/enums/formTypeEnum'
|
||||
import { VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import ALink from '@/components/Link/Link.vue'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { useDict } from '@/hooks/bootx/useDict'
|
||||
|
||||
// 使用hooks
|
||||
const {
|
||||
handleTableChange,
|
||||
pageQueryResHandel,
|
||||
resetQueryParams,
|
||||
pagination,
|
||||
pages,
|
||||
model,
|
||||
loading,
|
||||
} = useTablePage(queryPage)
|
||||
const { createMessage } = useMessage()
|
||||
const { dictConvert } = useDict()
|
||||
|
||||
// 查询条件
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'mchNo', type: STRING, name: '商户号', placeholder: '请输入商户号' },
|
||||
{ field: 'mchName', type: STRING, name: '商户名称', placeholder: '请输入商户名称' },
|
||||
{ field: 'onbMchNo', type: STRING, name: '进件商户号', placeholder: '请输入进件商户号' },
|
||||
{
|
||||
field: 'onbMchName',
|
||||
type: STRING,
|
||||
name: '进件商户名称',
|
||||
placeholder: '请输入进件商户名称',
|
||||
},
|
||||
{ field: 'onbChannel', type: STRING, name: '所属通道', placeholder: '请输入所属通道' },
|
||||
] as QueryField[]
|
||||
})
|
||||
|
||||
const xTable = ref<VxeTableInstance>()
|
||||
const xToolbar = ref<VxeToolbarInstance>()
|
||||
const onbMchInfoEdit = ref<any>()
|
||||
|
||||
onMounted(() => {
|
||||
vxeBind()
|
||||
initData()
|
||||
queryPage()
|
||||
})
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
function initData() {
|
||||
// 可以在这里初始化一些字典数据
|
||||
}
|
||||
|
||||
function vxeBind() {
|
||||
xTable.value?.connectToolbar(xToolbar.value as VxeToolbarInstance)
|
||||
}
|
||||
|
||||
// 分页查询
|
||||
function queryPage() {
|
||||
loading.value = true
|
||||
page({
|
||||
...model.queryParam,
|
||||
...pages,
|
||||
}).then(({ data }) => {
|
||||
pageQueryResHandel(data)
|
||||
})
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*/
|
||||
function add() {
|
||||
onbMchInfoEdit.value.init(null, FormEditType.Add)
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑
|
||||
*/
|
||||
function edit(record) {
|
||||
onbMchInfoEdit.value.init(record.id, FormEditType.Edit)
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
function show(record) {
|
||||
onbMchInfoEdit.value.init(record.id, FormEditType.Show)
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
function deleteRecord(record) {
|
||||
del(record.id).then(() => {
|
||||
createMessage.success('删除成功')
|
||||
queryPage()
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
Reference in New Issue
Block a user