Skip to content

Commit 12014af

Browse files
committed
mall + pay:
1. 优化退款管理的接口实现
1 parent 5966ed2 commit 12014af

File tree

3 files changed

+63
-141
lines changed

3 files changed

+63
-141
lines changed

src/utils/dict.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export const DICT_TYPE = {
5858
PAY_CHANNEL_CODE: 'pay_channel_code', // 支付渠道编码类型
5959
PAY_NOTIFY_STATUS: 'pay_notify_status', // 商户支付回调状态
6060
PAY_ORDER_STATUS: 'pay_order_status', // 商户支付订单状态
61-
PAY_REFUND_ORDER_STATUS: 'pay_refund_order_status', // 退款订单状态
61+
PAY_REFUND_STATUS: 'pay_refund_status', // 退款订单状态
6262

6363
// ========== MP 模块 ==========
6464
MP_AUTO_REPLY_REQUEST_MATCH: 'mp_auto_reply_request_match', // 自动回复请求匹配类型

src/views/pay/order/index.vue

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
</el-select>
1010
</el-form-item>
1111
<el-form-item label="支付渠道" prop="channelCode">
12-
<el-select v-model="queryParams.channelCode" placeholder="请选择支付渠道" clearable
13-
@clear="()=>{queryParams.channelCode = null}">
12+
<el-select v-model="queryParams.channelCode" placeholder="请选择支付渠道" clearable>
1413
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_CHANNEL_CODE)" :key="dict.value" :label="dict.label" :value="dict.value"/>
1514
</el-select>
1615
</el-form-item>
@@ -77,9 +76,15 @@
7776
</el-table-column>
7877
<el-table-column label="订单号" align="left" width="300">
7978
<template v-slot="scope">
80-
<p class="order-font"><el-tag size="mini">商户单号</el-tag> {{scope.row.merchantOrderId}}</p>
81-
<p class="order-font" v-if="scope.row.no"><el-tag size="mini" type="warning">支付单号</el-tag> {{scope.row.no}}</p>
82-
<p class="order-font" v-if="scope.row.channelOrderNo"><el-tag size="mini" type="success">渠道单号</el-tag> {{scope.row.channelOrderNo}}</p>
79+
<p class="order-font"><el-tag size="mini">
80+
商户</el-tag> {{scope.row.merchantOrderId}}
81+
</p>
82+
<p class="order-font" v-if="scope.row.no">
83+
<el-tag size="mini" type="warning">支付</el-tag> {{scope.row.no}}
84+
</p>
85+
<p class="order-font" v-if="scope.row.channelOrderNo">
86+
<el-tag size="mini" type="success">渠道</el-tag> {{scope.row.channelOrderNo}}
87+
</p>
8388
</template>
8489
</el-table-column>
8590
<el-table-column label="支付状态" align="center" prop="status">

src/views/pay/refund/index.vue

