Commit 5dcb3db5d7ae8c205a7f2f61354211c7604b8f54

Authored by YunaiV
1 parent 888c4882

mall + pay:

1. 优化订单管理的接口实现
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/PayOrderController.java
@@ -56,31 +56,20 @@ public class PayOrderController { @@ -56,31 +56,20 @@ public class PayOrderController {
56 return success(PayOrderConvert.INSTANCE.convert(payOrderService.getOrder(id))); 56 return success(PayOrderConvert.INSTANCE.convert(payOrderService.getOrder(id)));
57 } 57 }
58 58
59 - // TODO 芋艿:看看怎么优化下;  
60 @GetMapping("/get-detail") 59 @GetMapping("/get-detail")
61 @Operation(summary = "获得支付订单详情") 60 @Operation(summary = "获得支付订单详情")
62 @Parameter(name = "id", description = "编号", required = true, example = "1024") 61 @Parameter(name = "id", description = "编号", required = true, example = "1024")
63 @PreAuthorize("@ss.hasPermission('pay:order:query')") 62 @PreAuthorize("@ss.hasPermission('pay:order:query')")
64 public CommonResult<PayOrderDetailsRespVO> getOrderDetail(@RequestParam("id") Long id) { 63 public CommonResult<PayOrderDetailsRespVO> getOrderDetail(@RequestParam("id") Long id) {
65 PayOrderDO order = payOrderService.getOrder(id); 64 PayOrderDO order = payOrderService.getOrder(id);
66 - if (ObjectUtil.isNull(order)) {  
67 - return success(new PayOrderDetailsRespVO()); 65 + if (order == null) {
  66 + return success(null);
68 } 67 }
69 68
70 - PayAppDO appDO = appService.getApp(order.getAppId());  
71 - PayChannelEnum channelEnum = PayChannelEnum.getByCode(order.getChannelCode());  
72 -  
73 - // TODO @aquan:文案,都是前端 format;  
74 - PayOrderDetailsRespVO respVO = PayOrderConvert.INSTANCE.orderDetailConvert(order);  
75 - respVO.setAppName(ObjectUtil.isNotNull(appDO) ? appDO.getName() : "未知应用");  
76 - respVO.setChannelCodeName(ObjectUtil.isNotNull(channelEnum) ? channelEnum.getName() : "未知渠道");  
77 -  
78 - PayOrderExtensionDO extensionDO = orderExtensionService.getOrderExtension(order.getSuccessExtensionId());  
79 - if (ObjectUtil.isNotNull(extensionDO)) {  
80 - respVO.setPayOrderExtension(PayOrderConvert.INSTANCE.orderDetailExtensionConvert(extensionDO));  
81 - }  
82 -  
83 - return success(respVO); 69 + // 拼接返回
  70 + PayAppDO app = appService.getApp(order.getAppId());
  71 + PayOrderExtensionDO orderExtension = orderExtensionService.getOrderExtension(order.getSuccessExtensionId());
  72 + return success(PayOrderConvert.INSTANCE.convert(order, orderExtension, app));
84 } 73 }
85 74
86 @PostMapping("/submit") 75 @PostMapping("/submit")
@@ -90,6 +79,7 @@ public class PayOrderController { @@ -90,6 +79,7 @@ public class PayOrderController {
90 return success(respVO); 79 return success(respVO);
91 } 80 }
92 81
  82 + // TODO 芋艿:优化
93 @GetMapping("/page") 83 @GetMapping("/page")
94 @Operation(summary = "获得支付订单分页") 84 @Operation(summary = "获得支付订单分页")
95 @PreAuthorize("@ss.hasPermission('pay:order:query')") 85 @PreAuthorize("@ss.hasPermission('pay:order:query')")
@@ -116,6 +106,7 @@ public class PayOrderController { @@ -116,6 +106,7 @@ public class PayOrderController {
116 return success(new PageResult<>(pageList, pageResult.getTotal())); 106 return success(new PageResult<>(pageList, pageResult.getTotal()));
117 } 107 }
118 108
  109 + // TODO 芋艿:优化
