mirror of
https://gitee.com/bootx/dax-pay-ui
synced 2026-08-13 15:55:43 +08:00
Merge remote-tracking branch 'aliyun/dev' into dev
# Conflicts: # src/views/payment/record/callback/PayCallbackRecordList.vue
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* 支付状态
|
||||
*/
|
||||
export enum PayStatus {
|
||||
export enum payStatus {
|
||||
/** 支付中 */
|
||||
PROGRESS = 'progress',
|
||||
|
||||
|
||||
4
src/enums/payment/reconcileResultEnum.ts
Normal file
4
src/enums/payment/reconcileResultEnum.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 对账结果枚举
|
||||
*/
|
||||
export enum ReconcileResult {}
|
||||
@@ -1,43 +0,0 @@
|
||||
import { defHttp } from '/@/utils/http/axios'
|
||||
import { Result, PageResult } from '/#/axios'
|
||||
import { BaseEntity } from '/#/web'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
export function page(params) {
|
||||
return defHttp.get<Result<PageResult<AlipayRecord>>>({
|
||||
url: '/alipay/record/page',
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取详情
|
||||
*/
|
||||
export function get(id) {
|
||||
return defHttp.get<Result<AlipayRecord>>({
|
||||
url: '/alipay/record/findById',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录
|
||||
*/
|
||||
export interface AlipayRecord extends BaseEntity {
|
||||
// 标题
|
||||
title?: string
|
||||
// 业务类型
|
||||
type?: string
|
||||
// 金额
|
||||
amount?: string
|
||||
// 交易订单号
|
||||
orderId?: string
|
||||
// 交易订单号
|
||||
gatewayOrderNo?: string
|
||||
// 终端ip
|
||||
ip?: string
|
||||
// 网关时间
|
||||
gatewayTime?: string
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
<template>
|
||||
<basic-modal
|
||||
title="查看"
|
||||
v-bind="$attrs"
|
||||
:loading="confirmLoading"
|
||||
:width="modalWidth"
|
||||
:visible="visible"
|
||||
:mask-closable="showable"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-descriptions bordered title="" :column="{ md: 1, sm: 1, xs: 1 }">
|
||||
<a-descriptions-item label="标题">
|
||||
{{ alipayRecord.title }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="金额(分)">
|
||||
{{ alipayRecord.amount }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="本地订单号">
|
||||
{{ alipayRecord.orderId }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="网关订单号">
|
||||
{{ alipayRecord.gatewayOrderNo }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="业务类型">
|
||||
<a-tag>{{ dictConvert('AlipayRecordType', alipayRecord.type) }}</a-tag>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="网关时间">
|
||||
{{ alipayRecord.gatewayTime }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="记录时间">
|
||||
{{ alipayRecord.createTime }}
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</a-spin>
|
||||
<template #footer>
|
||||
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
||||
</template>
|
||||
</basic-modal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { get, AlipayRecord } from './AlipayRecord.api'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { BasicModal } from '/@/components/Modal'
|
||||
import useFormEdit from '/@/hooks/bootx/useFormEdit'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
|
||||
const {
|
||||
initFormEditType,
|
||||
handleCancel,
|
||||
search,
|
||||
labelCol,
|
||||
wrapperCol,
|
||||
modalWidth,
|
||||
title,
|
||||
confirmLoading,
|
||||
visible,
|
||||
editable,
|
||||
showable,
|
||||
formEditType,
|
||||
} = useFormEdit()
|
||||
const { dictConvert } = useDict()
|
||||
|
||||
let loading = $ref(false)
|
||||
let alipayRecord = $ref<AlipayRecord>({})
|
||||
|
||||
/**
|
||||
* 入口
|
||||
*/
|
||||
function init(record: AlipayRecord) {
|
||||
visible.value = true
|
||||
alipayRecord = record
|
||||
initData(record.id as string)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
async function initData(alipayId) {
|
||||
loading = true
|
||||
const { data } = await get(alipayId)
|
||||
loading = false
|
||||
alipayRecord = data
|
||||
}
|
||||
|
||||
defineExpose({ init })
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -1,123 +0,0 @@
|
||||
<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="{ queryMethod: queryPage }" />
|
||||
<vxe-table
|
||||
row-id="id"
|
||||
ref="xTable"
|
||||
:data="pagination.records"
|
||||
:loading="loading"
|
||||
:sort-config="{ remote: true, trigger: 'cell' }"
|
||||
@sort-change="sortChange"
|
||||
>
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="title" title="标题" />
|
||||
<vxe-column field="type" title="类型">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('AlipayRecordType', row.type) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="amount" title="金额" />
|
||||
<vxe-column field="orderId" title="本地订单ID" width="170" />
|
||||
<vxe-column field="gatewayOrderNo" title="网关订单号" width="170" />
|
||||
<vxe-column field="gatewayTime" title="网关时间" sortable />
|
||||
<vxe-column fixed="right" width="50" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<vxe-pager
|
||||
size="medium"
|
||||
:loading="loading"
|
||||
:current-page="pagination.current"
|
||||
:page-size="pagination.size"
|
||||
:total="pagination.total"
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<alipay-record-info ref="alipayRecordInfo" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted } from 'vue'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { page } from './AlipayRecord.api'
|
||||
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||
import { VxeTable, VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
import AlipayRecordInfo from './AlipayRecordInfo.vue'
|
||||
import ALink from '/@/components/Link/Link.vue'
|
||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||
import { LIST, QueryField, STRING } from '/@/components/Bootx/Query/Query'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
|
||||
// 使用hooks
|
||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, sortChange, sortParam, pages, model, loading } =
|
||||
useTablePage(queryPage)
|
||||
const { notification, createMessage, createConfirm } = useMessage()
|
||||
const { dictConvert, dictDropDown } = useDict()
|
||||
|
||||
const alipayRecordInfo = $ref<any>()
|
||||
const xTable = $ref<VxeTableInstance>()
|
||||
const xToolbar = $ref<VxeToolbarInstance>()
|
||||
|
||||
let recordTypeList = $ref<LabeledValue[]>([])
|
||||
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'title', type: STRING, name: '标题', placeholder: '请输入标题' },
|
||||
{ field: 'orderId', type: STRING, name: '本地订单ID', placeholder: '请输入完整本地订单ID' },
|
||||
{ field: 'type', type: LIST, name: '记录类型', placeholder: '请选择记录类型', selectList: recordTypeList },
|
||||
{ field: 'gatewayOrderNo', type: STRING, name: '网关订单号', placeholder: '请输入完整网关订单号' },
|
||||
] as QueryField[]
|
||||
})
|
||||
onMounted(() => {
|
||||
vxeBind()
|
||||
initData()
|
||||
queryPage()
|
||||
})
|
||||
|
||||
/**
|
||||
* 绑定
|
||||
*/
|
||||
function vxeBind() {
|
||||
xTable?.connect(xToolbar as VxeToolbarInstance)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
async function initData() {
|
||||
recordTypeList = await dictDropDown('AlipayRecordType')
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
function show(record) {
|
||||
alipayRecordInfo.init(record)
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
function queryPage() {
|
||||
loading.value = true
|
||||
page({
|
||||
...model.queryParam,
|
||||
...pages,
|
||||
...sortParam,
|
||||
}).then(({ data }) => {
|
||||
pageQueryResHandel(data)
|
||||
})
|
||||
return Promise.resolve()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -1,43 +0,0 @@
|
||||
import { defHttp } from '/@/utils/http/axios'
|
||||
import { Result, PageResult } from '/#/axios'
|
||||
import { BaseEntity } from '/#/web'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
export function page(params) {
|
||||
return defHttp.get<Result<PageResult<UnionPayRecord>>>({
|
||||
url: '/union/pay/record/page',
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取详情
|
||||
*/
|
||||
export function get(id) {
|
||||
return defHttp.get<Result<UnionPayRecord>>({
|
||||
url: '/union/pay/record/findById',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录
|
||||
*/
|
||||
export interface UnionPayRecord extends BaseEntity {
|
||||
// 标题
|
||||
title?: string
|
||||
// 业务类型
|
||||
type?: string
|
||||
// 金额
|
||||
amount?: string
|
||||
// 交易订单号
|
||||
orderId?: string
|
||||
// 交易订单号
|
||||
gatewayOrderNo?: string
|
||||
// 终端ip
|
||||
ip?: string
|
||||
// 网关时间
|
||||
gatewayTime?: string
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
<template>
|
||||
<basic-modal
|
||||
title="查看"
|
||||
v-bind="$attrs"
|
||||
:loading="confirmLoading"
|
||||
:width="modalWidth"
|
||||
:visible="visible"
|
||||
:mask-closable="showable"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-descriptions bordered title="" :column="{ md: 1, sm: 1, xs: 1 }">
|
||||
<a-descriptions-item label="标题">
|
||||
{{ unionPayRecord.title }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="金额(分)">
|
||||
{{ unionPayRecord.amount }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="本地订单号">
|
||||
{{ unionPayRecord.orderId }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="网关订单号">
|
||||
{{ unionPayRecord.gatewayOrderNo }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="业务类型">
|
||||
<a-tag>{{ dictConvert('UnionPayRecordType', unionPayRecord.type) }}</a-tag>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="网关时间">
|
||||
{{ unionPayRecord.gatewayTime }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="记录时间">
|
||||
{{ unionPayRecord.createTime }}
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</a-spin>
|
||||
<template #footer>
|
||||
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
||||
</template>
|
||||
</basic-modal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { get, UnionPayRecord } from './UnionPayRecord.api'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { BasicModal } from '/@/components/Modal'
|
||||
import useFormEdit from '/@/hooks/bootx/useFormEdit'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
|
||||
const {
|
||||
initFormEditType,
|
||||
handleCancel,
|
||||
search,
|
||||
labelCol,
|
||||
wrapperCol,
|
||||
modalWidth,
|
||||
title,
|
||||
confirmLoading,
|
||||
visible,
|
||||
editable,
|
||||
showable,
|
||||
formEditType,
|
||||
} = useFormEdit()
|
||||
const { dictConvert } = useDict()
|
||||
|
||||
let loading = $ref(false)
|
||||
let unionPayRecord = $ref<UnionPayRecord>({})
|
||||
|
||||
/**
|
||||
* 入口
|
||||
*/
|
||||
function init(record: UnionPayRecord) {
|
||||
visible.value = true
|
||||
unionPayRecord = record
|
||||
initData(record.id as string)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
async function initData(alipayId) {
|
||||
loading = true
|
||||
const { data } = await get(alipayId)
|
||||
loading = false
|
||||
unionPayRecord = data
|
||||
}
|
||||
|
||||
defineExpose({ init })
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -1,121 +0,0 @@
|
||||
<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="{ queryMethod: queryPage }" />
|
||||
<vxe-table
|
||||
row-id="id"
|
||||
ref="xTable"
|
||||
:data="pagination.records"
|
||||
:loading="loading"
|
||||
:sort-config="{ remote: true, trigger: 'cell' }"
|
||||
@sort-change="sortChange"
|
||||
>
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="title" title="标题" />
|
||||
<vxe-column field="type" title="类型">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('UnionPayRecordType', row.type) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="amount" title="金额" />
|
||||
<vxe-column field="orderId" title="本地订单ID" width="170" />
|
||||
<vxe-column field="gatewayOrderNo" title="网关订单号" width="170" />
|
||||
<vxe-column field="gatewayTime" title="网关时间" sortable />
|
||||
<vxe-column fixed="right" width="50" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<vxe-pager
|
||||
size="medium"
|
||||
:loading="loading"
|
||||
:current-page="pagination.current"
|
||||
:page-size="pagination.size"
|
||||
:total="pagination.total"
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<union-pay-record-info ref="unionPayRecordInfo" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted } from 'vue'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { page } from './UnionPayRecord.api'
|
||||
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||
import { VxeTable, VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
import ALink from '/@/components/Link/Link.vue'
|
||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||
import { LIST, STRING } from '/@/components/Bootx/Query/Query'
|
||||
import UnionPayRecordInfo from './UnionPayRecordInfo.vue'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
|
||||
// 使用hooks
|
||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, sortChange, sortParam, pages, model, loading } =
|
||||
useTablePage(queryPage)
|
||||
const { notification, createMessage, createConfirm } = useMessage()
|
||||
const { dictConvert, dictDropDown } = useDict()
|
||||
|
||||
let unionPayRecordInfo = $ref<any>()
|
||||
|
||||
const xTable = $ref<VxeTableInstance>()
|
||||
const xToolbar = $ref<VxeToolbarInstance>()
|
||||
let recordTypeList = $ref<LabeledValue[]>([])
|
||||
|
||||
const fields = [
|
||||
{ field: 'title', type: STRING, name: '标题', placeholder: '请输入标题' },
|
||||
{ field: 'orderId', type: STRING, name: '本地订单ID', placeholder: '请输入完整本地订单ID' },
|
||||
{ field: 'type', type: LIST, name: '记录类型', placeholder: '请选择记录类型', selectList: recordTypeList },
|
||||
{ field: 'gatewayOrderNo', type: STRING, name: '网关订单号', placeholder: '请输入完整网关订单号' },
|
||||
]
|
||||
onMounted(() => {
|
||||
vxeBind()
|
||||
initData()
|
||||
queryPage()
|
||||
})
|
||||
|
||||
/**
|
||||
* 绑定
|
||||
*/
|
||||
function vxeBind() {
|
||||
xTable?.connect(xToolbar as VxeToolbarInstance)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
async function initData() {
|
||||
recordTypeList = await dictDropDown('UnionPayRecordType')
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
function show(record) {
|
||||
unionPayRecordInfo.init(record)
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
function queryPage() {
|
||||
loading.value = true
|
||||
page({
|
||||
...model.queryParam,
|
||||
...pages,
|
||||
...sortParam,
|
||||
}).then(({ data }) => {
|
||||
pageQueryResHandel(data)
|
||||
})
|
||||
return Promise.resolve()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -1,45 +0,0 @@
|
||||
import { defHttp } from '/@/utils/http/axios'
|
||||
import { Result, PageResult } from '/#/axios'
|
||||
import { BaseEntity } from '/#/web'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
export function page(params) {
|
||||
return defHttp.get<Result<PageResult<WalletRecord>>>({
|
||||
url: '/wallet/record/page',
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取详情
|
||||
*/
|
||||
export function get(id) {
|
||||
return defHttp.get<Result<WalletRecord>>({
|
||||
url: '/wallet/record/findById',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 钱包记录
|
||||
*/
|
||||
export interface WalletRecord extends BaseEntity {
|
||||
// 钱包id
|
||||
walletId?: string
|
||||
// 标题
|
||||
title?: string
|
||||
// 业务类型
|
||||
type?: string
|
||||
// 金额
|
||||
amount?: string
|
||||
// 变动之前的金额
|
||||
oldAmount?: string
|
||||
// 变动之后的金额
|
||||
newAmount?: string
|
||||
// 交易订单号
|
||||
orderId?: string
|
||||
// 终端ip
|
||||
ip?: string
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
<template>
|
||||
<basic-modal
|
||||
title="查看"
|
||||
v-bind="$attrs"
|
||||
:loading="confirmLoading"
|
||||
:width="modalWidth"
|
||||
:visible="visible"
|
||||
:mask-closable="showable"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-descriptions bordered title="" :column="{ md: 1, sm: 1, xs: 1 }">
|
||||
<a-descriptions-item label="标题">
|
||||
{{ walletRecord.title }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="金额(分)">
|
||||
{{ walletRecord.amount }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="变动前金额(分)">
|
||||
{{ walletRecord.oldAmount }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="变动后金额(分)">
|
||||
{{ walletRecord.newAmount }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="交易订单号">
|
||||
{{ walletRecord.orderId }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="业务类型">
|
||||
<a-tag>{{ dictConvert('WalletRecordType', walletRecord.type) }}</a-tag>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="记录时间">
|
||||
{{ walletRecord.createTime }}
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</a-spin>
|
||||
<template #footer>
|
||||
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
||||
</template>
|
||||
</basic-modal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { get, WalletRecord } from './WalletRecord.api'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { BasicModal } from '/@/components/Modal'
|
||||
import useFormEdit from '/@/hooks/bootx/useFormEdit'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
|
||||
const {
|
||||
initFormEditType,
|
||||
handleCancel,
|
||||
search,
|
||||
labelCol,
|
||||
wrapperCol,
|
||||
modalWidth,
|
||||
title,
|
||||
confirmLoading,
|
||||
visible,
|
||||
editable,
|
||||
showable,
|
||||
formEditType,
|
||||
} = useFormEdit()
|
||||
const { dictConvert } = useDict()
|
||||
|
||||
let loading = $ref(false)
|
||||
let walletRecord = $ref<WalletRecord>({})
|
||||
|
||||
/**
|
||||
* 入口
|
||||
*/
|
||||
function init(record: WalletRecord) {
|
||||
visible.value = true
|
||||
walletRecord = record
|
||||
initData(record.id as string)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
async function initData(walletId) {
|
||||
loading = true
|
||||
const { data } = await get(walletId)
|
||||
loading = false
|
||||
walletRecord = data
|
||||
}
|
||||
|
||||
defineExpose({ init })
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -1,130 +0,0 @@
|
||||
<template>
|
||||
<basic-drawer forceRender v-bind="$attrs" title="钱包记录" width="60%" :visible="visible" @close="visible = false">
|
||||
<vxe-toolbar ref="xToolbar" custom :refresh="{ queryMethod: queryPage }" />
|
||||
<vxe-table
|
||||
row-id="id"
|
||||
ref="xTable"
|
||||
:data="pagination.records"
|
||||
:cell-style="cellStyle"
|
||||
:loading="loading"
|
||||
:sort-config="{ remote: true, trigger: 'cell' }"
|
||||
@sort-change="sortChange"
|
||||
>
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="title" title="标题" />
|
||||
<vxe-column field="type" title="类型">
|
||||
<template #default="{ row }">
|
||||
{{ dictConvert('WalletRecordType', row.type) }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="amount" title="金额" />
|
||||
<vxe-column field="orderId" title="订单号" />
|
||||
<vxe-column field="createTime" title="记录时间" sortable />
|
||||
<vxe-column fixed="right" width="50" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<vxe-pager
|
||||
size="medium"
|
||||
:loading="loading"
|
||||
:current-page="pagination.current"
|
||||
:page-size="pagination.size"
|
||||
:total="pagination.total"
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<wallet-record-info ref="walletRecordInfo" />
|
||||
</basic-drawer>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted } from 'vue'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { page, WalletRecord } from './WalletRecord.api'
|
||||
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||
import { VxeTable, VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
import { Wallet } from '/@/views/payment/channel/wallet/manager/Wallet.api'
|
||||
import BasicDrawer from '/@/components/Drawer/src/BasicDrawer.vue'
|
||||
import WalletRecordInfo from './WalletRecordInfo.vue'
|
||||
import ALink from "/@/components/Link/Link.vue";
|
||||
|
||||
// 使用hooks
|
||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, sortChange, sortParam, pages, model, loading } =
|
||||
useTablePage(queryPage)
|
||||
const { notification, createMessage, createConfirm } = useMessage()
|
||||
const { dictConvert, dictDropDown } = useDict()
|
||||
|
||||
let visible = $ref<boolean>(false)
|
||||
let wallet = $ref<Wallet>({})
|
||||
let walletRecordInfo = $ref<any>()
|
||||
|
||||
const xTable = $ref<VxeTableInstance>()
|
||||
const xToolbar = $ref<VxeToolbarInstance>()
|
||||
|
||||
onMounted(() => {
|
||||
vxeBind()
|
||||
})
|
||||
|
||||
/**
|
||||
* 绑定
|
||||
*/
|
||||
function vxeBind() {
|
||||
xTable?.connect(xToolbar as VxeToolbarInstance)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
function init(record: Wallet) {
|
||||
visible = true
|
||||
wallet = record
|
||||
queryPage()
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
function show(record) {
|
||||
walletRecordInfo.init(record)
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
function queryPage() {
|
||||
loading.value = true
|
||||
page({
|
||||
...model.queryParam,
|
||||
...pages,
|
||||
...sortParam,
|
||||
walletId: wallet.id,
|
||||
}).then(({ data }) => {
|
||||
pageQueryResHandel(data)
|
||||
})
|
||||
return Promise.resolve()
|
||||
}
|
||||
function cellStyle({ row, column }) {
|
||||
if (column.field == 'type') {
|
||||
if (row.status == 'success') {
|
||||
return { color: 'green' }
|
||||
}
|
||||
if (row.status == 'fail') {
|
||||
return { color: 'red' }
|
||||
}
|
||||
if (row.status == 'progress') {
|
||||
return { color: 'orange' }
|
||||
}
|
||||
if (row.status == 'close') {
|
||||
return { color: 'gray' }
|
||||
}
|
||||
return { color: 'red' }
|
||||
}
|
||||
|
||||
}
|
||||
defineExpose({ init })
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -1,43 +0,0 @@
|
||||
import { defHttp } from '/@/utils/http/axios'
|
||||
import { Result, PageResult } from '/#/axios'
|
||||
import { BaseEntity } from '/#/web'
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*/
|
||||
export function page(params) {
|
||||
return defHttp.get<Result<PageResult<WechatPayRecord>>>({
|
||||
url: '/wechat/pay/record/page',
|
||||
params,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取详情
|
||||
*/
|
||||
export function get(id) {
|
||||
return defHttp.get<Result<WechatPayRecord>>({
|
||||
url: '/wechat/pay/record/findById',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录
|
||||
*/
|
||||
export interface WechatPayRecord extends BaseEntity {
|
||||
// 标题
|
||||
title?: string
|
||||
// 业务类型
|
||||
type?: string
|
||||
// 金额
|
||||
amount?: string
|
||||
// 交易订单号
|
||||
orderId?: string
|
||||
// 交易订单号
|
||||
gatewayOrderNo?: string
|
||||
// 终端ip
|
||||
ip?: string
|
||||
// 网关时间
|
||||
gatewayTime?: string
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
<template>
|
||||
<basic-modal
|
||||
title="查看"
|
||||
v-bind="$attrs"
|
||||
:loading="confirmLoading"
|
||||
:width="modalWidth"
|
||||
:visible="visible"
|
||||
:mask-closable="showable"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-spin :spinning="confirmLoading">
|
||||
<a-descriptions bordered title="" :column="{ md: 1, sm: 1, xs: 1 }">
|
||||
<a-descriptions-item label="标题">
|
||||
{{ wechatPayRecord.title }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="金额(分)">
|
||||
{{ wechatPayRecord.amount }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="本地订单号">
|
||||
{{ wechatPayRecord.orderId }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="网关订单号">
|
||||
{{ wechatPayRecord.gatewayOrderNo }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="业务类型">
|
||||
<a-tag>{{ dictConvert('WechatPayRecordType', wechatPayRecord.type) }}</a-tag>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="网关时间">
|
||||
{{ wechatPayRecord.gatewayTime }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="记录时间">
|
||||
{{ wechatPayRecord.createTime }}
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</a-spin>
|
||||
<template #footer>
|
||||
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
||||
</template>
|
||||
</basic-modal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { get, WechatPayRecord } from './WechatPayRecord.api'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { BasicModal } from '/@/components/Modal'
|
||||
import useFormEdit from '/@/hooks/bootx/useFormEdit'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
|
||||
const {
|
||||
initFormEditType,
|
||||
handleCancel,
|
||||
search,
|
||||
labelCol,
|
||||
wrapperCol,
|
||||
modalWidth,
|
||||
title,
|
||||
confirmLoading,
|
||||
visible,
|
||||
editable,
|
||||
showable,
|
||||
formEditType,
|
||||
} = useFormEdit()
|
||||
const { dictConvert } = useDict()
|
||||
|
||||
let loading = $ref(false)
|
||||
let wechatPayRecord = $ref<WechatPayRecord>({})
|
||||
|
||||
/**
|
||||
* 入口
|
||||
*/
|
||||
function init(record: WechatPayRecord) {
|
||||
visible.value = true
|
||||
wechatPayRecord = record
|
||||
initData(record.id as string)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
async function initData(wechatPayId) {
|
||||
loading = true
|
||||
const { data } = await get(wechatPayId)
|
||||
loading = false
|
||||
wechatPayRecord = data
|
||||
}
|
||||
|
||||
defineExpose({ init })
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -1,122 +0,0 @@
|
||||
<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="{ queryMethod: queryPage }" />
|
||||
<vxe-table
|
||||
row-id="id"
|
||||
ref="xTable"
|
||||
:data="pagination.records"
|
||||
:loading="loading"
|
||||
:sort-config="{ remote: true, trigger: 'cell' }"
|
||||
@sort-change="sortChange"
|
||||
>
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="title" title="标题" />
|
||||
<vxe-column field="type" title="类型">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('WechatPayRecordType', row.type) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="amount" title="金额" />
|
||||
<vxe-column field="orderId" title="本地订单ID" width="170" />
|
||||
<vxe-column field="gatewayOrderNo" title="网关订单号" width="170" />
|
||||
<vxe-column field="gatewayTime" title="网关时间" sortable />
|
||||
<vxe-column fixed="right" width="50" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<vxe-pager
|
||||
size="medium"
|
||||
:loading="loading"
|
||||
:current-page="pagination.current"
|
||||
:page-size="pagination.size"
|
||||
:total="pagination.total"
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<wechatPay-record-info ref="wechatPayRecordInfo" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, onMounted } from 'vue'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { page } from './WechatPayRecord.api'
|
||||
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||
import { VxeTable, VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
import WechatPayRecordInfo from './WechatPayRecordInfo.vue'
|
||||
import ALink from '/@/components/Link/Link.vue'
|
||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||
import { LIST, QueryField, STRING } from '/@/components/Bootx/Query/Query'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
|
||||
// 使用hooks
|
||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, sortChange, sortParam, pages, model, loading } =
|
||||
useTablePage(queryPage)
|
||||
const { notification, createMessage, createConfirm } = useMessage()
|
||||
const { dictConvert, dictDropDown } = useDict()
|
||||
|
||||
const xTable = $ref<VxeTableInstance>()
|
||||
const xToolbar = $ref<VxeToolbarInstance>()
|
||||
const wechatPayRecordInfo = $ref<any>()
|
||||
|
||||
let recordTypeList = $ref<LabeledValue[]>([])
|
||||
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'title', type: STRING, name: '标题', placeholder: '请输入标题' },
|
||||
{ field: 'orderId', type: STRING, name: '本地订单ID', placeholder: '请输入完整本地订单ID' },
|
||||
{ field: 'type', type: LIST, name: '记录类型', placeholder: '请选择记录类型', selectList: recordTypeList },
|
||||
{ field: 'gatewayOrderNo', type: STRING, name: '网关订单号', placeholder: '请输入完整网关订单号' },
|
||||
] as QueryField[]
|
||||
})
|
||||
onMounted(() => {
|
||||
vxeBind()
|
||||
initData()
|
||||
queryPage()
|
||||
})
|
||||
|
||||
/**
|
||||
* 绑定
|
||||
*/
|
||||
function vxeBind() {
|
||||
xTable?.connect(xToolbar as VxeToolbarInstance)
|
||||
}
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
async function initData() {
|
||||
recordTypeList = await dictDropDown('WechatPayRecordType')
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
function show(record) {
|
||||
wechatPayRecordInfo.init(record)
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
function queryPage() {
|
||||
loading.value = true
|
||||
page({
|
||||
...model.queryParam,
|
||||
...pages,
|
||||
...sortParam,
|
||||
}).then(({ data }) => {
|
||||
pageQueryResHandel(data)
|
||||
})
|
||||
return Promise.resolve()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -58,13 +58,13 @@
|
||||
<a-menu-item>
|
||||
<a-link @click="sync(row)">同步</a-link>
|
||||
</a-menu-item>
|
||||
<a-menu-item v-if="[PayStatus.PROGRESS].includes(row.status)">
|
||||
<a-menu-item v-if="[payStatus.PROGRESS].includes(row.status)">
|
||||
<a-link @click="closeOrder(row)" danger>关闭</a-link>
|
||||
</a-menu-item>
|
||||
<a-menu-item v-if="row.allocationStatus === 'waiting'">
|
||||
<a-link @click="allocation(row)">分账</a-link>
|
||||
</a-menu-item>
|
||||
<a-menu-item v-if="[PayStatus.SUCCESS, PayStatus.PARTIAL_REFUND].includes(row.status) && row.refundableBalance > 0">
|
||||
<a-menu-item v-if="[payStatus.SUCCESS, payStatus.PARTIAL_REFUND].includes(row.status) && row.refundableBalance > 0">
|
||||
<a-link @click="refund(row)" danger>退款</a-link>
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
@@ -100,7 +100,7 @@
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
import { VxeTableInstance, VxeToolbarInstance, VxePager, VxeTable, VxeToolbar } from 'vxe-table'
|
||||
import ALink from '/@/components/Link/Link.vue'
|
||||
import { PayStatus } from '/@/enums/payment/PayStatus'
|
||||
import { payStatus } from '/@/enums/payment/PayStatus'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
|
||||
// 使用hooks
|
||||
|
||||
@@ -34,7 +34,7 @@ export interface ReconcileDetail extends BaseEntity {
|
||||
paymentId?: string
|
||||
// 订单id
|
||||
refundId?: string
|
||||
// 网关订单号
|
||||
// 外部订单号
|
||||
gatewayOrderNo?: string
|
||||
// 交易金额
|
||||
amount?: string
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<a-descriptions-item label="本地订单ID">
|
||||
{{ form.orderId }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="网关订单号">
|
||||
<a-descriptions-item label="外部订单号">
|
||||
{{ form.gatewayOrderNo }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="交易类型">
|
||||
|
||||
@@ -12,9 +12,11 @@
|
||||
>
|
||||
<vxe-column type="seq" width="60" />
|
||||
<vxe-column field="title" title="订单名称" />
|
||||
<vxe-column field="amount" title="交易金额" />
|
||||
<vxe-column field="amount" title="交易金额">
|
||||
<template #default="{ row }"> {{ row.amount ? (row.amount / 100).toFixed(2) : 0 }} </template>
|
||||
</vxe-column>
|
||||
<vxe-column field="orderId" title="本地订单ID" />
|
||||
<vxe-column field="gatewayOrderNo" title="网关订单号" />
|
||||
<vxe-column field="gatewayOrderNo" title="外部订单号" />
|
||||
<vxe-column field="repairType" title="交易类型">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('ReconcileTrade', row.type) }}</a-tag>
|
||||
@@ -70,7 +72,7 @@
|
||||
{ field: 'title', type: STRING, name: '订单名称', placeholder: '请输入订单名称' },
|
||||
{ field: 'type', type: LIST, name: '交易类型', placeholder: '请选择交易类型', selectList: reconcileTradeList },
|
||||
{ field: 'orderId', type: STRING, name: '本地订单', placeholder: '请输入本地订单ID' },
|
||||
{ field: 'gatewayOrderNo', type: STRING, name: '网关订单号', placeholder: '请输入网关订单号' },
|
||||
{ field: 'gatewayOrderNo', type: STRING, name: '外部订单号', placeholder: '请输入外部订单号' },
|
||||
] as QueryField[]
|
||||
})
|
||||
let visible = $ref(false)
|
||||
|
||||
@@ -34,7 +34,7 @@ export interface ReconcileRecord extends BaseEntity {
|
||||
paymentId?: string
|
||||
// 订单id
|
||||
refundId?: string
|
||||
// 网关订单号
|
||||
// 外部订单号
|
||||
gatewayOrderNo?: string
|
||||
// 交易金额
|
||||
amount?: string
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<a-descriptions-item label="本地订单ID">
|
||||
{{ form.orderId }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item v-if="form.gatewayOrderNo" label="网关订单号">
|
||||
<a-descriptions-item v-if="form.gatewayOrderNo" label="外部订单号">
|
||||
{{ form.gatewayOrderNo }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="订单类型">
|
||||
|
||||
@@ -1,97 +1,119 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="m-3 p-3 pt-5 bg-white">
|
||||
<b-query :query-params="model.queryParam" :default-item-count="3" :fields="fields" @query="queryPage" @reset="resetQueryParams" />
|
||||
</div>
|
||||
<div class="m-3 p-3 bg-white">
|
||||
<vxe-toolbar ref="xToolbar" custom :refresh="{ queryMethod: queryPage }" />
|
||||
<vxe-table
|
||||
row-id="id"
|
||||
ref="xTable"
|
||||
:data="pagination.records"
|
||||
:loading="loading"
|
||||
:sort-config="{ remote: true, trigger: 'cell' }"
|
||||
@sort-change="sortChange"
|
||||
>
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="title" title="订单标题" />
|
||||
<vxe-column field="orderType" title="订单类型">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('ReconcileTrade', row.orderType) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="diffType" title="差异类型">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('ReconcileDiffType', row.diffType) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="orderId" title="本地订单" />
|
||||
<vxe-column field="gatewayOrderNo" title="网关订单" />
|
||||
<vxe-column field="amount" title="交易金额" />
|
||||
<vxe-column field="orderTime" title="订单时间" />
|
||||
<vxe-column fixed="right" width="80" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<vxe-pager
|
||||
size="medium"
|
||||
:loading="loading"
|
||||
:current-page="pagination.current"
|
||||
:page-size="pagination.size"
|
||||
:total="pagination.total"
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<reconcile-diff-info ref="reconcileDiffInfo" />
|
||||
</div>
|
||||
</div>
|
||||
<basic-drawer forceRender v-bind="$attrs" title="差异明细" width="60%" :visible="visible" @close="visible = false">
|
||||
<b-query :query-params="model.queryParam" :default-item-count="3" :fields="fields" @query="queryPage" @reset="resetQueryParams" />
|
||||
<vxe-toolbar ref="xToolbar" custom :refresh="{ queryMethod: queryPage }" />
|
||||
<vxe-table
|
||||
row-id="id"
|
||||
ref="xTable"
|
||||
:data="pagination.records"
|
||||
:loading="loading"
|
||||
:sort-config="{ remote: true, trigger: 'cell' }"
|
||||
@sort-change="sortChange"
|
||||
>
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="title" title="订单标题" min-width="120" />
|
||||
<vxe-column field="orderType" title="订单类型" min-width="120">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('ReconcileTrade', row.orderType) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="diffType" title="差异类型" min-width="120">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('ReconcileDiffType', row.diffType) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="tradeNo" title="交易号" min-width="120" />
|
||||
<vxe-column field="outOrderNo" title="外部交易号" min-width="170" />
|
||||
<vxe-column field="amount" title="交易金额" sortable min-width="120">
|
||||
<template #default="{ row }"> {{ row.amount ? (row.amount / 100).toFixed(2) : 0 }} </template>
|
||||
</vxe-column>
|
||||
<vxe-column field="outAmount" title="外部交易金额" sortable min-width="120">
|
||||
<template #default="{ row }"> {{ row.outAmount ? (row.outAmount / 100).toFixed(2) : 0 }} </template>
|
||||
</vxe-column>
|
||||
<vxe-column field="tradeTime" title="交易时间" sortable min-width="150" />
|
||||
<vxe-column fixed="right" width="100" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<vxe-pager
|
||||
size="medium"
|
||||
:loading="loading"
|
||||
:current-page="pagination.current"
|
||||
:page-size="pagination.size"
|
||||
:total="pagination.total"
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<reconcile-diff-info ref="reconcileDiffInfo" />
|
||||
</basic-drawer>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { computed, onMounted } from 'vue'
|
||||
import { DATE, LIST, QueryField, STRING } from '/@/components/Bootx/Query/Query'
|
||||
import { VxeTable, VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import { computed, nextTick, onMounted } from 'vue'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { page } from './ReconcileDiff.api'
|
||||
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||
import ReconcileDiffInfo from './ReconcileDiffInfo.vue'
|
||||
import { VxeTable, VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
import { LIST, QueryField, STRING } from '/@/components/Bootx/Query/Query'
|
||||
import BasicDrawer from '/@/components/Drawer/src/BasicDrawer.vue'
|
||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
import { ReconcileDetail } from '/@/views/payment/order/reconcile/detail/ReconcileDetail.api'
|
||||
|
||||
// 使用hooks
|
||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, sortChange, sortParam, pagination, pages, model, loading } =
|
||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, sortChange, pagination, pages, sortParam, model, loading } =
|
||||
useTablePage(queryPage)
|
||||
const { notification, createMessage, createConfirm } = useMessage()
|
||||
const { dictConvert, dictDropDown } = useDict()
|
||||
const { notification, createMessage } = useMessage()
|
||||
const { dictDropDown, dictConvert } = useDict()
|
||||
|
||||
let payChannelList = $ref<LabeledValue[]>([])
|
||||
let orderTypeList = $ref<LabeledValue[]>([])
|
||||
let diffTypeList = $ref<LabeledValue[]>([])
|
||||
|
||||
// 查询条件
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'title', type: DATE, name: '订单标题', placeholder: '请输入订单标题' },
|
||||
{ field: 'title', type: STRING, name: '订单名称', placeholder: '请输入订单名称' },
|
||||
{ field: 'orderType', type: LIST, name: '订单类型', placeholder: '请选择订单类型', selectList: orderTypeList },
|
||||
{ field: 'diffType', type: LIST, name: '差异类型', placeholder: '请选择差异类型', selectList: diffTypeList },
|
||||
{ field: 'orderId', type: STRING, name: '本地定单', placeholder: '请输入本地定单ID' },
|
||||
{ field: 'gatewayOrderNo', type: STRING, name: '外部订单号', placeholder: '请输入外部订单号' },
|
||||
] as QueryField[]
|
||||
})
|
||||
let visible = $ref(false)
|
||||
let reconcileDetail = $ref<ReconcileDetail>()
|
||||
|
||||
const xTable = $ref<VxeTableInstance>()
|
||||
const xToolbar = $ref<VxeToolbarInstance>()
|
||||
const reconcileDiffInfo = $ref<any>()
|
||||
|
||||
nextTick(() => {
|
||||
xTable?.connect(xToolbar as VxeToolbarInstance)
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
initData()
|
||||
vxeBind()
|
||||
queryPage()
|
||||
})
|
||||
function vxeBind() {
|
||||
xTable?.connect(xToolbar as VxeToolbarInstance)
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
* 初始化基础数据
|
||||
*/
|
||||
async function initData() {
|
||||
payChannelList = await dictDropDown('AsyncPayChannel')
|
||||
orderTypeList = await dictDropDown('ReconcileTrade')
|
||||
diffTypeList = await dictDropDown('ReconcileDiffType')
|
||||
}
|
||||
/**
|
||||
* 入口
|
||||
*/
|
||||
function init(record: ReconcileDetail) {
|
||||
visible = true
|
||||
reconcileDetail = record
|
||||
model.queryParam = {}
|
||||
xTable?.clearSort()
|
||||
queryPage()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,17 +125,20 @@
|
||||
...model.queryParam,
|
||||
...pages,
|
||||
...sortParam,
|
||||
reconcileId: reconcileDetail?.id,
|
||||
}).then(({ data }) => {
|
||||
pageQueryResHandel(data)
|
||||
})
|
||||
return Promise.resolve()
|
||||
}
|
||||
/**
|
||||
* 查看详情
|
||||
* 查看
|
||||
*/
|
||||
function show(record) {
|
||||
reconcileDiffInfo.init(record)
|
||||
}
|
||||
defineExpose({
|
||||
init,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
|
||||
@@ -1,139 +0,0 @@
|
||||
<template>
|
||||
<basic-drawer forceRender v-bind="$attrs" title="差异明细列表" width="60%" :visible="visible" @close="visible = false">
|
||||
<b-query :query-params="model.queryParam" :default-item-count="3" :fields="fields" @query="queryPage" @reset="resetQueryParams" />
|
||||
<vxe-toolbar ref="xToolbar" custom :refresh="{ queryMethod: queryPage }" />
|
||||
<vxe-table
|
||||
row-id="id"
|
||||
ref="xTable"
|
||||
:data="pagination.records"
|
||||
:loading="loading"
|
||||
:sort-config="{ remote: true, trigger: 'cell' }"
|
||||
@sort-change="sortChange"
|
||||
>
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="title" title="订单标题" />
|
||||
<vxe-column field="orderType" title="订单类型">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('ReconcileTrade', row.orderType) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="diffType" title="差异类型">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('ReconcileDiffType', row.diffType) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="orderId" title="本地订单" />
|
||||
<vxe-column field="gatewayOrderNo" title="网关订单" />
|
||||
<vxe-column field="amount" title="交易金额" sortable />
|
||||
<vxe-column field="orderTime" title="订单时间" sortable />
|
||||
<vxe-column fixed="right" width="80" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
<vxe-pager
|
||||
size="medium"
|
||||
:loading="loading"
|
||||
:current-page="pagination.current"
|
||||
:page-size="pagination.size"
|
||||
:total="pagination.total"
|
||||
@page-change="handleTableChange"
|
||||
/>
|
||||
<reconcile-diff-info ref="reconcileDiffInfo" />
|
||||
</basic-drawer>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted } from 'vue'
|
||||
import { $ref } from 'vue/macros'
|
||||
import { page } from './ReconcileDiff.api'
|
||||
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||
import ReconcileDiffInfo from './ReconcileDiffInfo.vue'
|
||||
import { VxeTable, VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
import { LIST, QueryField, STRING } from '/@/components/Bootx/Query/Query'
|
||||
import BasicDrawer from '/@/components/Drawer/src/BasicDrawer.vue'
|
||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||
import { LabeledValue } from 'ant-design-vue/lib/select'
|
||||
import { useDict } from '/@/hooks/bootx/useDict'
|
||||
import { ReconcileDetail } from '/@/views/payment/order/reconcile/detail/ReconcileDetail.api'
|
||||
|
||||
// 使用hooks
|
||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, sortChange, pagination, pages, sortParam, model, loading } =
|
||||
useTablePage(queryPage)
|
||||
const { notification, createMessage } = useMessage()
|
||||
const { dictDropDown, dictConvert } = useDict()
|
||||
|
||||
let orderTypeList = $ref<LabeledValue[]>([])
|
||||
let diffTypeList = $ref<LabeledValue[]>([])
|
||||
|
||||
// 查询条件
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'title', type: STRING, name: '订单名称', placeholder: '请输入订单名称' },
|
||||
{ field: 'orderType', type: LIST, name: '订单类型', placeholder: '请选择订单类型', selectList: orderTypeList },
|
||||
{ field: 'diffType', type: LIST, name: '差异类型', placeholder: '请选择差异类型', selectList: diffTypeList },
|
||||
{ field: 'orderId', type: STRING, name: '本地定单', placeholder: '请输入本地定单ID' },
|
||||
{ field: 'gatewayOrderNo', type: STRING, name: '网关订单号', placeholder: '请输入网关订单号' },
|
||||
] as QueryField[]
|
||||
})
|
||||
let visible = $ref(false)
|
||||
let reconcileDetail = $ref<ReconcileDetail>()
|
||||
|
||||
const xTable = $ref<VxeTableInstance>()
|
||||
const xToolbar = $ref<VxeToolbarInstance>()
|
||||
const reconcileDiffInfo = $ref<any>()
|
||||
|
||||
nextTick(() => {
|
||||
xTable?.connect(xToolbar as VxeToolbarInstance)
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
initData()
|
||||
})
|
||||
|
||||
/**
|
||||
* 初始化基础数据
|
||||
*/
|
||||
async function initData() {
|
||||
orderTypeList = await dictDropDown('ReconcileTrade')
|
||||
diffTypeList = await dictDropDown('ReconcileDiffType')
|
||||
}
|
||||
/**
|
||||
* 入口
|
||||
*/
|
||||
function init(record: ReconcileDetail) {
|
||||
visible = true
|
||||
reconcileDetail = record
|
||||
model.queryParam = {}
|
||||
xTable?.clearSort()
|
||||
queryPage()
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
function queryPage() {
|
||||
loading.value = true
|
||||
page({
|
||||
...model.queryParam,
|
||||
...pages,
|
||||
...sortParam,
|
||||
recordId: reconcileDetail?.id,
|
||||
}).then(({ data }) => {
|
||||
pageQueryResHandel(data)
|
||||
})
|
||||
}
|
||||
/**
|
||||
* 查看
|
||||
*/
|
||||
function show(record) {
|
||||
reconcileDiffInfo.init(record)
|
||||
}
|
||||
defineExpose({
|
||||
init,
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="less"></style>
|
||||
@@ -56,16 +56,20 @@ export function compare(id: any) {
|
||||
* 支付对账订单
|
||||
*/
|
||||
export interface ReconcileOrder extends BaseEntity {
|
||||
// 批次号
|
||||
batchNo?: string
|
||||
// 对账号
|
||||
reconcileNo?: string
|
||||
// 日期
|
||||
date?: string
|
||||
// 通道
|
||||
channel?: string
|
||||
// 是否下载成功
|
||||
down?: boolean
|
||||
downOrUpload?: boolean
|
||||
// 是否比对完成
|
||||
compare?: boolean
|
||||
// 比对结果
|
||||
result?: string
|
||||
// 错误码
|
||||
errorCode?: string
|
||||
// 错误信息
|
||||
errorMsg?: string
|
||||
}
|
||||
|
||||
@@ -12,23 +12,29 @@
|
||||
<a-descriptions-item label="日期">
|
||||
{{ form.date }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="批次号">
|
||||
{{ form.batchNo }}
|
||||
<a-descriptions-item label="对账号">
|
||||
{{ form.reconcileNo }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="支付通道">
|
||||
<a-tag>{{ dictConvert('PayChannel', form.channel) }}</a-tag>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="对账单下载/上传">
|
||||
<a-tag v-if="form?.down" color="green">完成下载/上传</a-tag>
|
||||
<a-tag v-if="form?.downOrUpload" color="green">完成下载/上传</a-tag>
|
||||
<a-tag v-else color="red">未下载/上传</a-tag>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="对账单比对">
|
||||
<a-tag v-if="form?.compare" color="green">已比对</a-tag>
|
||||
<a-tag v-else color="red">未比对</a-tag>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="比对结果">
|
||||
{{ dictConvert('ReconcileResult', form.result) }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="错误信息">
|
||||
{{ form.errorMsg }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="错误码">
|
||||
{{ form.errorCode }}
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="创建时间">
|
||||
{{ form.createTime }}
|
||||
</a-descriptions-item>
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
>
|
||||
<vxe-column type="seq" title="序号" width="60" />
|
||||
<vxe-column field="date" title="对账日期" />
|
||||
<vxe-column field="batchNo" title="批次号" />
|
||||
<vxe-column field="channel" title="支付通道">
|
||||
<vxe-column field="reconcileNo" title="对账号" />
|
||||
<vxe-column field="channel" title="对账通道">
|
||||
<template #default="{ row }">
|
||||
<a-tag>{{ dictConvert('PayChannel', row.channel) }}</a-tag>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="down" title="下载或上传">
|
||||
<vxe-column field="down" title="下载或上传" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<template v-if="row.down">
|
||||
<a-tag v-if="row.down" color="green">已完成</a-tag>
|
||||
@@ -55,25 +55,19 @@
|
||||
<a-link v-else :disabled="!row.down" color="red" @click="compareOrder(row)">比对</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="result" title="对账结果">
|
||||
<template #default="{ row }">
|
||||
{{ dictConvert('ReconcileResult', row.result) }}
|
||||
</template>
|
||||
</vxe-column>
|
||||
<vxe-column field="errorMsg" title="错误信息" />
|
||||
<vxe-column field="createTime" title="创建时间" />
|
||||
<vxe-column fixed="right" width="120" :showOverflow="false" title="操作">
|
||||
<vxe-column fixed="right" width="150" :showOverflow="false" title="操作">
|
||||
<template #default="{ row }">
|
||||
<a-link @click="show(row)">查看</a-link>
|
||||
<a-divider type="vertical" />
|
||||
<a-dropdown>
|
||||
<a> 更多 <icon icon="ant-design:down-outlined" :size="12" /></a>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item>
|
||||
<a-link @click="showDetailPage(row)">对账明细</a-link>
|
||||
</a-menu-item>
|
||||
<a-menu-item>
|
||||
<a-link @click="showDiffPage(row)">差异明细</a-link>
|
||||
</a-menu-item>
|
||||
</a-menu>
|
||||
</template>
|
||||
</a-dropdown>
|
||||
<!-- <a-link v-if="row.result === 'consistent'" @click="showDiffPage(row)">差异明细</a-link>-->
|
||||
<a-link @click="showDiffPage(row)">差异明细</a-link>
|
||||
</template>
|
||||
</vxe-column>
|
||||
</vxe-table>
|
||||
@@ -87,9 +81,8 @@
|
||||
/>
|
||||
</div>
|
||||
<reconcile-order-create ref="reconcileOrderCreate" @ok="queryPage" />
|
||||
<reconcile-detail-list ref="reconcileDetailList" />
|
||||
<reconcile-order-info ref="reconcileOrderInfo" />
|
||||
<reconcile-diff-list-model ref="reconcileDiffListModel" />
|
||||
<reconcile-diff-list ref="reconcileDiffList" />
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
@@ -103,10 +96,9 @@
|
||||
import { VxeTable, VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||
import { compare, downAndSave, page } from './ReconcileOrder.api'
|
||||
import ReconcileOrderInfo from './ReconcileOrderInfo.vue'
|
||||
import ReconcileDetailList from '../detail/ReconcileDetailList.vue'
|
||||
import ReconcileOrderCreate from './ReconcileOrderCreate.vue'
|
||||
import ALink from '/@/components/Link/Link.vue'
|
||||
import ReconcileDiffListModel from '/@/views/payment/order/reconcile/diff/ReconcileDiffListModel.vue'
|
||||
import ReconcileDiffList from '../diff/ReconcileDiffList.vue'
|
||||
import { useUpload } from '/@/hooks/bootx/useUpload'
|
||||
|
||||
// 使用hooks
|
||||
@@ -118,12 +110,13 @@
|
||||
const { tokenHeader, uploadAction } = useUpload('/order/reconcile/upload')
|
||||
|
||||
let payChannelList = $ref<LabeledValue[]>([])
|
||||
let reconcileResultList = $ref<LabeledValue[]>([])
|
||||
|
||||
// 查询条件
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'date', type: DATE, name: '对账日期', placeholder: '请选择对账日期' },
|
||||
{ field: 'batchNo', type: STRING, name: '批次号', placeholder: '请输入对账批次号' },
|
||||
{ field: 'reconcileNo', type: STRING, name: '批次号', placeholder: '请输入对账批次号' },
|
||||
{
|
||||
field: 'channel',
|
||||
type: LIST,
|
||||
@@ -131,6 +124,13 @@
|
||||
placeholder: '请选择对账通道',
|
||||
selectList: payChannelList,
|
||||
},
|
||||
{
|
||||
field: 'result',
|
||||
type: LIST,
|
||||
name: '对账结果',
|
||||
placeholder: '请选择对账结果',
|
||||
selectList: reconcileResultList,
|
||||
},
|
||||
] as QueryField[]
|
||||
})
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
const reconcileOrderCreate = $ref<any>()
|
||||
const reconcileOrderInfo = $ref<any>()
|
||||
const reconcileDetailList = $ref<any>()
|
||||
const reconcileDiffListModel = $ref<any>()
|
||||
const reconcileDiffList = $ref<any>()
|
||||
|
||||
onMounted(() => {
|
||||
initData()
|
||||
@@ -155,6 +155,7 @@
|
||||
*/
|
||||
async function initData() {
|
||||
payChannelList = await dictDropDown('AsyncPayChannel')
|
||||
reconcileResultList = await dictDropDown('ReconcileResult')
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -254,7 +255,7 @@
|
||||
* 查看差异单
|
||||
*/
|
||||
function showDiffPage(record) {
|
||||
reconcileDiffListModel.init(record)
|
||||
reconcileDiffList.init(record)
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@@ -83,8 +83,8 @@
|
||||
// 查询条件
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'paymentId', type: STRING, name: '支付单号', placeholder: '请输入支付单号' },
|
||||
{ field: 'businessNo', type: STRING, name: '业务号', placeholder: '请输入业务号' },
|
||||
{ field: 'orderNo', type: STRING, name: '订单号', placeholder: '请输入订单号' },
|
||||
{ field: 'bizOrderNo', type: STRING, name: '商户订单号', placeholder: '请输入商户订单号' },
|
||||
{
|
||||
field: 'channel',
|
||||
type: LIST,
|
||||
|
||||
@@ -92,8 +92,7 @@
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'repairNo', type: STRING, name: '修复单号', placeholder: '请输入修复号' },
|
||||
{ field: 'orderId', type: STRING, name: '本地订单ID', placeholder: '请输入本地订单ID' },
|
||||
{ field: 'orderNo', type: STRING, name: '本地订单号', placeholder: '请输入本地订单号' },
|
||||
{ field: 'tradeNo', type: STRING, name: '本地交易号', placeholder: '请输入本地交易号' },
|
||||
{
|
||||
field: 'repairSource',
|
||||
type: LIST,
|
||||
@@ -116,7 +115,7 @@
|
||||
selectList: repairWayList,
|
||||
},
|
||||
{
|
||||
field: 'asyncChannel',
|
||||
field: 'channel',
|
||||
type: LIST,
|
||||
name: '修复通道',
|
||||
placeholder: '请选择修复通道',
|
||||
|
||||
@@ -30,7 +30,7 @@ export interface SyncRecord extends BaseEntity {
|
||||
tradeNo?: string
|
||||
// 商户交易号
|
||||
bizTradeNo?: string
|
||||
// 三方交易号
|
||||
// 外部交易号
|
||||
outTradeNo?: string
|
||||
// 同步类型
|
||||
syncType?: string
|
||||
|
||||
@@ -91,7 +91,9 @@
|
||||
// 查询条件
|
||||
const fields = computed(() => {
|
||||
return [
|
||||
{ field: 'orderNo', type: STRING, name: '本地交易号', placeholder: '请输入本地交易号' },
|
||||
{ field: 'tradeNo', type: STRING, name: '本地交易号', placeholder: '请输入本地交易号' },
|
||||
{ field: 'bizTradeNo', type: STRING, name: '商户交易号', placeholder: '请输入商户交易号' },
|
||||
{ field: 'bizTradeNo', type: STRING, name: '外部交易号', placeholder: '请输入外部交易号' },
|
||||
{
|
||||
field: 'syncType',
|
||||
type: LIST,
|
||||
@@ -100,7 +102,7 @@
|
||||
selectList: syncTypeList,
|
||||
},
|
||||
{
|
||||
field: 'gatewayStatus',
|
||||
field: 'outTradeStatus',
|
||||
type: LIST,
|
||||
name: '同步结果',
|
||||
placeholder: '请选择同步结果',
|
||||
|
||||
Reference in New Issue
Block a user