Lines changed: 52 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,30 @@
77
<el-option v-for="item in appList" :key="item.id" :label="item.name" :value="item.id" />
88
</el-select>
99
</el-form-item>
10-
<el-form-item label="渠道编码" prop="channelCode">
11-
<el-select v-model="queryParams.channelCode" placeholder="请输入渠道编码" clearable
12-
@clear="()=>{queryParams.channelCode = null}">
13-
<el-option v-for="dict in payChannelCodeDictDatum" :key="dict.value" :label="dict.label" :value="dict.value"/>
10+
<el-form-item label="退款渠道" prop="channelCode">
11+
<el-select v-model="queryParams.channelCode" placeholder="请选择退款渠道" clearable>
12+
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_CHANNEL_CODE)" :key="dict.value" :label="dict.label" :value="dict.value"/>
1413
</el-select>
1514
</el-form-item>
16-
<el-form-item label="退款类型" prop="type">
17-
<el-select v-model="queryParams.type" placeholder="请选择退款类型" clearable>
18-
<el-option v-for="dict in payRefundOrderTypeDictDatum" :key="parseInt(dict.value)"
19-
:label="dict.label" :value="parseInt(dict.value)"/>
20-
</el-select>
15+
<el-form-item label="商户支付单号" prop="merchantOrderId">
16+
<el-input v-model="queryParams.merchantOrderId" placeholder="请输入商户支付单号" clearable
17+
@keyup.enter.native="handleQuery"/>
18+
</el-form-item>
19+
<el-form-item label="商户退款单号" prop="merchantRefundId">
20+
<el-input v-model="queryParams.merchantRefundId" placeholder="请输入商户退款单号" clearable
21+
@keyup.enter.native="handleQuery"/>
22+
</el-form-item>
23+
<el-form-item label="渠道支付单号" prop="channelOrderNo">
24+
<el-input v-model="queryParams.channelOrderNo" placeholder="请输入渠道支付单号" clearable
25+
@keyup.enter.native="handleQuery"/>
2126
</el-form-item>
22-
<el-form-item label="商户退款订单号" prop="merchantRefundNo">
23-
<el-input v-model="queryParams.merchantRefundNo" placeholder="请输入商户退款订单号" clearable
27+
<el-form-item label="渠道退款单号" prop="channelRefundNo">
28+
<el-input v-model="queryParams.channelRefundNo" placeholder="请输入渠道退款单号" clearable
2429
@keyup.enter.native="handleQuery"/>
2530
</el-form-item>
2631
<el-form-item label="退款状态" prop="status">
2732
<el-select v-model="queryParams.status" placeholder="请选择退款状态" clearable>
28-
<el-option v-for="dict in payRefundOrderDictDatum" :key="parseInt(dict.value)"
33+
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_REFUND_STATUS)" :key="parseInt(dict.value)"
2934
:label="dict.label" :value="parseInt(dict.value)"/>
3035
</el-select>
3136
</el-form-item>
@@ -52,65 +57,55 @@
5257
<!-- 列表 -->
5358
<el-table v-loading="loading" :data="list">
5459
<el-table-column label="编号" align="center" prop="id"/>
55-
<el-table-column label="支付渠道" align="center" width="130">
60+
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
61+
<template v-slot="scope">
62+
<span>{{ parseTime(scope.row.createTime) }}</span>
63+
</template>
64+
</el-table-column>
65+
<el-table-column label="支付金额" align="center" prop="payPrice" width="100">
66+
<template v-slot="scope" class="">
67+
¥{{ (scope.row.payPrice / 100.0).toFixed(2) }}
68+
</template>
69+
</el-table-column>
70+
<el-table-column label="退款金额" align="center" prop="refundPrice" width="100">
5671
<template v-slot="scope">
57-
<el-popover trigger="hover" placement="top">
58-
<p>应用名称: {{ scope.row.appName }}</p>
59-
<p>渠道名称: {{ scope.row.channelCodeName }}</p>
60-
<div slot="reference" class="name-wrapper">
61-
{{ scope.row.channelCodeName }}
62-
</div>
63-
</el-popover>
72+
¥{{ (scope.row.refundPrice / 100.0).toFixed(2) }}
6473
</template>
6574
</el-table-column>
66-
<!-- <el-table-column label="交易订单号" align="center" prop="tradeNo" width="140"/>-->
67-
<!-- <el-table-column label="商户订单编号" align="center" prop="merchantOrderId" width="140"/>-->
68-
<el-table-column label="商户订单号" align="left" width="230">
75+
<el-table-column label="退款订单号" align="left" width="300">
6976
<template v-slot="scope">
7077
<p class="order-font">
71-
<el-tag size="mini">退款</el-tag>
72-
{{ scope.row.merchantRefundNo }}
78+
<el-tag size="mini">商户</el-tag> {{scope.row.merchantRefundId}}
7379
</p>
7480
<p class="order-font">
75-
<el-tag type="success">交易</el-tag>
76-
{{ scope.row.merchantOrderId }}
81+
<el-tag size="mini" type="warning">支付</el-tag> {{scope.row.no}}
82+
</p>
83+
<p class="order-font" v-if="scope.row.channelRefundNo">
84+
<el-tag size="mini" type="success">渠道</el-tag> {{scope.row.channelRefundNo}}
7785
</p>
7886
</template>
7987
</el-table-column>
80-
<el-table-column label="支付订单号" align="center" prop="merchantRefundNo" width="250">
88+
<el-table-column label="支付订单号" align="left" width="300">
8189
<template v-slot="scope">
8290
<p class="order-font">
83-
<el-tag size="mini">交易</el-tag>
84-
{{ scope.row.tradeNo }}
91+
<el-tag size="mini">商户</el-tag> {{scope.row.merchantOrderId}}
8592
</p>
8693
<p class="order-font">
87-
<el-tag size="mini" type="warning">渠道</el-tag>
88-
{{ scope.row.channelOrderNo }}
94+
<el-tag size="mini" type="success">渠道</el-tag> {{scope.row.channelOrderNo}}
8995
</p>
9096
</template>
9197
</el-table-column>
92-
<el-table-column label="支付金额(元)" align="center" prop="payPrice" width="100">
93-
<template v-slot="scope" class="">
94-
¥{{ parseFloat(scope.row.payPrice / 100).toFixed(2) }}
95-
</template>
96-
</el-table-column>
97-
<el-table-column label="退款金额(元)" align="center" prop="refundPrice" width="100">
98-
<template v-slot="scope">
99-
¥{{ parseFloat(scope.row.refundPrice / 100).toFixed(2) }}
100-
</template>
101-
</el-table-column>
10298
<el-table-column label="退款状态" align="center" prop="status">
10399
<template v-slot="scope">
104-
<dict-tag :type="DICT_TYPE.PAY_REFUND_ORDER_STATUS" :value="scope.row.status" />
100+
<dict-tag :type="DICT_TYPE.PAY_REFUND_STATUS" :value="scope.row.status" />
105101
</template>
106102
</el-table-column>
107-
<el-table-column label="退款原因" align="center" prop="reason" width="140" :show-overflow-tooltip="true"/>
108-
<el-table-column label="创建时间" align="center" prop="createTime" width="100">
103+
<el-table-column label="退款渠道" align="center" width="140">
109104
<template v-slot="scope">
110-
<span>{{ parseTime(scope.row.createTime) }}</span>
105+
<dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="scope.row.channelCode" />
111106
</template>
112107
</el-table-column>
113-
<el-table-column label="退款成功时间" align="center" prop="successTime" width="100">
108+
<el-table-column label="成功时间" align="center" prop="successTime" width="180">
114109
<template v-slot="scope">
115110
<span>{{ parseTime(scope.row.successTime) }}</span>
116111
</template>
@@ -150,7 +145,7 @@
150145
<el-tag class="tag-purple" size="mini">{{ parseFloat(refundDetail.refundPrice / 100).toFixed(2) }}</el-tag>
151146
</el-descriptions-item>
152147
<el-descriptions-item label="退款状态">
153-
<dict-tag :type="DICT_TYPE.PAY_REFUND_ORDER_STATUS" :value="refundDetail.status" />
148+
<dict-tag :type="DICT_TYPE.PAY_REFUND_STATUS" :value="refundDetail.status" />
154149
</el-descriptions-item>
155150
<el-descriptions-item label="创建时间">{{ parseTime(refundDetail.createTime) }}</el-descriptions-item>
156151
<el-descriptions-item label="退款成功时间">{{ parseTime(refundDetail.successTime) }}</el-descriptions-item>
@@ -185,37 +180,7 @@
185180