119 @GetMapping("/export-excel") 110 @GetMapping("/export-excel")
120 @Operation(summary = "导出支付订单Excel") 111 @Operation(summary = "导出支付订单Excel")
121 @PreAuthorize("@ss.hasPermission('pay:order:export')") 112 @PreAuthorize("@ss.hasPermission('pay:order:export')")
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderDetailsRespVO.java
@@ -13,32 +13,30 @@ import java.time.LocalDateTime; @@ -13,32 +13,30 @@ import java.time.LocalDateTime;
13 @ToString(callSuper = true) 13 @ToString(callSuper = true)
14 public class PayOrderDetailsRespVO extends PayOrderBaseVO { 14 public class PayOrderDetailsRespVO extends PayOrderBaseVO {
15 15
16 - @Schema(description = "支付订单编号") 16 + @Schema(description = "支付订单编号", required = true, example = "1024")
17 private Long id; 17 private Long id;
18 18
19 - @Schema(description = "应用名称") 19 + @Schema(description = "应用名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码")
20 private String appName; 20 private String appName;
21 21
22 - @Schema(description = "渠道编号名称")  
23 - private String channelCodeName;  
24 -  
25 - @Schema(description = "创建时间") 22 + @Schema(description = "创建时间", required = true)
26 private LocalDateTime createTime; 23 private LocalDateTime createTime;
27 24
28 /** 25 /**
29 * 支付订单扩展 26 * 支付订单扩展
30 */ 27 */
31 - private PayOrderExtension payOrderExtension; 28 + private PayOrderExtension extension;
32 29
33 @Data 30 @Data
34 @Schema(description = "支付订单扩展") 31 @Schema(description = "支付订单扩展")
35 public static class PayOrderExtension { 32 public static class PayOrderExtension {
36 33
37 - @Schema(description = "支付订单号") 34 + @Schema(description = "支付订单号", required = true, example = "1024")
38 private String no; 35 private String no;
39 36
40 @Schema(description = "支付异步通知的内容") 37 @Schema(description = "支付异步通知的内容")
41 private String channelNotifyData; 38 private String channelNotifyData;
  39 +
42 } 40 }
43 41
44 } 42 }
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/order/PayOrderConvert.java
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
6 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO; 6 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO;
7 import cn.iocoder.yudao.module.pay.controller.admin.order.vo.*; 7 import cn.iocoder.yudao.module.pay.controller.admin.order.vo.*;
8 import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO; 8 import cn.iocoder.yudao.module.pay.controller.app.order.vo.AppPayOrderSubmitRespVO;
  9 +import cn.iocoder.yudao.module.pay.dal.dataobject.app.PayAppDO;
