feat:第三方支付接口完善

This commit is contained in:
dzc committed 2026-03-30 11:45:10 +08:00
1 parent c8a728e286
commit 3b351cc852
4 files changed
+153 -49

No files matched your search

+88
View File
@@ -0,0 +1,88 @@
<template>
<div>
<el-button :style="xmlViewStyle" type="text" link @click="xmlViewVisible = true">
<div :style="xmlViewStyle" class="xml-view">{{ xmlInline }}</div>
</el-button>
<el-dialog append-to-body v-model="xmlViewVisible">
<pre class="xml-pre" v-text="xmlFormatted"></pre>
<template #footer>
<el-button @click="xmlViewVisible = false">关闭</el-button>
</template>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="preview-xml">
type Props = {
width?: number
xml?: string
}
const props = withDefaults(defineProps<Props>(), {
width: 0,
xml: "",
})
const xmlViewVisible = ref<boolean>(false)
const formatXml = (xml: string): string => {
if (!xml) return ""
const PADDING = " "
const reg = /(>)(<)(\/*)/g
let xmlStr = xml.replace(/\r\n/g, "\n").replace(/\n/g, "\r\n").replace(reg, "$1\r\n$2$3")
let pad = 0
return xmlStr
.split("\r\n")
.map((node) => {
let indent = ""
if (!node || node.trim().length === 0) return node
const trimmed = node.trim()
if (/.+<\/\w[^>]*>$/.test(trimmed)) {
indent = PADDING.repeat(pad)
} else if (/^<\/\w/.test(trimmed)) {
pad = Math.max(pad - 1, 0)
indent = PADDING.repeat(pad)
} else if (/^<\w[^>]*[^\/]>.*$/.test(trimmed)) {
indent = PADDING.repeat(pad)
pad += 1
} else {
indent = PADDING.repeat(pad)
}
return indent + trimmed
})
.join("\r\n")
}
const xmlFormatted = computed(() => {
try {
return formatXml(props.xml || "")
} catch {
return props.xml || ""
}
})
const xmlInline = computed(() => {
return props.xml || ""
})
const xmlViewStyle = computed(() => {
if (!props.width) return { width: "160px !important" }
return { width: `${props.width}px !important` }
})
</script>
<style lang="scss" scoped>
.xml-view {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.xml-pre {
white-space: pre-wrap;
word-break: break-word;
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
font-size: 12px;
line-height: 1.6;
}
</style>
+2
View File
@@ -15,6 +15,7 @@ import TagList from "/@/components/TagList/index.vue"
import SvgIcon from "/@/components/SvgIcon/index.vue"
import PreviewImage from "/@/components/PreviewImage/index.vue"
import PreviewJson from "/@/components/PreviewJson/index.vue"
import PreviewXml from "/@/components/PreviewXml/index.vue"
import DraggableDepTree from "/@/components/DraggableDepTree/index.vue"
// 业务组件
@@ -79,6 +80,7 @@ export default {
app.component("SvgIcon", SvgIcon)
app.component("PreviewImage", PreviewImage)
app.component("PreviewJson", PreviewJson)
app.component("PreviewXml", PreviewXml)
app.component("DraggableDepTree", DraggableDepTree)
app.component("TreeMultipleSelect", TreeMultipleSelect)
app.component("SelectHard", SelectHard)
+19 -45
View File
@@ -2,14 +2,15 @@
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-form-item style="width: 250px" label="发起方" prop="paySourceType">
<el-form-item style="width: 250px" label="用户" prop="paySourceType">
<dict-select v-model="state.queryForm.apiType" dict-code="third_key_type" />
</el-form-item>
<el-form-item style="width: 250px" label="接口类型" prop="bizType">
<dict-select v-model="state.queryForm.bizType" dict-code="third_pay_api_type" />
</el-form-item>
<el-form-item style="width: 400px" label="请求时间" prop="createTimeList">
<el-date-picker v-model="state.queryForm.createTimeList" value-format="YYYY-MM-DD" type="daterange" />
<el-date-picker v-model="state.queryForm.createTimeList" value-format="YYYY-MM-DD"
type="daterange" />
</el-form-item>
<el-form-item>
<el-button icon="Search" type="primary" @click="getDataList">
@@ -20,38 +21,22 @@
</el-form>
<el-row>
<div class="mb8" style="width: 100%">
<el-button icon="folder-add" type="primary" class="ml10" @click="formDialogRef.openDialog()" v-auth="'third_thirdPayLog_add'">
<el-button icon="folder-add" type="primary" class="ml10" @click="formDialogRef.openDialog()"
v-auth="'third_thirdPayLog_add'">
新 增
</el-button>
<el-button
plain
:disabled="multiple"
icon="Delete"
type="primary"
v-auth="'third_thirdPayLog_del'"
@click="handleDelete(selectObjs)"
>
<el-button plain :disabled="multiple" icon="Delete" type="primary" v-auth="'third_thirdPayLog_del'"
@click="handleDelete(selectObjs)">
删除
</el-button>
<right-toolbar
v-model:showSearch="showSearch"
:export="'third_thirdPayLog_export'"
@exportExcel="exportExcel"
class="ml10 mr20"
style="float: right"
@queryTable="getDataList"
></right-toolbar>
<right-toolbar v-model:showSearch="showSearch" :export="'third_thirdPayLog_export'"
@exportExcel="exportExcel" class="ml10 mr20" style="float: right"
@queryTable="getDataList"></right-toolbar>
</div>
</el-row>
<el-table
:data="state.dataList"
v-loading="state.loading"
border
:cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle"
@selection-change="selectionChangHandle"
@sort-change="sortChangeHandle"
>
<el-table :data="state.dataList" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@sort-change="sortChangeHandle">
<el-table-column type="index" label="#" width="80" />
<el-table-column prop="paySourceType" label="发起方" width="120">
<template #default="{ row }">
@@ -79,30 +64,19 @@
<el-table-column prop="createTime" label="调用时间" width="180" />
<el-table-column label="操作" fixed="right" width="80" v-if="false">
<template #default="scope">
<el-button
v-if="false"
icon="edit-pen"
text
type="primary"
v-auth="'third_thirdPayLog_edit'"
@click="formDialogRef.openDialog(scope.row.id)"
>
<el-button v-if="false" icon="edit-pen" text type="primary" v-auth="'third_thirdPayLog_edit'"
@click="formDialogRef.openDialog(scope.row.id)">
编辑
</el-button>
<el-button
v-if="false"
icon="delete"
text
type="primary"
v-auth="'third_thirdPayLog_del'"
@click="handleDelete([scope.row.id])"
>
<el-button v-if="false" icon="delete" text type="primary" v-auth="'third_thirdPayLog_del'"
@click="handleDelete([scope.row.id])">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
v-bind="state.pagination" />
</div>
<!-- 编辑、新增 -->
+44 -4
View File
@@ -1,8 +1,39 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-form ref="queryRef" :inline="true" :model="state.queryForm" @keyup.enter="getDataList">
<el-form-item style="width: 250px" label="支付平台" prop="payPlatformType">
<dict-select v-model="state.queryForm.payPlatformType" dict-code="mini_platform_type" />
</el-form-item>
<el-form-item style="width: 250px" label="业务类型" prop="bizType">
<dict-select v-model="state.queryForm.bizType" dict-code="third_pay_order_biz_type" />
</el-form-item>
<el-form-item style="width: 250px" label="用户" prop="userId">
<select-user v-model="state.queryForm.userId" />
</el-form-item>
<el-form-item style="width: 450px" label="支付时间" prop="payTimeList">
<el-date-picker v-model="state.queryForm.payTimeList" value-format="YYYY-MM-DD HH:mm:ss"
type="datetimerange" />
</el-form-item>
<el-form-item style="width: 450px" label="退款时间" prop="refundTimeList">
<el-date-picker v-model="state.queryForm.refundTimeList" value-format="YYYY-MM-DD HH:mm:ss"
type="datetimerange" />
</el-form-item>
<el-form-item>
<el-button icon="Search" type="primary" @click="getDataList">
{{ $t("common.queryBtn") }}
</el-button>
<el-button icon="Refresh" @click="resetQuery">
{{ $t("common.resetBtn") }}
</el-button>
</el-form-item>
</el-form>
<el-row>
<div class="mb8" style="width: 100%">
<!-- :export="'third_thirdPayLog_export'" -->
<right-toolbar v-model:showSearch="showSearch" @exportExcel="exportExcel" class="ml10 mr20"
style="float: right" @queryTable="getDataList"></right-toolbar>
</div>
</el-row>
<el-table :data="state.dataList" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle" @selection-change="selectionChangHandle"
@@ -20,7 +51,8 @@
</el-table-column>
<el-table-column prop="bizId" label="支付业务id" width="200" show-overflow-tooltip />
<el-table-column prop="payNo" label="支付订单号" width="200" show-overflow-tooltip />
<el-table-column prop="userId" label="用户id" show-overflow-tooltip />
<el-table-column prop="username" label="用户" width="100" show-overflow-tooltip />
<el-table-column prop="userPhone" label="用户手机号" width="150" show-overflow-tooltip />
<el-table-column prop="userCode" label="用户第三方平台唯一编码" width="280" />
<el-table-column prop="price" width="100" label="支付金额">
<template #default="{ row }">
@@ -33,10 +65,18 @@
</template>
</el-table-column>
<el-table-column prop="payTime" label="支付时间" width="180" />
<el-table-column prop="payRes" label="支付返回" width="200" show-overflow-tooltip />
<el-table-column prop="payRes" label="支付返回" width="200">
<template #default="{ row }">
<preview-xml :xml="row.payRes" />
</template>
</el-table-column>
<el-table-column prop="refundNo" label="退款订单号" width="200" show-overflow-tooltip />
<el-table-column prop="refundTime" label="退款时间" width="180" />
<el-table-column prop="refundRes" label="退款返回" width="200" show-overflow-tooltip />
<el-table-column prop="refundRes" label="退款返回" width="200">
<template #default="{ row }">
<preview-xml :xml="row.refundRes" />
</template>
</el-table-column>
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>