mirror of
https://gitee.com/bootx/dax-pay-ui.git
synced 2025-09-03 10:56:00 +00:00
ref 商户相关配置联调
This commit is contained in:
1
src/assets/daxpay/alipay.svg
Normal file
1
src/assets/daxpay/alipay.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg t="1718074269709" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18464" width="128" height="128"><path d="M1024.0512 701.0304V196.864A196.9664 196.9664 0 0 0 827.136 0H196.864A196.9664 196.9664 0 0 0 0 196.864v630.272A196.9152 196.9152 0 0 0 196.864 1024h630.272a197.12 197.12 0 0 0 193.8432-162.0992c-52.224-22.6304-278.528-120.32-396.4416-176.64-89.7024 108.6976-183.7056 173.9264-325.3248 173.9264s-236.1856-87.2448-224.8192-194.048c7.4752-70.0416 55.552-184.576 264.2944-164.9664 110.08 10.3424 160.4096 30.8736 250.1632 60.5184 23.1936-42.5984 42.496-89.4464 57.1392-139.264H248.064v-39.424h196.9152V311.1424H204.8V267.776h240.128V165.632s2.1504-15.9744 19.8144-15.9744h98.4576V267.776h256v43.4176h-256V381.952h208.8448a805.9904 805.9904 0 0 1-84.8384 212.6848c60.672 22.016 336.7936 106.3936 336.7936 106.3936zM283.5456 791.6032c-149.6576 0-173.312-94.464-165.376-133.9392 7.8336-39.3216 51.2-90.624 134.4-90.624 95.5904 0 181.248 24.4736 284.0576 74.5472-72.192 94.0032-160.9216 150.016-253.0816 150.016z" fill="#009FE8" p-id="18465"></path></svg>
|
After Width: | Height: | Size: 1.1 KiB |
1
src/assets/daxpay/unionPay.svg
Normal file
1
src/assets/daxpay/unionPay.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 12 KiB |
1
src/assets/daxpay/wechat.svg
Normal file
1
src/assets/daxpay/wechat.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1718072839738" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7146" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M911.655822 21.344711a91.022222 91.022222 0 0 1 91.022222 91.022222v799.266134a91.022222 91.022222 0 0 1-91.022222 91.022222H112.344178a91.022222 91.022222 0 0 1-91.022222-91.022222V112.366933a91.022222 91.022222 0 0 1 91.022222-91.022222h799.311644zM561.925689 210.807467a303.900444 303.900444 0 0 0-66.446222-3.049245c-31.425422 1.661156-62.850844 6.599111-94.253511 16.543289-54.567822 18.181689-104.152178 46.2848-145.499023 90.9312a276.024889 276.024889 0 0 0-64.466489 110.774045 255.772444 255.772444 0 0 0-9.921422 51.245511v19.842844l0.068267 2.434845c0.2048 1.683911 0.864711 2.525867 3.231289 2.525866 0 9.921422 0 18.204444 1.661155 26.464711 3.299556 19.820089 8.260267 39.662933 14.882134 57.867378 16.520533 41.324089 42.985244 77.687467 76.049066 107.451733l5.9392 5.597867c7.964444 7.054222 15.883378 12.583822 23.825067 19.205689 3.299556 1.661156 3.299556 3.299556 3.299556 6.599111l-5.848178 29.195378a722.488889 722.488889 0 0 0-7.3728 43.576889c-1.661156 3.299556-1.661156 8.260267-1.661156 11.559822 0 4.960711 3.299556 6.599111 6.599111 6.599111 3.322311 0 8.283022-1.6384 11.605334-3.299555 18.158933-9.898667 34.702222-19.820089 52.883911-31.402667l7.850666-4.960711c5.006222-3.299556 9.784889-6.599111 15.291734-9.921422h4.960711c18.204444 6.599111 38.024533 11.582578 57.867378 14.882133 11.582578 1.661156 24.803556 1.661156 38.024533 3.299555h29.764267c16.543289 0 34.724978-1.6384 52.906666-4.960711 26.464711-4.960711 52.906667-13.198222 79.371378-23.1424a329.090844 329.090844 0 0 0 119.034311-82.670933c28.103111-31.402667 47.945956-66.127644 59.528534-105.813333 4.960711-18.181689 8.260267-36.363378 9.921422-54.545067 3.299556-43.008-4.960711-84.332089-23.165156-124.017778a48.082489 48.082489 0 0 0-4.391822-10.831644l-3.868444-7.350045a1.820444 1.820444 0 0 0-0.250312-0.978489l-1.137777-1.342577-0.273067-0.978489c-1.6384 1.2288-3.413333 2.366578-5.211022 3.458844l-11.0592 6.303289-5.233778 3.458845c-100.829867 59.528533-200.021333 119.034311-300.896711 178.562844-18.181689 11.582578-36.363378 23.1424-56.206222 33.063822a33.336889 33.336889 0 0 1-18.181689 4.960711c-9.921422 1.661156-18.204444-3.299556-23.1424-14.882133-16.543289-39.685689-33.063822-77.710222-49.607111-117.373156-3.299556-8.283022-4.960711-16.543289-6.599111-24.803555v-1.661156c0-9.921422 4.937956-13.220978 13.198222-8.260266l16.452266 10.831644c3.413333 2.321067 6.712889 4.7104 10.012445 7.350045 13.220978 8.260267 24.803556 16.543289 38.024533 24.803555 16.543289 9.921422 34.724978 11.559822 52.906667 3.299556 92.615111-41.324089 185.184711-84.309333 277.777067-127.294578 13.198222-4.960711 26.441956-11.582578 39.662933-18.204445a1.820444 1.820444 0 0 0 0.978489-0.227555l1.365333-1.137778 0.978489-0.273067c-4.960711-4.960711-8.283022-9.921422-13.243733-14.882133-38.001778-39.685689-82.648178-67.7888-133.916445-85.970489l-9.102222-3.345066a295.844978 295.844978 0 0 0-53.703111-13.198223z" fill="#15BA12" p-id="7147"></path></svg>
|
After Width: | Height: | Size: 3.2 KiB |
@@ -31,12 +31,10 @@ export interface QueryField {
|
||||
name?: string
|
||||
// 精度
|
||||
precision?: number
|
||||
// 查询列表
|
||||
// 下拉列表内容
|
||||
selectList?: LabeledValue[] | null
|
||||
// 时间格式化
|
||||
format?: string | null
|
||||
// 默认值 未启用
|
||||
defaultValue?: number | string
|
||||
}
|
||||
|
||||
/**
|
||||
|
8
src/enums/daxpay/ChannelEnum.ts
Normal file
8
src/enums/daxpay/ChannelEnum.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
/**
|
||||
* 支付通道
|
||||
*/
|
||||
export enum ChannelEnum {
|
||||
ALI = 'ali_pay',
|
||||
WECHAT = 'wechat_pay',
|
||||
UNION_PAY = 'union_pay',
|
||||
}
|
@@ -13,7 +13,7 @@
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
validate-trigger="['blur', 'change']"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
>
|
||||
|
@@ -13,7 +13,7 @@
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
validate-trigger="['blur', 'change']"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
>
|
||||
|
@@ -13,7 +13,7 @@
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
validate-trigger="['blur', 'change']"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
>
|
||||
|
@@ -25,7 +25,7 @@ export const get = (id) => {
|
||||
*/
|
||||
export const add = (obj) => {
|
||||
return defHttp.post<Result<void>>({
|
||||
url: '/mch/app/save',
|
||||
url: '/mch/app/add',
|
||||
data: obj,
|
||||
})
|
||||
}
|
||||
@@ -60,17 +60,17 @@ export interface MchApp extends BaseEntity {
|
||||
// 应用名称
|
||||
appName?: string
|
||||
// 签名方式
|
||||
signType?: string
|
||||
signType: string
|
||||
// 签名秘钥
|
||||
signSecret?: string
|
||||
// 是否对请求进行验签
|
||||
reqSign?: boolean
|
||||
reqSign: boolean
|
||||
// 支付限额
|
||||
limitAmount?: number
|
||||
limitAmount: number
|
||||
// 订单默认超时时间(分钟)
|
||||
orderTimeout: number
|
||||
// 异步消息通知类型
|
||||
notifyType?: string
|
||||
notifyType: string
|
||||
// 通知地址, http/WebSocket 需要配置
|
||||
notifyUrl?: string
|
||||
// 状态
|
||||
|
@@ -12,7 +12,7 @@
|
||||
class="small-from-item"
|
||||
:model="form"
|
||||
ref="formRef"
|
||||
validate-trigger="['blur', 'change']"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:rules="rules"
|
||||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
@@ -20,11 +20,16 @@
|
||||
<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" v-show="!addable">
|
||||
{{ form.mchNo }}
|
||||
<a-form-item label="商户号" name="mchNo">
|
||||
<a-select
|
||||
v-model:value="form.mchNo"
|
||||
:disabled="showable"
|
||||
placeholder="请选择商户"
|
||||
:options="mchNoOptions"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="应用号" name="appId" v-if="!addable">
|
||||
{{ form.appId }}
|
||||
<a-tag> {{ form.appId }}</a-tag>
|
||||
</a-form-item>
|
||||
<a-form-item label="应用名称" name="appName">
|
||||
<a-input v-model:value="form.appName" :disabled="showable" placeholder="请输入应用名称" />
|
||||
@@ -64,14 +69,15 @@
|
||||
<a-textarea v-model:value="form.signSecret" :disabled="showable" placeholder="请输入公钥" />
|
||||
<a-button type="link" @click="genSignSecret">生成秘钥</a-button>
|
||||
</a-form-item>
|
||||
<a-form-item label="通知方式" name="noticeType">
|
||||
<a-radio-group v-model:value="form.signType" button-style="solid">
|
||||
<a-form-item label="通知方式" name="notifyType">
|
||||
<a-radio-group v-model:value="form.notifyType" button-style="solid">
|
||||
<a-radio-button value="none">不启用</a-radio-button>
|
||||
<a-radio-button value="http">http</a-radio-button>
|
||||
<a-radio-button value="websocket">websocket</a-radio-button>
|
||||
<a-radio-button disabled value="mq">消息队列</a-radio-button>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
<a-form-item label="通知地址" name="notifyUrl">
|
||||
<a-form-item label="通知地址" name="notifyUrl" v-if="form.notifyType !== 'none'">
|
||||
<a-input v-model:value="form.notifyUrl" :disabled="showable" placeholder="请输入通知地址" />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
@@ -98,7 +104,9 @@
|
||||
import { FormInstance, Rule } from 'ant-design-vue/lib/form'
|
||||
import { FormEditType } from '@/enums/formTypeEnum'
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { buildUUID } from "@/utils/uuid";
|
||||
import { buildUUID } from '@/utils/uuid'
|
||||
import { dropdown as merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
|
||||
const {
|
||||
initFormEditType,
|
||||
@@ -115,27 +123,48 @@
|
||||
|
||||
// 表单
|
||||
const formRef = ref<FormInstance>()
|
||||
let form = ref<MchApp>({})
|
||||
const form = ref<MchApp>({
|
||||
notifyType: 'none',
|
||||
signType: 'HMAC_SHA256',
|
||||
limitAmount: 200.0,
|
||||
orderTimeout: 5,
|
||||
reqSign: true,
|
||||
})
|
||||
const mchNoOptions = ref<LabeledValue[]>([])
|
||||
|
||||
// 校验
|
||||
const rules = reactive({
|
||||
mchNo: [{ required: true, message: '请选择所属商户' }],
|
||||
appName: [{ required: true, message: '请输入应用名称' }],
|
||||
signType: [{ required: true, message: '请选择签名方式' }],
|
||||
signSecret: [{ required: true, message: '请输入签名秘钥' }],
|
||||
reqSign: [{ required: true, message: '请选择是否验签' }],
|
||||
limitAmount: [{ required: true, message: '请选择是否验签' }],
|
||||
orderTimeout: [{ required: true, message: '请选择是否验签' }],
|
||||
notifyType: [{ required: true, message: '请选择是否验签' }],
|
||||
limitAmount: [{ required: true, message: '请输入支付限额(元)' }],
|
||||
orderTimeout: [{ required: true, message: '请输入订单默认超时时间(分钟)' }],
|
||||
notifyType: [{ required: true, message: '请选择消息通知方式' }],
|
||||
} as Record<string, Rule[]>)
|
||||
// 事件
|
||||
const emits = defineEmits(['ok'])
|
||||
// 入口
|
||||
|
||||
/**
|
||||
* 入口
|
||||
*/
|
||||
function init(id, editType: FormEditType) {
|
||||
initMerchant()
|
||||
initFormEditType(editType)
|
||||
resetForm()
|
||||
getInfo(id, editType)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化商户列表信息
|
||||
*/
|
||||
function initMerchant() {
|
||||
merchantDropdown().then(({ data }) => {
|
||||
mchNoOptions.value = data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*/
|
||||
@@ -169,7 +198,7 @@
|
||||
* 生成秘钥
|
||||
*/
|
||||
function genSignSecret() {
|
||||
form.value.signSecret = buildUUID()+buildUUID()
|
||||
form.value.signSecret = buildUUID() + buildUUID()
|
||||
}
|
||||
/**
|
||||
* 重置表单的校验
|
||||
|
@@ -4,6 +4,7 @@
|
||||
<b-query
|
||||
:query-params="model.queryParam"
|
||||
:fields="fields"
|
||||
:default-item-count="3"
|
||||
@query="queryPage"
|
||||
@reset="resetQueryParams"
|
||||
/>
|
||||
@@ -39,15 +40,13 @@
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="createTime" title="创建时间" :min-width="120" />
|
||||
<vxe-column fixed="right" width="150" :showOverflow="false" title="操作">
|
||||
<vxe-column fixed="right" :width="220" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<span>
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
</span>
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
<a-divider type="vertical" />
|
||||
<span>
|
||||
<a-link @click="edit(row)">编辑</a-link>
|
||||
</span>
|
||||
<a-link @click="edit(row)">编辑</a-link>
|
||||
<a-divider type="vertical" />
|
||||
<a-link @click="showChannelSetup(row)">通道配置</a-link>
|
||||
<a-divider type="vertical" />
|
||||
<a-link danger @click="remove(row)">删除</a-link>
|
||||
</template>
|
||||
@@ -62,22 +61,26 @@
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<MchAppEdit ref="mchApp" @ok="queryPage" />
|
||||
<ChannelSetup ref="channelSetup" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { del, page } from './MchApp.api'
|
||||
import useTablePage from '@/hooks/bootx/useTablePage'
|
||||
import MchAppEdit from './MchAppEdit.vue'
|
||||
import BQuery from '@/components/Bootx/Query/BQuery.vue'
|
||||
import { STRING } from '@/components/Bootx/Query/Query'
|
||||
import { LIST, QueryField, STRING } from '@/components/Bootx/Query/Query'
|
||||
import { FormEditType } from '@/enums/formTypeEnum'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import ALink from '@/components/Link/Link.vue'
|
||||
import { useDict } from '@/hooks/bootx/useDict'
|
||||
import { dropdown as merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import ChannelSetup from '@/views/daxpay/admin/merchant/channel/ChannelSetup.vue'
|
||||
|
||||
// 使用hooks
|
||||
const {
|
||||
@@ -92,19 +95,40 @@
|
||||
const { createMessage, createConfirm } = useMessage()
|
||||
const { dictConvert } = useDict()
|
||||
// 查询条件
|
||||
const fields = [
|
||||
{ field: 'code', formType: STRING, name: '编码', placeholder: '请输入终端编码' },
|
||||
{ field: 'name', formType: STRING, name: '名称', placeholder: '请输入终端名称' },
|
||||
]
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{
|
||||
field: 'mchNo',
|
||||
type: LIST,
|
||||
name: '商户',
|
||||
selectList: mchNoOptions.value,
|
||||
placeholder: '请选择商户',
|
||||
},
|
||||
{ field: 'appId', type: STRING, name: '商户号', placeholder: '请输入应用号' },
|
||||
{ field: 'appName', type: STRING, name: '应用名称', placeholder: '请输入应用名称' },
|
||||
] as QueryField[]
|
||||
})
|
||||
const xTable = ref<VxeTableInstance>()
|
||||
const xToolbar = ref<VxeToolbarInstance>()
|
||||
const mchApp: any = ref()
|
||||
const channelSetup: any = ref()
|
||||
const mchNoOptions = ref<LabeledValue[]>([])
|
||||
|
||||
onMounted(() => {
|
||||
vxeBind()
|
||||
initMerchant()
|
||||
queryPage()
|
||||
})
|
||||
|
||||
/**
|
||||
* 初始化商户列表信息
|
||||
*/
|
||||
function initMerchant() {
|
||||
merchantDropdown().then(({ data }) => {
|
||||
mchNoOptions.value = data
|
||||
})
|
||||
}
|
||||
|
||||
function vxeBind() {
|
||||
xTable.value?.connect(xToolbar.value as VxeToolbarInstance)
|
||||
}
|
||||
@@ -133,6 +157,13 @@
|
||||
mchApp.value.init(record.id, FormEditType.Show)
|
||||
}
|
||||
|
||||
/**
|
||||
* channelSetup
|
||||
*/
|
||||
function showChannelSetup(record) {
|
||||
channelSetup.value.init(record.appId)
|
||||
}
|
||||
|
||||
// 删除
|
||||
function remove(record) {
|
||||
createConfirm({
|
||||
|
31
src/views/daxpay/admin/merchant/channel/ChannelConfig.api.ts
Normal file
31
src/views/daxpay/admin/merchant/channel/ChannelConfig.api.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { defHttp } from '@/utils/http/axios'
|
||||
import { Result } from '#/axios'
|
||||
import { BaseEntity } from '#/web'
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*/
|
||||
export function findAll(appId) {
|
||||
return defHttp.get<Result<ChannelConfig[]>>({
|
||||
url: '/channel/config/findAllByAppId',
|
||||
params: {
|
||||
appId,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付通道配着
|
||||
*/
|
||||
export interface ChannelConfig extends BaseEntity {
|
||||
// 通道编码
|
||||
channel?: string
|
||||
// 通道名称
|
||||
name?: string
|
||||
// 是否启用
|
||||
enable?: boolean
|
||||
// 通道商户号
|
||||
outMchNo?: string
|
||||
// 通道APPID
|
||||
outAppId?: string
|
||||
}
|
115
src/views/daxpay/admin/merchant/channel/ChannelSetup.vue
Normal file
115
src/views/daxpay/admin/merchant/channel/ChannelSetup.vue
Normal file
@@ -0,0 +1,115 @@
|
||||
<template>
|
||||
<basic-drawer
|
||||
showFooter
|
||||
v-bind="$attrs"
|
||||
width="70%"
|
||||
title="通道配置"
|
||||
:mask-closable="true"
|
||||
:open="visible"
|
||||
@close="handleCancel"
|
||||
>
|
||||
<div class="m-3 p-3 bg-white">
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-list
|
||||
style="margin-left: 20px"
|
||||
:grid="{ gutter: 16, xs: 1, sm: 2, md: 3, lg: 4, xl: 5, xxl: 6 }"
|
||||
:data-source="channelConfigs"
|
||||
>
|
||||
<template #renderItem="{ item }">
|
||||
<a-card hoverable style="max-width: 200px; margin-bottom: 20px" @click="setting(item)">
|
||||
<template #cover>
|
||||
<a-image
|
||||
style="width: 150px; height: 150px; margin-top: 20px"
|
||||
:preview="false"
|
||||
:src="getIcon(item.channel)"
|
||||
:fallback="fallbackImg"
|
||||
/>
|
||||
</template>
|
||||
<a-card-meta
|
||||
style="display: flex; justify-content: space-between"
|
||||
:title="item.name"
|
||||
/>
|
||||
</a-card>
|
||||
</template>
|
||||
</a-list>
|
||||
</a-spin>
|
||||
</div>
|
||||
</basic-drawer>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ref } from 'vue'
|
||||
import { findAll, ChannelConfig } from './ChannelConfig.api'
|
||||
import { ChannelEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import alipay from '@/assets/daxpay/alipay.svg'
|
||||
import wechat from '@/assets/daxpay/wechat.svg'
|
||||
import unionPay from '@/assets/daxpay/unionPay.svg'
|
||||
|
||||
const confirmLoading = ref(false)
|
||||
const channelConfigs = ref<ChannelConfig[]>([])
|
||||
|
||||
const channelPayConfigEdit = ref<any>()
|
||||
const visible = ref(false)
|
||||
|
||||
// 默认图片的base64值
|
||||
const fallbackImg =
|
||||
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg=='
|
||||
|
||||
/**
|
||||
* 初始化并展示
|
||||
*/
|
||||
async function init(appId: string) {
|
||||
visible.value = true
|
||||
confirmLoading.value = true
|
||||
// 列表信息
|
||||
findAll(appId).then(({ data }) => {
|
||||
channelConfigs.value = data
|
||||
confirmLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开支付设置界面
|
||||
*/
|
||||
function setting(record: ChannelConfig) {
|
||||
channelPayConfigEdit.value.show(record)
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭页面
|
||||
*/
|
||||
function handleCancel() {
|
||||
visible.value = false
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取icon
|
||||
*/
|
||||
function getIcon(type: string) {
|
||||
switch (type) {
|
||||
case ChannelEnum.ALI:
|
||||
return alipay
|
||||
case ChannelEnum.WECHAT:
|
||||
return wechat
|
||||
case ChannelEnum.UNION_PAY:
|
||||
return unionPay
|
||||
default:
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
defineExpose({ init })
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
:deep(.ant-card-meta-title) {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
:deep(.ant-image) {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
@@ -1,6 +1,7 @@
|
||||
import { defHttp } from '@/utils/http/axios'
|
||||
import { PageResult, Result } from '#/axios'
|
||||
import { BaseEntity } from '#/web'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
@@ -25,7 +26,7 @@ export const get = (id) => {
|
||||
*/
|
||||
export const add = (obj) => {
|
||||
return defHttp.post<Result<void>>({
|
||||
url: '/merchant/save',
|
||||
url: '/merchant/add',
|
||||
data: obj,
|
||||
})
|
||||
}
|
||||
@@ -39,6 +40,15 @@ export const update = (obj) => {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商户下拉列表
|
||||
*/
|
||||
export const dropdown = () => {
|
||||
return defHttp.get<Result<LabeledValue[]>>({
|
||||
url: '/merchant/dropdown',
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
|
@@ -12,7 +12,7 @@
|
||||
class="small-from-item"
|
||||
:model="form"
|
||||
ref="formRef"
|
||||
validate-trigger="['blur', 'change']"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:rules="rules"
|
||||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
|
@@ -65,7 +65,7 @@
|
||||
import useTablePage from '@/hooks/bootx/useTablePage'
|
||||
import MerchantEdit from './MerchantEdit.vue'
|
||||
import BQuery from '@/components/Bootx/Query/BQuery.vue'
|
||||
import { STRING } from '@/components/Bootx/Query/Query'
|
||||
import {QueryField, STRING} from '@/components/Bootx/Query/Query'
|
||||
import { FormEditType } from '@/enums/formTypeEnum'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
@@ -86,9 +86,9 @@
|
||||
const { dictConvert } = useDict()
|
||||
// 查询条件
|
||||
const fields = [
|
||||
{ field: 'code', formType: STRING, name: '编码', placeholder: '请输入终端编码' },
|
||||
{ field: 'name', formType: STRING, name: '名称', placeholder: '请输入终端名称' },
|
||||
]
|
||||
{ field: 'mchName', type: STRING, name: '商户名称', placeholder: '请输入商户名称' },
|
||||
{ field: 'companyName', type: STRING, name: '公司名称', placeholder: '请输入公司名称' },
|
||||
] as QueryField[]
|
||||
const xTable = ref<VxeTableInstance>()
|
||||
const xToolbar = ref<VxeToolbarInstance>()
|
||||
const merchantEdit: any = ref()
|
||||
|
@@ -72,7 +72,7 @@
|
||||
import useTablePage from '@/hooks/bootx/useTablePage'
|
||||
import ClientEdit from './ClientEdit.vue'
|
||||
import BQuery from '@/components/Bootx/Query/BQuery.vue'
|
||||
import { STRING } from '@/components/Bootx/Query/Query'
|
||||
import {QueryField, STRING} from '@/components/Bootx/Query/Query'
|
||||
import { FormEditType } from '@/enums/formTypeEnum'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
@@ -92,9 +92,9 @@
|
||||
|
||||
// 查询条件
|
||||
const fields = [
|
||||
{ field: 'code', formType: STRING, name: '编码', placeholder: '请输入终端编码' },
|
||||
{ field: 'name', formType: STRING, name: '名称', placeholder: '请输入终端名称' },
|
||||
]
|
||||
{ field: 'code', type: STRING, name: '编码', placeholder: '请输入终端编码' },
|
||||
{ field: 'name', type: STRING, name: '名称', placeholder: '请输入终端名称' },
|
||||
] as QueryField[]
|
||||
const xTable = ref<VxeTableInstance>()
|
||||
const xToolbar = ref<VxeToolbarInstance>()
|
||||
const clientEdit: any = ref()
|
||||
|
@@ -12,7 +12,7 @@
|
||||
class="small-from-item"
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
validate-trigger="['blur', 'change']"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:rules="rules"
|
||||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
|
@@ -13,7 +13,7 @@
|
||||
ref="formRef"
|
||||
class="small-from-item"
|
||||
:model="form"
|
||||
validate-trigger="['blur', 'change']"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:rules="rules"
|
||||
:labelCol="labelCol"
|
||||
:wrapperCol="wrapperCol"
|
||||
|
@@ -12,7 +12,7 @@
|
||||
class="small-from-item"
|
||||
:model="form"
|
||||
ref="formRef"
|
||||
validate-trigger="['blur', 'change']"
|
||||
:validate-trigger="['blur', 'change']"
|
||||
:rules="rules"
|
||||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
|
Reference in New Issue
Block a user