9 import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; 10 import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO;
10 import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO; 11 import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderExtensionDO;
11 import org.mapstruct.Mapper; 12 import org.mapstruct.Mapper;
@@ -30,9 +31,16 @@ public interface PayOrderConvert { @@ -30,9 +31,16 @@ public interface PayOrderConvert {
30 31
31 PayOrderRespDTO convert2(PayOrderDO order); 32 PayOrderRespDTO convert2(PayOrderDO order);
32 33
33 - PayOrderDetailsRespVO orderDetailConvert(PayOrderDO bean);  
34 -  
35 - PayOrderDetailsRespVO.PayOrderExtension orderDetailExtensionConvert(PayOrderExtensionDO bean); 34 + default PayOrderDetailsRespVO convert(PayOrderDO order, PayOrderExtensionDO orderExtension, PayAppDO app) {
  35 + PayOrderDetailsRespVO respVO = convertDetail(order);
  36 + respVO.setExtension(convert(orderExtension));
  37 + if (app != null) {
  38 + respVO.setAppName(app.getName());
  39 + }
  40 + return respVO;
  41 + }
  42 + PayOrderDetailsRespVO convertDetail(PayOrderDO bean);
  43 + PayOrderDetailsRespVO.PayOrderExtension convert(PayOrderExtensionDO bean);
36 44
37 List<PayOrderRespVO> convertList(List<PayOrderDO> list); 45 List<PayOrderRespVO> convertList(List<PayOrderDO> list);
38 46
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/order/PayOrderServiceImpl.java
@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Pair; @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Pair;
5 import cn.hutool.core.util.ObjectUtil; 5 import cn.hutool.core.util.ObjectUtil;
6 import cn.hutool.core.util.RandomUtil; 6 import cn.hutool.core.util.RandomUtil;
7 import cn.hutool.core.util.StrUtil; 7 import cn.hutool.core.util.StrUtil;
  8 +import cn.hutool.extra.spring.SpringUtil;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 9 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; 10 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
10 import cn.iocoder.yudao.framework.pay.config.PayProperties; 11 import cn.iocoder.yudao.framework.pay.config.PayProperties;
@@ -161,7 +162,7 @@ public class PayOrderServiceImpl implements PayOrderService { @@ -161,7 +162,7 @@ public class PayOrderServiceImpl implements PayOrderService {
161 162
162 // 4. 如果调用直接支付成功,则直接更新支付单状态为成功。例如说:付款码支付,免密支付时,就直接验证支付成功 163 // 4. 如果调用直接支付成功,则直接更新支付单状态为成功。例如说:付款码支付,免密支付时,就直接验证支付成功
163 if (unifiedOrderResp != null) { 164 if (unifiedOrderResp != null) {
164 - notifyPayOrder(channel, unifiedOrderResp); 165 + getSelf().notifyPayOrder(channel, unifiedOrderResp);
165 // 如有渠道错误码,则抛出业务异常,提示用户 166 // 如有渠道错误码,则抛出业务异常,提示用户
166 if (StrUtil.isNotEmpty(unifiedOrderResp.getChannelErrorCode())) { 167 if (StrUtil.isNotEmpty(unifiedOrderResp.getChannelErrorCode())) {
167 throw exception(ORDER_SUBMIT_CHANNEL_ERROR, unifiedOrderResp.getChannelErrorCode(), 168 throw exception(ORDER_SUBMIT_CHANNEL_ERROR, unifiedOrderResp.getChannelErrorCode(),
@@ -234,11 +235,17 @@ public class PayOrderServiceImpl implements PayOrderService { @@ -234,11 +235,17 @@ public class PayOrderServiceImpl implements PayOrderService {
234 // 校验支付渠道是否有效 235 // 校验支付渠道是否有效
235 PayChannelDO channel = channelService.validPayChannel(channelId); 236 PayChannelDO channel = channelService.validPayChannel(channelId);
236 // 更新支付订单为已支付 237 // 更新支付订单为已支付
237 - TenantUtils.execute(channel.getTenantId(), () -> notifyPayOrder(channel, notify)); 238 + TenantUtils.execute(channel.getTenantId(), () -> getSelf().notifyPayOrder(channel, notify));
238 } 239 }
239 240
240 - // TODO 芋艿:事务问题  
241 - private void notifyPayOrder(PayChannelDO channel, PayOrderRespDTO notify) { 241 + /**
  242 + * 通知并更新订单的支付结果
  243 + *
  244 + * @param channel 支付渠道
  245 + * @param notify 通知
  246 + */
  247 + @Transactional(rollbackFor = Exception.class) // 注意,如果是方法内调用该方法,需要通过 getSelf().notifyPayOrder(channel, notify) 调用,否则事务不生效
  248 + public void notifyPayOrder(PayChannelDO channel, PayOrderRespDTO notify) {
242 // 情况一:支付成功的回调 249 // 情况一:支付成功的回调
243 if (PayOrderStatusRespEnum.isSuccess(notify.getStatus())) { 250 if (PayOrderStatusRespEnum.isSuccess(notify.getStatus())) {
244 notifyOrderSuccess(channel, notify); 251 notifyOrderSuccess(channel, notify);
@@ -396,4 +403,13 @@ public class PayOrderServiceImpl implements PayOrderService { @@ -396,4 +403,13 @@ public class PayOrderServiceImpl implements PayOrderService {
396 } 403 }
397 } 404 }
398 405
  406 + /**
  407 + * 获得自身的代理对象,解决 AOP 生效问题
  408 + *
  409 + * @return 自己
  410 + */
  411 + private PayOrderServiceImpl getSelf() {
  412 + return SpringUtil.getBean(getClass());
  413 + }
  414 +
399 } 415 }
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/refund/PayRefundServiceImpl.java
@@ -137,7 +137,7 @@ public class PayRefundServiceImpl implements PayRefundService { @@ -137,7 +137,7 @@ public class PayRefundServiceImpl implements PayRefundService {
137 .setOutRefundNo(refund.getNo()) 137 .setOutRefundNo(refund.getNo())
138 .setNotifyUrl(genChannelRefundNotifyUrl(channel)) 138 .setNotifyUrl(genChannelRefundNotifyUrl(channel))
139 .setReason(reqDTO.getReason()); 139 .setReason(reqDTO.getReason());
140 - PayRefundRespDTO refundRespDTO = client.unifiedRefund(unifiedReqDTO); // TODO 增加一个 channelErrorCode、channelErrorMsg 字段 140 + PayRefundRespDTO refundRespDTO = client.unifiedRefund(unifiedReqDTO);
141 // 2.3 处理退款返回 141 // 2.3 处理退款返回
142 notifyRefund(channel, refundRespDTO); 142 notifyRefund(channel, refundRespDTO);
143 143
yudao-ui-admin/src/views/pay/order/index.vue
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 <el-form-item label="渠道编码" prop="channelCode"> 11 <el-form-item label="渠道编码" prop="channelCode">
12 <el-select v-model="queryParams.channelCode" placeholder="请输入渠道编码" clearable 12 <el-select v-model="queryParams.channelCode" placeholder="请输入渠道编码" clearable
13 @clear="()=>{queryParams.channelCode = null}"> 13 @clear="()=>{queryParams.channelCode = null}">
14 - <el-option v-for="dict in payChannelCodeDictDatum" :key="dict.value" :label="dict.label" :value="dict.value"/> 14 + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_CHANNEL_CODE)" :key="dict.value" :label="dict.label" :value="dict.value"/>
15 </el-select> 15 </el-select>
16 </el-form-item> 16 </el-form-item>
17 <el-form-item label="商户订单编号" prop="merchantOrderId"> 17 <el-form-item label="商户订单编号" prop="merchantOrderId">
@@ -24,13 +24,13 @@ @@ -24,13 +24,13 @@
24 </el-form-item> 24 </el-form-item>
25 <el-form-item label="支付状态" prop="status"> 25 <el-form-item label="支付状态" prop="status">
26 <el-select v-model="queryParams.status" placeholder="请选择支付状态" clearable size="small"> 26 <el-select v-model="queryParams.status" placeholder="请选择支付状态" clearable size="small">
27 - <el-option v-for="dict in payOrderDictDatum" :key="parseInt(dict.value)" 27 + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_ORDER_STATUS)" :key="parseInt(dict.value)"
28 :label="dict.label" :value="parseInt(dict.value)"/> 28 :label="dict.label" :value="parseInt(dict.value)"/>
29 </el-select> 29 </el-select>
30 </el-form-item> 30 </el-form-item>
31 <el-form-item label="退款状态" prop="refundStatus"> 31 <el-form-item label="退款状态" prop="refundStatus">
32 <el-select v-model="queryParams.refundStatus" placeholder="请选择退款状态" clearable> 32 <el-select v-model="queryParams.refundStatus" placeholder="请选择退款状态" clearable>
33 - <el-option v-for="dict in payOrderRefundDictDatum" :key="parseInt(dict.value)" 33 + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.PAY_ORDER_REFUND_STATUS)" :key="parseInt(dict.value)"
34 :label="dict.label" :value="parseInt(dict.value)"/> 34 :label="dict.label" :value="parseInt(dict.value)"/>
35 </el-select> 35 </el-select>
36 </el-form-item> 36 </el-form-item>
@@ -102,6 +102,7 @@ @@ -102,6 +102,7 @@
102 </template> 102 </template>
103 103
104 </el-table-column> 104 </el-table-column>
  105 + <!-- TODO 芋艿:要放开 -->
105 <!-- <el-table-column label="退款状态" align="center" prop="refundStatus">--> 106 <!-- <el-table-column label="退款状态" align="center" prop="refundStatus">-->
106 <!-- <template v-slot="scope">--> 107 <!-- <template v-slot="scope">-->
107 <!-- <span>{{ getDictDataLabel(DICT_TYPE.PAY_ORDER_REFUND_STATUS, scope.row.refundStatus) }}</span>--> 108 <!-- <span>{{ getDictDataLabel(DICT_TYPE.PAY_ORDER_REFUND_STATUS, scope.row.refundStatus) }}</span>-->
@@ -124,7 +125,7 @@ @@ -124,7 +125,7 @@
124 </el-table-column> 125 </el-table-column>
125 <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"> 126 <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
126 <template v-slot="scope"> 127 <template v-slot="scope">
127 - <el-button size="mini" type="text" icon="el-icon-search" @click="handleQueryDetails(scope.row)" 128 + <el-button size="mini" type="text" icon="el-icon-search" @click="handleDetail(scope.row)"
128 v-hasPermi="['pay:order:query']">查看详情 129 v-hasPermi="['pay:order:query']">查看详情
129 </el-button> 130 </el-button>
130 </template> 131 </template>
@@ -134,7 +135,7 @@ @@ -134,7 +135,7 @@
134 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" 135 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
135 @pagination="getList"/> 136 @pagination="getList"/>
136 137
137 - <!-- 对话框(添加 / 修改) --> 138 + <!-- 对话框(详情) -->
138 <el-dialog title="订单详情" :visible.sync="open" width="50%"> 139 <el-dialog title="订单详情" :visible.sync="open" width="50%">
139 <el-descriptions :column="2" label-class-name="desc-label"> 140 <el-descriptions :column="2" label-class-name="desc-label">
140 <el-descriptions-item label="应用名称">{{ orderDetail.appName }}</el-descriptions-item> 141 <el-descriptions-item label="应用名称">{{ orderDetail.appName }}</el-descriptions-item>
@@ -149,8 +150,8 @@ @@ -149,8 +150,8 @@
149 <el-tag class="tag-purple" size="small">{{ orderDetail.channelOrderNo }}</el-tag> 150 <el-tag class="tag-purple" size="small">{{ orderDetail.channelOrderNo }}</el-tag>
150 </el-descriptions-item> 151 </el-descriptions-item>
151 <el-descriptions-item label="支付订单号"> 152 <el-descriptions-item label="支付订单号">
152 - <el-tag v-if="orderDetail.payOrderExtension.no !== ''" class="tag-pink" size="small">  
153 - {{ orderDetail.payOrderExtension.no }} 153 + <el-tag v-if="orderDetail.extension.no !== ''" class="tag-pink" size="small">
  154 + {{ orderDetail.extension.no }}
154 </el-tag> 155 </el-tag>
155 </el-descriptions-item> 156 </el-descriptions-item>
156 <el-descriptions-item label="金额"> 157 <el-descriptions-item label="金额">
@@ -176,7 +177,9 @@ @@ -176,7 +177,9 @@
176 </el-descriptions> 177 </el-descriptions>
177 <el-divider></el-divider> 178 <el-divider></el-divider>
178 <el-descriptions :column="2" label-class-name="desc-label"> 179 <el-descriptions :column="2" label-class-name="desc-label">
179 - <el-descriptions-item label="支付渠道">{{ orderDetail.channelCodeName }}</el-descriptions-item> 180 + <el-descriptions-item label="支付渠道">
  181 + <dict-tag :type="DICT_TYPE.PAY_CHANNEL_CODE" :value="orderDetail.channelCode" />
  182 + </el-descriptions-item>
180 <el-descriptions-item label="支付IP">{{ orderDetail.userIp }}</el-descriptions-item> 183 <el-descriptions-item label="支付IP">{{ orderDetail.userIp }}</el-descriptions-item>
181 <el-descriptions-item label="退款状态"> 184 <el-descriptions-item label="退款状态">
182 <dict-tag :type="DICT_TYPE.PAY_ORDER_REFUND_STATUS" :value="orderDetail.refundStatus" /> 185 <dict-tag :type="DICT_TYPE.PAY_ORDER_REFUND_STATUS" :value="orderDetail.refundStatus" />
@@ -194,7 +197,7 @@ @@ -194,7 +197,7 @@
194 {{ orderDetail.body }} 197 {{ orderDetail.body }}
195 </el-descriptions-item> 198 </el-descriptions-item>
196 <el-descriptions-item label="支付通道异步回调内容"> 199 <el-descriptions-item label="支付通道异步回调内容">
197 - {{ orderDetail.payOrderExtension.channelNotifyData }} 200 + {{ orderDetail.extension.channelNotifyData }}
198 </el-descriptions-item> 201 </el-descriptions-item>
199 </el-descriptions> 202 </el-descriptions>
200 </el-dialog> 203 </el-dialog>
@@ -204,34 +207,6 @@ @@ -204,34 +207,6 @@
204 <script> 207 <script>
205 import { getOrderDetail, getOrderPage, exportOrderExcel } from "@/api/pay/order"; 208 import { getOrderDetail, getOrderPage, exportOrderExcel } from "@/api/pay/order";
206 import { DICT_TYPE, getDictDatas } from "@/utils/dict"; 209 import { DICT_TYPE, getDictDatas } from "@/utils/dict";
207 -import { getNowDateTime} from "@/utils/ruoyi";  
208 -  
209 -const defaultOrderDetail = {  
210 - appName: '',  
211 - channelCodeName: '',  
212 - subject: '',  
213 - merchantOrderId: null,  
214 - channelOrderNo: '',  
215 - body: '',  
216 - price: null,  
217 - channelFeeRate: null,  
218 - channelFeePrice: null,  
219 - userIp: '',  
220 - status: null,  
221 - notifyUrl: '',  
222 - notifyStatus: null,  
223 - refundStatus: null,  
224 - refundTimes: '',  
225 - refundPrice: null,  
226 - createTime: '',  
227 - successTime: '',  
228 - notifyTime: '',  
229 - expireTime: '',  
230 - payOrderExtension: {  
231 - channelNotifyData: '',  
232 - no: ''  
233 - }  
234 -};  
235 210
236 export default { 211 export default {
237 name: "PayOrder", 212 name: "PayOrder",
@@ -278,47 +253,24 @@ export default { @@ -278,47 +253,24 @@ export default {
278 notifyTime: [], 253 notifyTime: [],
279 createTime: [] 254 createTime: []
280 }, 255 },
281 - // 商户加载遮罩层  
282 - merchantLoading: false,  
283 - // 商户列表集合  
284 - merchantList: null, 256 +
285 // 支付应用列表集合 257 // 支付应用列表集合
286 - appList: null,  
287 - // 支付渠道编码字典数据集合  
288 - payChannelCodeDictDatum: getDictDatas(DICT_TYPE.PAY_CHANNEL_CODE), 258 + appList: [],
289 // 订单回调商户状态字典数据集合 259 // 订单回调商户状态字典数据集合
290 payOrderNotifyDictDatum: getDictDatas(DICT_TYPE.PAY_ORDER_NOTIFY_STATUS), 260 payOrderNotifyDictDatum: getDictDatas(DICT_TYPE.PAY_ORDER_NOTIFY_STATUS),
291 - // 订单状态字典数据集合  
292 - payOrderDictDatum: getDictDatas(DICT_TYPE.PAY_ORDER_STATUS),  
293 - // 订单退款状态字典数据集合  
294 - payOrderRefundDictDatum: getDictDatas(DICT_TYPE.PAY_ORDER_REFUND_STATUS),  
295 - orderDetail: JSON.parse(JSON.stringify(defaultOrderDetail)), 261 +
  262 + // 订单详情
  263 + orderDetail: {
  264 + extension: {}
  265 + },
296 }; 266 };
297 }, 267 },
298 created() { 268 created() {
299 - // 初始化默认时间  
300 - this.initTime();  
301 this.getList(); 269 this.getList();
302 - this.handleGetMerchantListByName(null);  
303 }, 270 },
304 methods: { 271 methods: {
305 - initTime(){  
306 - this.queryParams.createTime = [getNowDateTime("00:00:00"), getNowDateTime("23:59:59")];  
307 - },  
308 /** 查询列表 */ 272 /** 查询列表 */
309 getList() { 273 getList() {
310 - // 判断选择的日期是否超过了一个月  
311 - let oneMonthTime = 31 * 24 * 3600 * 1000;  
312 - if (this.queryParams.createTime == null){  
313 - this.initTime();  
314 - } else {  
315 - let minDateTime = new Date(this.queryParams.createTime[0]).getTime();  
316 - let maxDateTime = new Date(this.queryParams.createTime[1]).getTime()  
317 - if (maxDateTime - minDateTime > oneMonthTime) {  
318 - this.$message.error('时间范围最大为 31 天!');  
319 - return false;  
320 - }  
321 - }  
322 this.loading = true; 274 this.loading = true;
323 // 执行查询 275 // 执行查询
324 getOrderPage(this.queryParams).then(response => { 276 getOrderPage(this.queryParams).then(response => {
@@ -339,23 +291,22 @@ export default { @@ -339,23 +291,22 @@ export default {
339 /** 重置按钮操作 */ 291 /** 重置按钮操作 */
340 resetQuery() { 292 resetQuery() {
341 this.resetForm("queryForm"); 293 this.resetForm("queryForm");
342 - this.initTime();  
343 this.handleQuery(); 294 this.handleQuery();
344 }, 295 },
345 - /**  
346 - * 查看订单详情  
347 - */  
348 - handleQueryDetails(row) {  
349 - this.orderDetail = JSON.parse(JSON.stringify(defaultOrderDetail)); 296 + /** 详情按钮操作 */
  297 + handleDetail(row) {
  298 + this.orderDetail = {};
350 getOrderDetail(row.id).then(response => { 299 getOrderDetail(row.id).then(response => {
  300 + // 设置值
351 this.orderDetail = response.data; 301 this.orderDetail = response.data;
352 - if (response.data.payOrderExtension === null) {  
353 - this.orderDetail.payOrderExtension = Object.assign(defaultOrderDetail.payOrderExtension, {}); 302 + if (!this.orderDetail.extension) {
  303 + this.orderDetail.extension = {}
354 } 304 }
  305 + // 弹窗打开
355 this.open = true; 306 this.open = true;
356 }); 307 });
357 -  
358 }, 308 },
  309 +
359 /** 导出按钮操作 */ 310 /** 导出按钮操作 */
360 handleExport() { 311 handleExport() {
361 // 处理查询参数 312 // 处理查询参数