186181
<script>
187182
import {getRefundPage, exportRefundExcel, getRefund} from "@/api/pay/refund";
188-
import { DICT_TYPE, getDictDatas } from "@/utils/dict";
189-
import { getNowDateTime } from "@/utils/ruoyi";
190-
191-
const defaultRefundDetail = {
192-
id: null,
193-
appId: null,
194-
appName: '',
195-
channelCode: '',
196-
channelCodeName: '',
197-
channelErrorCode: '',
198-
channelErrorMsg: '',
199-
channelExtras: '',
200-
channelId: null,
201-
channelOrderNo: '',
202-
channelRefundNo: '',
203-
createTime: null,
204-
expireTime: null,
205-
merchantOrderId: '',
206-
merchantRefundNo: '',
207-
notifyUrl: '',
208-
orderId: null,
209-
payPrice: null,
210-
reason: '',
211-
refundPrice: null,
212-
status: null,
213-
subject: '',
214-
successTime: null,
215-
tradeNo: '',
216-
type: null,
217-
userIp: ''
218-
}
183+
import { getAppList } from "@/api/pay/app";
219184
220185
export default {
221186
name: "PayRefund",
@@ -239,67 +204,30 @@ export default {
239204
pageNo: 1,
240205
pageSize: 10,
241206
appId: null,
242-
channelId: null,
243207
channelCode: null,
244-
orderId: null,
245-
tradeNo: null,
246208
merchantOrderId: null,
247-
merchantRefundNo: null,
248-
notifyUrl: null,
249-
status: null,
250-
type: null,
251-
payPrice: null,
252-
refundPrice: null,
253-
reason: null,
254-
userIp: null,
209+
merchantRefundId: null,
255210
channelOrderNo: null,
256211
channelRefundNo: null,
257-
channelErrorCode: null,
258-
channelErrorMsg: null,
259-
channelExtras: null,
260-
expireTime: [],
261-
successTime: [],
212+
status: null,
262213
createTime: []
263214
},
264-
// 商户加载遮罩层
265-
merchantLoading: false,
266-
// 商户列表集合
267-
merchantList: null,
268215
// 支付应用列表集合
269216
appList: null,
270-
// 支付渠道编码字典数据集合
271-
payChannelCodeDictDatum: getDictDatas(DICT_TYPE.PAY_CHANNEL_CODE),
272-
// 订单退款状态字典数据集合
273-
payRefundOrderDictDatum: getDictDatas(DICT_TYPE.PAY_REFUND_ORDER_STATUS),
274-
// 订单回调商户状态字典数据集合
275-
payOrderNotifyDictDatum: getDictDatas(DICT_TYPE.PAY_NOTIFY_STATUS),
276217
// 退款订单详情
277-
refundDetail: JSON.parse(JSON.stringify(defaultRefundDetail)),
218+
refundDetail: {},
278219
};
279220
},
280221
created() {
281-
this.initTime();
282222
this.getList();
283-
this.handleGetMerchantListByName(null);
223+
// 获得筛选项
224+
getAppList().then(response => {
225+
this.appList = response.data;
226+
})
284227
},
285228
methods: {
286-
initTime(){
287-
this.queryParams.createTime = [getNowDateTime("00:00:00"), getNowDateTime("23:59:59")];
288-
},
289229
/** 查询列表 */
290230
getList() {
291-
// 判断选择的日期是否超过了一个月
292-
let oneMonthTime = 31 * 24 * 3600 * 1000;
293-
if (this.queryParams.createTime == null){
294-
this.initTime();
295-
} else {
296-
let minDateTime = new Date(this.queryParams.createTime[0]).getTime();
297-
let maxDateTime = new Date(this.queryParams.createTime[1]).getTime()
298-
if (maxDateTime - minDateTime > oneMonthTime) {
299-
this.$message.error('时间范围最大为 31 天!');
300-
return false;
301-
}
302-
}
303231
this.loading = true;
304232
// 执行查询
305233
getRefundPage(this.queryParams).then(response => {
@@ -335,26 +263,15 @@ export default {
335263
this.$download.excel(response, '退款订单.xls');
336264
}).catch(() => {});
337265
},
338-
/**
339-
* 根据商户名称模糊匹配商户信息
340-
* @param name 商户名称
341-
*/
342-
handleGetMerchantListByName(name) {
343-
getMerchantListByName(name).then(response => {
344-
this.merchantList = response.data;
345-
this.merchantLoading = false;
346-
});
347-
},
348266
/**
349267
* 查看订单详情
350268
*/
351269
handleQueryDetails(row) {
352-
this.refundDetail = JSON.parse(JSON.stringify(defaultRefundDetail));
270+
this.refundDetail = {};
353271
getRefund(row.id).then(response => {
354272
this.refundDetail = response.data;
355273
this.open = true;
356274
});
357-
358275
},
359276
}
360277
};

0 commit comments

Comments
 (0)