mirror of
https://gitee.com/bootx/dax-pay-ui.git
synced 2025-10-14 06:07:49 +00:00
feat 通道收银台配置
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* 支付通道
|
||||
*/
|
||||
export enum ChannelEnum {
|
||||
export enum DaxpayEnum {
|
||||
ALI = 'ali_pay',
|
||||
WECHAT = 'wechat_pay',
|
||||
UNION_PAY = 'union_pay',
|
||||
@@ -50,3 +50,11 @@ export enum ChannelAuthStatusEnum {
|
||||
/** 数据不存在 */
|
||||
NOT_EXIST = 'not_exist',
|
||||
}
|
||||
|
||||
/**
|
||||
* 收银台类型
|
||||
*/
|
||||
export enum CashierTypeEnum {
|
||||
WECHAT_PAY = 'wechat_pay',
|
||||
ALIPAY = 'alipay',
|
||||
}
|
@@ -93,7 +93,7 @@
|
||||
import { merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { mchAppDropdown } from '@/views/daxpay/common/merchant/app/MchApp.api'
|
||||
import { useDict } from '@/hooks/bootx/useDict'
|
||||
import { ChannelAuthStatusEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { ChannelAuthStatusEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
|
||||
const { createMessage } = useMessage()
|
||||
const { dictDropDown } = useDict()
|
||||
|
@@ -18,7 +18,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import { useDict } from '@/hooks/bootx/useDict'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import DevelopTradePay from './DevelopTradePay.vue'
|
||||
|
@@ -28,7 +28,7 @@
|
||||
:loading="loading"
|
||||
>
|
||||
<vxe-column type="seq" width="60" />
|
||||
<vxe-column field="appId" title="应用号" :min-width="100" >
|
||||
<vxe-column field="appId" title="应用号" :min-width="100">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">{{ row.appId }}</a-link>
|
||||
</template>
|
||||
@@ -59,6 +59,12 @@
|
||||
<a-menu-item>
|
||||
<a-link @click="showNotifyConfig(row)">订阅配置</a-link>
|
||||
</a-menu-item>
|
||||
<a-menu-item>
|
||||
<a-link @click="showCashierConfig(row)">收银配置</a-link>
|
||||
</a-menu-item>
|
||||
<a-menu-item>
|
||||
<a-link @click="showCashierQrCOde(row)">收银码牌</a-link>
|
||||
</a-menu-item>
|
||||
<a-menu-item>
|
||||
<a-link danger @click="remove(row)">删除</a-link>
|
||||
</a-menu-item>
|
||||
@@ -79,6 +85,8 @@
|
||||
/>
|
||||
<mch-app-edit ref="mchApp" @ok="queryPage" />
|
||||
<channel-config-list ref="channelSetup" />
|
||||
<ChannelCashierConfigList ref="channelCashierConfigList" />
|
||||
<ChannelCashierQrCode ref="channelCashierQrCode" />
|
||||
<MerchantNotifyConfigList ref="merchantNotifyConfigList" />
|
||||
</div>
|
||||
</div>
|
||||
@@ -101,6 +109,8 @@
|
||||
import ChannelConfigList from '@/views/daxpay/common/merchant/channel/ChannelConfigList.vue'
|
||||
import MerchantNotifyConfigList from '@/views/daxpay/common/merchant/notify/MerchantNotifyConfigList.vue'
|
||||
import Icon from '@/components/Icon/Icon.vue'
|
||||
import ChannelCashierConfigList from '@/views/daxpay/common/merchant/cashier/ChannelCashierConfigList.vue'
|
||||
import ChannelCashierQrCode from '@/views/daxpay/common/merchant/cashier/ChannelCashierQrCode.vue'
|
||||
|
||||
// 使用hooks
|
||||
const {
|
||||
@@ -128,12 +138,15 @@
|
||||
{ field: 'appName', type: STRING, name: '应用名称', placeholder: '请输入应用名称' },
|
||||
] as QueryField[]
|
||||
})
|
||||
const mchNoOptions = ref<LabeledValue[]>([])
|
||||
|
||||
const xTable = ref<VxeTableInstance>()
|
||||
const xToolbar = ref<VxeToolbarInstance>()
|
||||
const mchApp: any = ref()
|
||||
const channelSetup: any = ref()
|
||||
const merchantNotifyConfigList: any = ref()
|
||||
const mchNoOptions = ref<LabeledValue[]>([])
|
||||
const mchApp = ref<any>()
|
||||
const channelSetup = ref<any>()
|
||||
const merchantNotifyConfigList = ref<any>()
|
||||
const channelCashierConfigList = ref<any>()
|
||||
const channelCashierQrCode = ref<any>()
|
||||
|
||||
onMounted(() => {
|
||||
vxeBind()
|
||||
@@ -191,6 +204,20 @@
|
||||
merchantNotifyConfigList.value.init(record.appId)
|
||||
}
|
||||
|
||||
/**
|
||||
* 收银配置
|
||||
*/
|
||||
function showCashierConfig(record) {
|
||||
channelCashierConfigList.value.init(record.appId)
|
||||
}
|
||||
|
||||
/**
|
||||
* 收银码牌
|
||||
*/
|
||||
function showCashierQrCOde(record) {
|
||||
channelCashierQrCode.value.init(record.appId)
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
|
@@ -0,0 +1,72 @@
|
||||
import { defHttp } from '@/utils/http/axios'
|
||||
import { Result } from '#/axios'
|
||||
import { MchEntity } from '#/web'
|
||||
|
||||
/**
|
||||
* 配置列表
|
||||
*/
|
||||
export function findAll() {
|
||||
return defHttp.get<Result<MchEntity>>({ url: '/channel/cashier/config/list' })
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置详情
|
||||
*/
|
||||
export function get(id) {
|
||||
return defHttp.get<Result<ChannelCashierConfig>>({
|
||||
url: '/channel/cashier/config/findById',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置保存
|
||||
*/
|
||||
export function save(data: ChannelCashierConfig) {
|
||||
return defHttp.post<Result<ChannelCashierConfig>>({
|
||||
url: '/channel/cashier/config/save',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置更新
|
||||
*/
|
||||
export function update(data: ChannelCashierConfig) {
|
||||
return defHttp.post<Result<ChannelCashierConfig>>({
|
||||
url: '/channel/cashier/config/update',
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置删除
|
||||
*/
|
||||
export function remove(id) {
|
||||
return defHttp.post<Result<ChannelCashierConfig>>({
|
||||
url: '/channel/cashier/config/remove',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 通道收银台配置
|
||||
*/
|
||||
export interface ChannelCashierConfig {
|
||||
// 商户号
|
||||
mchNo?: string
|
||||
// 应用号
|
||||
appId?: string
|
||||
// 收银台类型
|
||||
cashierType?: string
|
||||
// 收银台名称
|
||||
cashierName?: string
|
||||
// 支付通道
|
||||
channel?: string
|
||||
// 支付方式
|
||||
payMethod?: string
|
||||
// 是否开启分账
|
||||
allocation?: boolean
|
||||
// 自动分账
|
||||
autoAllocation?: boolean
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
<script setup lang="ts">
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
</style>
|
@@ -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: 1, md: 2, lg: 3, xl: 4, xxl: 5 }"
|
||||
: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">
|
||||
<template #description>
|
||||
<template v-if="item.enable">
|
||||
<a-badge dot color="green" />
|
||||
<span style="color: green">已启用</span>
|
||||
</template>
|
||||
<template v-else-if="item.enable === false">
|
||||
<a-badge dot color="red" />
|
||||
<span style="color: red">未启用</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<a-badge dot color="grey" />
|
||||
<span style="color: grey">未配置</span>
|
||||
</template>
|
||||
</template>
|
||||
</a-card-meta>
|
||||
</a-card>
|
||||
</template>
|
||||
</a-list>
|
||||
</a-spin>
|
||||
</div>
|
||||
<channel-cashier-config-edit ref="channelCashierConfigEdit" @ok="query" />
|
||||
</basic-drawer>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ref } from 'vue'
|
||||
import { findAll, ChannelCashierConfig } from './ChannelCashierConfig.api'
|
||||
import ChannelCashierConfigEdit from './ChannelCashierConfigEdit.vue'
|
||||
|
||||
const confirmLoading = ref(false)
|
||||
|
||||
const currentAppId = ref('')
|
||||
|
||||
const visible = ref(false)
|
||||
|
||||
/**
|
||||
* 初始化并展示
|
||||
*/
|
||||
async function init(appId: string) {
|
||||
visible.value = true
|
||||
currentAppId.value = appId
|
||||
query()
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
function query() {
|
||||
// 列表信息
|
||||
confirmLoading.value = true
|
||||
findAll(currentAppId.value).then(({ data }) => {
|
||||
channelConfigs.value = data
|
||||
confirmLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开支付设置界面
|
||||
*/
|
||||
function setting(record: ChannelConfig) {
|
||||
channelConfigEdit.value.show(record)
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭页面
|
||||
*/
|
||||
function handleCancel() {
|
||||
visible.value = false
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取icon
|
||||
*/
|
||||
function getIcon(type: string) {
|
||||
switch (type) {
|
||||
case DaxpayEnum.ALI:
|
||||
return alipay
|
||||
case DaxpayEnum.WECHAT:
|
||||
return wechat
|
||||
case DaxpayEnum.UNION_PAY:
|
||||
return unionPay
|
||||
default:
|
||||
return ''
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="less"></style>
|
@@ -0,0 +1,11 @@
|
||||
<script setup lang="ts">
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
</style>
|
@@ -6,7 +6,7 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import { useMessage } from '@/hooks/web/useMessage'
|
||||
import { ChannelEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { DaxpayEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import { ChannelConfig } from './ChannelConfig.api'
|
||||
import AlipayConfigEdit from '@/views/daxpay/common/channel/alipay/config/AlipayConfigEdit.vue'
|
||||
import WechatPayConfigEdit from '@/views/daxpay/common/channel/wechat/config/WechatPayConfigEdit.vue'
|
||||
@@ -24,15 +24,15 @@
|
||||
*/
|
||||
function show(record: ChannelConfig) {
|
||||
switch (record.channel) {
|
||||
case ChannelEnum.ALI: {
|
||||
case DaxpayEnum.ALI: {
|
||||
alipay.value.init(record)
|
||||
break
|
||||
}
|
||||
case ChannelEnum.WECHAT: {
|
||||
case DaxpayEnum.WECHAT: {
|
||||
wechat.value.init(record)
|
||||
break
|
||||
}
|
||||
case ChannelEnum.UNION_PAY: {
|
||||
case DaxpayEnum.UNION_PAY: {
|
||||
union.value.init(record)
|
||||
break
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@
|
||||
import { BasicDrawer } from '@/components/Drawer'
|
||||
import { ref } from 'vue'
|
||||
import { findAll, ChannelConfig } from './ChannelConfig.api'
|
||||
import { ChannelEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { DaxpayEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import alipay from '@/assets/daxpay/alipay.svg'
|
||||
import wechat from '@/assets/daxpay/wechat.svg'
|
||||
import unionPay from '@/assets/daxpay/unionPay.svg'
|
||||
@@ -112,11 +112,11 @@
|
||||
*/
|
||||
function getIcon(type: string) {
|
||||
switch (type) {
|
||||
case ChannelEnum.ALI:
|
||||
case DaxpayEnum.ALI:
|
||||
return alipay
|
||||
case ChannelEnum.WECHAT:
|
||||
case DaxpayEnum.WECHAT:
|
||||
return wechat
|
||||
case ChannelEnum.UNION_PAY:
|
||||
case DaxpayEnum.UNION_PAY:
|
||||
return unionPay
|
||||
default:
|
||||
return ''
|
||||
|
@@ -89,7 +89,7 @@
|
||||
import PayOrderInfo from '@/views/daxpay/common/order/pay/PayOrderInfo.vue'
|
||||
import TransferOrderInfo from '@/views/daxpay/common/order/transfer/TransferOrderInfo.vue'
|
||||
import NotifyRecordList from './NotifyRecordList.vue'
|
||||
import { NotifyContentTypeEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { NotifyContentTypeEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import RefundOrderInfo from '@/views/daxpay/common/order/refund/RefundOrderInfo.vue'
|
||||
import { merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { mchAppDropdown } from '@/views/daxpay/common/merchant/app/MchApp.api'
|
||||
|
@@ -5,7 +5,7 @@ import {
|
||||
PayAllocStatusEnum,
|
||||
PayRefundStatusEnum,
|
||||
PayStatusEnum,
|
||||
} from '@/enums/daxpay/TradeStatusEnum'
|
||||
} from '@/enums/daxpay/tradeStatusEnum'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
|
@@ -161,7 +161,7 @@
|
||||
PayAllocStatusEnum,
|
||||
PayRefundStatusEnum,
|
||||
PayStatusEnum,
|
||||
} from '@/enums/daxpay/TradeStatusEnum'
|
||||
} from '@/enums/daxpay/tradeStatusEnum'
|
||||
import { merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { mchAppDropdown } from '@/views/daxpay/common/merchant/app/MchApp.api'
|
||||
|
||||
|
@@ -6,7 +6,7 @@ import {
|
||||
PayRefundStatusEnum,
|
||||
PayStatusEnum,
|
||||
RefundStatusEnum,
|
||||
} from '@/enums/daxpay/TradeStatusEnum'
|
||||
} from '@/enums/daxpay/tradeStatusEnum'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
|
@@ -128,7 +128,7 @@
|
||||
import PayOrderInfo from '../pay/PayOrderInfo.vue'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import ALink from '@/components/Link/Link.vue'
|
||||
import { RefundStatusEnum } from '@/enums/daxpay/TradeStatusEnum'
|
||||
import { RefundStatusEnum } from '@/enums/daxpay/tradeStatusEnum'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { mchAppDropdown } from '@/views/daxpay/common/merchant/app/MchApp.api'
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { defHttp } from '@/utils/http/axios'
|
||||
import { PageResult, Result } from '#/axios'
|
||||
import { MchEntity } from '#/web'
|
||||
import { TransferStatusEnum } from '@/enums/daxpay/TradeStatusEnum'
|
||||
import { TransferStatusEnum } from '@/enums/daxpay/tradeStatusEnum'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
|
@@ -125,7 +125,7 @@
|
||||
import { useDict } from '@/hooks/bootx/useDict'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import ALink from '/@/components/Link/Link.vue'
|
||||
import { TransferStatusEnum } from '@/enums/daxpay/TradeStatusEnum'
|
||||
import { TransferStatusEnum } from '@/enums/daxpay/tradeStatusEnum'
|
||||
import { Icon } from '@/components/Icon'
|
||||
import { merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { mchAppDropdown } from '@/views/daxpay/common/merchant/app/MchApp.api'
|
||||
|
@@ -118,7 +118,7 @@
|
||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { useDict } from '@/hooks/bootx/useDict'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import ReconcileDiscrepancyInfo from './ReconcileDiscrepancyInfo.vue'
|
||||
import ReconcileStatementInfo from '../statement/ReconcileStatementInfo.vue'
|
||||
import PayOrderInfo from '@/views/daxpay/common/order/pay/PayOrderInfo.vue'
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { defHttp } from '@/utils/http/axios'
|
||||
import { PageResult, Result } from '#/axios'
|
||||
import { MchEntity } from '#/web'
|
||||
import { CallbackStatusEnum } from '@/enums/daxpay/TradeStatusEnum'
|
||||
import { CallbackStatusEnum } from '@/enums/daxpay/tradeStatusEnum'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
|
@@ -87,7 +87,7 @@
|
||||
import PayOrderInfo from '@/views/daxpay/common/order/pay/PayOrderInfo.vue'
|
||||
import RefundOrderInfo from '@/views/daxpay/common/order/refund/RefundOrderInfo.vue'
|
||||
import TransferOrderInfo from '@/views/daxpay/common/order/transfer/TransferOrderInfo.vue'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import { merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { mchAppDropdown } from '@/views/daxpay/common/merchant/app/MchApp.api'
|
||||
|
||||
|
@@ -97,7 +97,7 @@
|
||||
import TransferOrderInfo from '@/views/daxpay/common/order/transfer/TransferOrderInfo.vue'
|
||||
import ALink from '@/components/Link/Link.vue'
|
||||
import TradeFlowRecordInfo from './TradeFlowRecordInfo.vue'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import { merchantDropdown } from '@/views/daxpay/admin/merchant/info/Merchant.api'
|
||||
import { mchAppDropdown } from '@/views/daxpay/common/merchant/app/MchApp.api'
|
||||
|
||||
|
@@ -83,7 +83,7 @@
|
||||
import BQuery from '@/components/Bootx/Query/BQuery.vue'
|
||||
import { LIST, QueryField, STRING } from '@/components/Bootx/Query/Query'
|
||||
import { useDict } from '@/hooks/bootx/useDict'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/ChannelEnum'
|
||||
import { TradeTypeEnum } from '@/enums/daxpay/daxpayEnum'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import ALink from '/@/components/Link/Link.vue'
|
||||
import PayOrderInfo from '@/views/daxpay/common/order/pay/PayOrderInfo.vue'
|
||||
|
Reference in New Issue
Block a user